我试图在ThreeJS片段着色器中实现法线贴图,但似乎在最近的版本中丢失了一个关键特征computeTangents
。
这是一个使用旧版本Three的工作演示:
http://coryg89.github.io/technical/2013/06/01/photorealistic-3d-moon-demo-in-webgl-and-javascript/
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
是否可以使用新版本的三个版本来运行此演示?
答案 0 :(得分:1)
我找到了答案。对于上面的演示,它需要将THREE.SphereGeometry更改为THREE.SphereBufferGeometry。
var geo = new THREE.SphereBufferGeometry(radius, xSegments, ySegments);
然后我必须添加BufferGeometryUtils.js文件并使用以下代码:
THREE.BufferGeometryUtils.computeTangents( geo );
这让演示再次运行。