[英]three.js r81: How can do i make a cube with diffrent textures on each face
[英]how can i make a cube with a grid in three.js
您需要将立方体添加到Group
中,然后将该Group
添加到场景中,然后将Group
居中
这是执行此操作的一种方法:
const grid = new THREE.Group();
const cubeSize = 0.25;
const rows = 4;
const cols = 4;
const gap = 0.01;
for (let row = 0; row < rows; row++) {
for (let col = 0; col < cols; col++) {
for (let z = 0; z < rows; z++) {
const cube = createCube(cubeSize);
const pos = ((cubeSize / 2) * rows) / 2 + gap;
const x = pos * row;
const y = pos * col;
cube.position.set(x, y, pos * z);
grid.add(cube);
}
}
}
scene.add(grid);
演示:
* { box-sizing: border-box; margin: 0; padding: 0; } canvas { display: block; }
<script type="module"> import * as THREE from "https://cdn.jsdelivr.net/npm/three@0.121.1/build/three.module.js"; import { OrbitControls } from "https://cdn.jsdelivr.net/npm/three@0.121.1/examples/jsm/controls/OrbitControls.js"; const renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 ); const controls = new OrbitControls(camera, renderer.domElement); const grid = new THREE.Group(); const cubeSize = 0.25; const size = 20; const gap = 0.01; const geometry = new THREE.BoxBufferGeometry( cubeSize, cubeSize, cubeSize ); const material = new THREE.MeshNormalMaterial(); const cubes = new THREE.InstancedMesh( geometry, material, Math.pow(size, 3) ); cubes.instanceMatrix.setUsage(THREE.DynamicDrawUsage); grid.add(cubes); scene.add(grid); const cube = new THREE.Object3D(); const center = (size + gap * (size - 1)) * -0.5; grid.position.set(center, center, center); camera.position.z = size * 1.5; (function animate() { requestAnimationFrame(animate); let i = 0; for (let x = 0; x < size; x++) { for (let y = 0; y < size; y++) { for (let z = 0; z < size; z++) { cube.position.set(x, y, z); cube.updateMatrix(); cubes.setMatrixAt(i, cube.matrix); i++; } } } cubes.instanceMatrix.needsUpdate = true; controls.update(); renderer.render(scene, camera); })(); </script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.