2016-08-26 19 views
0

レンダリングのためにOBJ/MTLモデルをロードするカスタムthree.jsアプリケーションを作成しています。ロードされたモデルにカスタムシェイダーを適用したいのですが、手動でRawShaderMaterialに渡すカラー&鏡面ユニフォームは更新されていません。むしろ、それらはすべて同じ値で埋められます。したがって、私のモデルを同じ色でレンダリングします。three.js .mtl属性がカスタムシェーダに設定されていません

彼はいくつかのコード例です。簡単な解決方法またはより良いアプローチがある場合、私は非常に興味を持っています。

var mtlLoader = new THREE.MTLLoader(); 
mtlLoader.setPath(path); 
mtlLoader.load(mtlName, function(materials) { 
var objLoader = new THREE.OBJLoader(); 
materials.preload(); 


objLoader.setMaterials(materials); 


objLoader.setPath(path); 
objLoader.load(objName, function(object) { 
    if (shader) { 
     object.traverse(function (child) { 
      if (child instanceof THREE.Mesh) { 
       var customShader = shader; 
       var color = child.material["color"]; 
       customShader.uniforms["color"] = {type: 'v3', value: color}; 
       customShader.uniforms["specular"] = {type: 'v3', value: child.material["specular"]}; 

       child.material = customShader; 
      } 
     }); 
    } 
} 

頂点シェーダ: 精度mediumpフロート。 precision mediump int;

uniform mat4 modelViewMatrix; 
    uniform mat4 projectionMatrix; 

    attribute vec3 position; 
    attribute vec3 normal; 
    attribute vec2 uv; 

    varying vec3 Normal; 
    varying vec2 UV; 

    void main() { 
     Normal = normal; 
     UV = uv; 
     gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); 
    } 

フラグメントシェーダ: precision mediump float; precision mediump int;

uniform vec3 color; 
    uniform vec3 specular; 

    varying vec3 Normal; 
    varying vec2 UV; 

    void main() { 
     gl_FragColor = vec4(color, 1.0); 
    } 

答えて

0

私の問題が見つかりました。

ShaderMaterialを正しくコピーしていなかったからです。

object.traverse(function (child) { 
     if (child instanceof THREE.Mesh) { 
      var customShader = shader.clone(); 
      var color = child.material["color"]; 
      customShader.uniforms["color"] = {type: 'v3', value: color}; 
      customShader.uniforms["specular"] = {type: 'v3', value: child.material["specular"]}; 

      child.material = customShader; 
     } 
    }); 
関連する問題