![](/img/trans.png)
[英]Are uniforms actually defined in THREE.js RawShaderMaterial?
[英]Three.js uniforms for shading
嗨,我正在嘗試使用threejs進行簡單的着色。 我正在使用O'reilly的Up and Running書。
一切都很好,直到我試圖這樣做:
var shader = THREE.ShaderLib["normal"];
var uniforms = THREE.UniformsUtils.clone(shader.uniforms);
uniforms["tNormal"].texture = normalMap;
uniforms["tDiffuse"].texture = surfaceMap;
uniforms["tSpecular"].texture = specularMap;
這一直在拋出這個錯誤:
TypeError:uniforms.normal未定義[在此錯誤時出現錯誤]
制服[“normal”]。texture = normalMap;
我一直在網上尋找一段時間,我不確定需要改變哪種語法來解決這個問題。
任何幫助表示贊賞。
我想應該是這樣的:
uniforms["tNormal"] = {
texture: normalMap
};
對於tDiffuse
, tSpecular
。
我發現在運行代碼時,在行之后:
var shader = THREE.ShaderLib["normal"];
var uniforms = THREE.UniformsUtils.clone(shader.uniforms);
制服是一個具有一個成員的對象:不透明度。 因此制服[“tNormal”]尚不存在。 正如Olivia建議的那樣,您可以使用以下方法添加:
uniforms["tNormal"] = {
texture: normalMap
};
您的錯誤和代碼不同。 錯誤報告未定義的紋理:
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.