Three.js:为BufferGeometry设置setIndex / indices的正确方法?

时间:2017-07-16 00:44:57

标签: three.js webgl buffer-geometry

我正在尝试在BufferGeometry中设置每面UV指数。

我从几何开始。我几何体的每个面都有一个face.materialIndex对应一个UV索引。我正在尝试将其转换为BufferGeometry,然后将face.materialIndex映射到BufferGeometry

这是我到目前为止所拥有的:

// Convert geometry > buffergeometry
const bufGeo = new BufferGeometry().fromGeometry( geometry );

// Get an array of all the original geometry's indices...
const faceIndices = geometry.faces.map( face => face.materialIndex );

// Build a new array with the indices...
const indices = new Uint16Array( faceIndices );

// Apply to the BufferGeometry
bufGeo.setIndex( new BufferAttribute( indices, 1 ) );

现在这似乎破坏了我的网格,使其根本不绘制。我做错了什么?

顺便说一下,当Geometry转换为BufferGeometry时,Three.js将其置于中间格式,首先称为DirectGeometry。这用于复制索引,但it was removed for reasons unknown in this commit by Mr Doob。现在三人似乎完全放弃了Geo>中的指数。 BufGeo转换。

我也尝试使用该提交中的代码(修改为使用setIndex):

const indices = new Uint16Array( faceIndices.length * 3 );
bufGeo.addAttribute( 'index', new BufferAttribute( indices, 1 ).copyIndicesArray( faceIndices ) );

但我有同样的问题。生成的网格被破坏了。

0 个答案:

没有答案