在 three.js 中将面数组添加到 BufferGeometry
Add array of faces to BufferGeometry in three.js
给定一个 BufferGeometry,我可以从类型 Float32Array
的数组中设置它的顶点,如下所示:
geometry.setAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );
有没有一种方法可以使用 Int32Array
类型的数组以类似的方式设置 BufferGeometry 的面?我想避免这种情况:
geometry.faces.push(
new THREE.Face3(0, 3, 2),
new THREE.Face3(0, 1, 3),
new THREE.Face3(1, 7, 3),
new THREE.Face3(1, 5, 7),
...
);
是的,您正在寻找的是 BufferGeometry.setIndex()
,它允许顶点 re-used 跨越多个三角形,如 outlined in the docs. And here's the the official working demo.
您基本上可以创建一个数组,然后推送 3 个顶点索引集(基于您其他属性的顺序):
var indices = [];
indices.push( 0, 3, 2); // face one
indices.push( 0, 1, 3 ); // face two
geometry.setIndex( indices );
给定一个 BufferGeometry,我可以从类型 Float32Array
的数组中设置它的顶点,如下所示:
geometry.setAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );
有没有一种方法可以使用 Int32Array
类型的数组以类似的方式设置 BufferGeometry 的面?我想避免这种情况:
geometry.faces.push(
new THREE.Face3(0, 3, 2),
new THREE.Face3(0, 1, 3),
new THREE.Face3(1, 7, 3),
new THREE.Face3(1, 5, 7),
...
);
是的,您正在寻找的是 BufferGeometry.setIndex()
,它允许顶点 re-used 跨越多个三角形,如 outlined in the docs. And here's the the official working demo.
您基本上可以创建一个数组,然后推送 3 个顶点索引集(基于您其他属性的顺序):
var indices = [];
indices.push( 0, 3, 2); // face one
indices.push( 0, 1, 3 ); // face two
geometry.setIndex( indices );