在 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 );