THREEJS v0.87.1:无法生成用于法线贴图的切线和副法线

时间:2017-10-13 16:59:59

标签: three.js glsl

我试图在ThreeJS片段着色器中实现法线贴图,但似乎在最近的版本中丢失了一个关键特征computeTangents

这是一个使用旧版本Three的工作演示:

http://coryg89.github.io/technical/2013/06/01/photorealistic-3d-moon-demo-in-webgl-and-javascript/

Normals Working

ThreeJS正在使用computeTangents()添加一个名为" tangents"的属性。到发送到着色器的顶点。

所以我尽可能多地研究并尝试使用仅使用着色器计算切线的方法,但这需要dFdx,这会导致Macbook Pro上着色器中出现GL_OES_standard_derivatives错误。

然后我尝试将几何体从一个简单的立方体转换为缓冲几何体,以便在BufferGeometryUtils.computeTangent()函数中使用,以便在那里生成切线,但这需要"索引几何体",这是&n #39; t存在于ThreeJS创建的基本地理中。

从原始演示中,这是我需要使用最新的ThreeJS重新创建的行:

 var mesh = new THREE.Mesh(geo, mat);
 mesh.geometry.computeTangents();

回复:

https://github.com/CoryG89/MoonDemo

是否可以使用新版本的三个版本来运行此演示?

1 个答案:

答案 0 :(得分:1)

我找到了答案。对于上面的演示,它需要将THREE.SphereGeometry更改为THREE.SphereBufferGeometry。

 var geo = new THREE.SphereBufferGeometry(radius, xSegments, ySegments);

然后我必须添加BufferGeometryUtils.js文件并使用以下代码:

THREE.BufferGeometryUtils.computeTangents( geo );

这让演示再次运行。