我正在尝试在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 ) );
但我有同样的问题。生成的网格被破坏了。