在WebGL渲染器中使用法线进行面部方向

时间:2015-02-16 13:51:24

标签: three.js

我正在渲染一个对象,我有以下数据:顶点,顶点索引,法线,法线索引,纹理坐标,纹理坐标索引。 我正在使用一种方法将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;

1 个答案:

答案 0 :(得分:1)

使用自定义网格导入器时,我遇到了类似的问题,结果是没有显示某些面。但设置material.side = THREE.DoubleSide修复此问题,也许它适合您。