[Three.js] 정다면체의 표면에 각각 색칠하는 방법
17345 단어 JavaScript3dtech
전제 조건
장면, 조명, 카메라의 설정이 이미 완성되었다.
입방체의 상황
입방체의 각 면에 색을 칠할 때
6면의 색상을 정렬하여 준비하여 지정하면 됩니다.
const geometryCube = new THREE.BoxGeometry(200, 200, 200);
const materialColors = [
new THREE.MeshBasicMaterial({color: 0xff0000}),
new THREE.MeshBasicMaterial({color: 0x0000ff}),
new THREE.MeshBasicMaterial({color: 0x00ff00}),
new THREE.MeshBasicMaterial({color: 0xffff00}),
new THREE.MeshBasicMaterial({color: 0x00ffff}),
new THREE.MeshBasicMaterial({color: 0xff00ff}),
];
const cube = new THREE.Mesh(geometryCube, materialColors);
scene.add(cube);
정다면체의 상황
양의 다면체의 경우 위 지정만 표시되고 아무 것도 표시되지 않습니다.
다양한 조사 결과groups를 설정해 색상 구분이 가능하다.
이번에는 스무 면체로 만들어 보았다.
const geometryCube = new THREE.IcosahedronGeometry(200); // 正二十面体 Geometry の作成
// 色の設定
const materialColors = [
new THREE.MeshBasicMaterial({color: 0xff0000}),
new THREE.MeshBasicMaterial({color: 0x0000ff}),
new THREE.MeshBasicMaterial({color: 0x00ff00}),
new THREE.MeshBasicMaterial({color: 0xffff00}),
new THREE.MeshBasicMaterial({color: 0x00ffff}),
new THREE.MeshBasicMaterial({color: 0xff00ff}),
new THREE.MeshBasicMaterial({color: 0xcccccc}),
new THREE.MeshBasicMaterial({color: 0xffffff}),
new THREE.MeshBasicMaterial({color: 0xff9100}),
new THREE.MeshBasicMaterial({color: 0x87322f}),
new THREE.MeshBasicMaterial({color: 0x87322f}),
new THREE.MeshBasicMaterial({color: 0xff9100}),
new THREE.MeshBasicMaterial({color: 0xffffff}),
new THREE.MeshBasicMaterial({color: 0xcccccc}),
new THREE.MeshBasicMaterial({color: 0xff00ff}),
new THREE.MeshBasicMaterial({color: 0x00ffff}),
new THREE.MeshBasicMaterial({color: 0xffff00}),
new THREE.MeshBasicMaterial({color: 0x00ff00}),
new THREE.MeshBasicMaterial({color: 0x0000ff}),
new THREE.MeshBasicMaterial({color: 0xff0000}),
];
// addGroup 関数を使って、Geometry に groups を設定する
// addGroup 関数 → https://threejs.org/docs/#api/en/core/BufferGeometry.addGroup
// start は、index 値を3の倍数で増やしていく(他の倍数でも可)
// count は面の数を指定する (今回は20)
// materialIndex は materialColors の index 値を指定する(この値が色分けの指標になる。今回は長さが同じなので、このまま index 値を指定する)
for (let i = 0; i < 20; i++) {
geometryCube.addGroup(i * 3, 20, i);
}
const cube = new THREE.Mesh(geometryCube, materialColors);
scene.add(cube);
완성
20면은 각각 색상으로 구분되어 표시됩니다.
Reference
이 문제에 관하여([Three.js] 정다면체의 표면에 각각 색칠하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/nappa/articles/cfbbd65968bd78텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)