2017-10-13 42 views
1

我試圖在ThreeJS片段着色器中實現普通地圖,但似乎在最近丟失了一個關鍵功能computeTangents版本。THREEJS v0.87.1:不能再生成正常映射中使用的切線和binormals

下面是使用舊版本三的工作演示:

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

Normals Working

ThreeJS使用computeTangents()名爲「切線」的屬性添加到發送到頂點着色器。

所以我研究了,就像我能和使用着色器只計算切線的方法試過了,但是這需要dFdx導致約GL_OES_standard_derivatives錯誤在我的MacBook Pro着色器。

然後我試着將幾何體從一個簡單的多維數據集轉換成緩衝區幾何體,以便在BufferGeometryUtils.computeTangent()函數中使用,以便在那裏生成切線,但這需要「索引幾何體」,它不存在於由ThreeJS。

從原來的演示,這是我需要使用最新ThreeJS重新創建行:

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

回購在這裏:

https://github.com/CoryG89/MoonDemo

是否有可能得到這個演示使用工作三版的新版本?

回答

1

我找到了答案。對於上面的演示,它需要將THREE.SphereGeometry更改爲THREE.SphereBufferGeometry。

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

然後我不得不添加的BufferGeometryUtils.js文件,並使用下面的代碼:

THREE.BufferGeometryUtils.computeTangents(geo); 

這讓演示再次合作。

相關問題