2013-05-03 60 views
3

嗨,我正在嘗試做什麼似乎像threejs簡單的陰影。我正在使用O'reilly的Up and Running圖書。Three.js制服底紋

一切工作正常,直到我試圖做到這一點:

   var shader = THREE.ShaderLib["normal"]; 
      var uniforms = THREE.UniformsUtils.clone(shader.uniforms); 

      uniforms["tNormal"].texture = normalMap; 
      uniforms["tDiffuse"].texture = surfaceMap; 
      uniforms["tSpecular"].texture = specularMap; 

這不斷拋出此錯誤:

類型錯誤:uniforms.normal未定義 [打破這個錯誤]

制服[「normal」]。texture = normalMap;

我一直在網上尋找一段時間,並不確定需要更改哪些語法來解決此問題。

任何幫助表示讚賞。

+0

'shader.uniforms'沒有 「tNormal」 屬性。你想用這個着色器做什麼? – Ovilia 2013-05-03 04:04:33

+0

我正在跟着這本書。我也爲其他線條漫反射和鏡面反射,這也導致類似的錯誤。 – dotfury 2013-05-03 04:07:33

回答

5

我覺得應該是這樣:

uniforms["tNormal"] = { 
    texture: normalMap 
}; 

同爲tDiffusetSpecular

+0

謝謝,這似乎解決了這些錯誤。 – dotfury 2013-05-03 04:42:09

2

我發現,運行的時候你的代碼,行後:

var shader = THREE.ShaderLib["normal"]; 
var uniforms = THREE.UniformsUtils.clone(shader.uniforms); 

制服是一個成員的對象:不透明度。因此制服[「tNormal」]尚不存在。正如Olivia建議的那樣,您可以使用以下內容:

uniforms["tNormal"] = { 
    texture: normalMap 
}; 
2

您的錯誤與您的代碼不同。未定義紋理的錯誤報告:

uniforms["normal"].texture = normalMap;

你所引用的代碼,表示您正在使用:

uniforms["tNormal"].texture = normalMap;

我工作的同一本書的例子,試試這個:

var shader = THREE.ShaderLib[ "normalmap" ]; 
var uniforms = THREE.UniformsUtils.clone(shader.uniforms); 

uniforms[ "tNormal" ].texture = normalMap; 
uniforms[ "tDiffuse" ].texture = surfaceMap; 
uniforms[ "tSpecular" ].texture = specularMap; 

uniforms[ "enableDiffuse" ].value = true; 
uniforms[ "enableSpecular" ].value = true;