BufferGeometry.setIndex()
方法用于设置一个顶点索引缓冲对象。顶点索引缓冲对象指定了在几何体中哪些顶点应该连接在一起以形成面。
bufferGeometry.setIndex(index);
index
:一个 BufferAttribute
或 Uint16Array
、Uint32Array
。如果该参数为 null
或未定义,则缓冲区中的索引缓冲将被移除。如果您已经创建了一个显式顶点索引数组,并且希望使用该数组作为缓冲区,则可以将该数组传递给 setIndex()
。否则,Three.js 可以自动根据浮点型的顶点数组中的顺序生成一个索引缓冲区。
在设置索引缓冲区之前,应该先设置 BufferGeometry
的 attributes
属性。如果您提供了一个正确的 index
,Three.js 将自动根据您提供的索引缓冲区来生成三角形的细分方式,对于每个三角形将推断三个顶点。如果传递给 setIndex()
的缓冲区已经被分配给其他对象,则会抛出异常。
如果没有用到 setIndex()
,则会认为几何体中索引缓冲对象不存在,这将禁止使用所有的.draw*()
方法。
请注意,可以将 index
传递给 drawArrays()
来明确指定顶点执行的顺序。
// 创建 BufferGeometry
var bufferGeometry = new THREE.BufferGeometry();
// 设置属性
var positions = new Float32Array( [
0.0, 0.0, 0.0,
1.0, 0.0, 0.0,
0.0, 1.0, 0.0
] );
var normals = new Float32Array( [
0.0, 0.0, 1.0,
0.0, 0.0, 1.0,
0.0, 0.0, 1.0
] );
bufferGeometry.setAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) );
bufferGeometry.setAttribute( 'normal', new THREE.BufferAttribute( normals, 3 ) );
// 设置索引缓冲区
var indices = new Uint16Array( [ 0, 1, 2 ] );
bufferGeometry.setIndex( new THREE.BufferAttribute( indices, 1 ) );