(Blenderからエクスポートされた)colladaファイルをthree.jsシーンにロードしてから、マテリアルをShaderMaterialに置き換えようとしました。
このcolladaファイルにはオブジェクトが1つしかないため、collada.scene.children [0]にあるため、マテリアルプロパティを新しく作成したものに変更しようとしました。マテリアルをワイヤーフレームまたはテクスチャ付きのStandardPhongMaterialに簡単に置き換えることができますが、ShaderMaterialを追加するとすぐに、モデルは照明やテクスチャリングなしで黒でのみ表示されます。
材料の設定は次のとおりです。
materials[0] = new THREE.MeshBasicMaterial( { color: 0xff0000, wireframe: true } );
var shader = THREE.ShaderUtils.lib[ "normal" ];
var uniforms = THREE.UniformsUtils.clone( shader.uniforms );
uniforms[ "tDiffuse" ].texture = THREE.ImageUtils.loadTexture( "color.png" );
uniforms[ "tNormal" ].texture = THREE.ImageUtils.loadTexture( "normal.png" );
uniforms[ "tSpecular" ].texture = THREE.ImageUtils.loadTexture( "spec.png" );
uniforms[ "enableDiffuse" ].value = true;
uniforms[ "enableSpecular" ].value = true;
materials[1] = new THREE.ShaderMaterial( {
uniforms: uniforms,
vertexShader: shader.vertexShader,
fragmentShader: shader.fragmentShader,
lights: true
});
var basicTexture = THREE.ImageUtils.loadTexture( "color.png ")
materials[2] = new THREE.MeshPhongMaterial( { map: basicTexture });
モデルのロード時に、ShaderMaterialをモデルに追加してからシーンに追加して、必要なすべての属性を使用できるようにします。
loader.load('model.dae', function(collada) {
model = collada.scene;
model.scale.x = model.scale.y = model.scale.z = 50;
model.rotation.y = 180;
model.updateMatrix();
model.children[0].material = materials[1];
model.children[0].geometry.computeTangents();
scene.add(model);
});
完全なソースコードはここから入手できます:http://rainbowrangers.de/normalmap/
これを修正するにはどうすればよいですか?