簡體   English   中英

用於着色的Three.js制服

[英]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
};

對於tDiffusetSpecular

我發現在運行代碼時,在行之后:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM