function makeCanvasTexture() {
var canvas = document.createElement("canvas");
var context = canvas.getContext("2d");
canvas.width = 32;
canvas.height = 32;
var grad = context.createRadialGradient(16, 16, 6, 16, 16, 16);
grad.addColorStop(0, "rgba(255, 150, 0, 1.0");
grad.addColorStop(0.5, "rgba(255, 0, 150, 1.0");
grad.addColorStop(1, "rgba(0, 150, 255, 1.0)");
context.fillStyle = grad;
context.fillRect(0, 0, 32, 32);
var canvasTexture = new THREE.Texture(canvas);
canvasTexture.needsUpdate = true;
return canvasTexture;
}
var camera, scene, renderer;
renderer = new THREE.WebGLRenderer({antialias: true});
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
scene = new THREE.Scene();
scene.background = new THREE.Color(0xe1e1e1);
camera = new THREE.PerspectiveCamera(35, window.innerWidth / window.innerHeight, 0.1, 100);
camera.position.set(0, 30, -30);
camera.lookAt(0, 0, 0);
const ambient = new THREE.DirectionalLight(0xddeeff, 1);
ambient.position.set(0, 1, 1);
const floor = new THREE.Mesh(
new THREE.BoxBufferGeometry(20, 0.25, 20),
new THREE.MeshBasicMaterial({map: makeCanvasTexture()})
);
scene.add(ambient, floor);
function animate(t) {
floor.rotation.z += Math.sin(t * 0.001) * 0.1;
renderer.render(scene, camera);
requestAnimationFrame(animate);
}
animate(0);
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/109/three.min.js"></script>
CanvasTexture
。 - TheJim01