我正在渲染一个对象,我有以下数据:顶点,顶点索引,法线,法线索引,纹理坐标,纹理坐标索引。 我正在使用一种方法将BufferGeometry转换为Geometry,其中我将坐标及其索引添加到Geometry中,因为在涉及纹理坐标时存在一些限制。所以基本上在进行转换时会自动创建面。
我的问题是有些面孔不可见。因此,我需要依靠我的法线和他们的指数。问题是我已经创建了自己的例程,但这并没有改变结果。面孔没有出现。
在做了一些研究之后,我明白WebGLRenderer使用创建面的顶点顺序来定义方向,因为fromBufferGeometry方法处理了面部创建,因此根本没有帮助我。
有没有办法让我能够使用顶点法线值和索引来设置方向,还是有其他方法可以做到这一点?
以下是我的一些代码:
geometry = new THREE.BufferGeometry();
indices = new Uint16Array(coordIndex);
positions = new Float32Array(coord);
normals = new Float32Array(normal);
geometry.addAttribute( 'index', new THREE.BufferAttribute( indices, 1 ) );
geometry.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) );
geometry.addAttribute( 'normals', new THREE.BufferAttribute( normals, 3 ) );
offsets = {
start: 0,
index: 0,
count: indices.length
};
geometry.offsets.push(offsets);
geometry2 = new THREE.Geometry();
geometry2.fromBufferGeometry(geometry);
geometry2.uvsNeedUpdate = true;
geometry2.buffersNeedUpdate = true;
geometry2.elementsNeedUpdate = true;
答案 0 :(得分:1)
使用自定义网格导入器时,我遇到了类似的问题,结果是没有显示某些面。但设置material.side = THREE.DoubleSide
修复此问题,也许它适合您。