0

(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/

これを修正するにはどうすればよいですか?

4

2 に答える 2

1

古い形式を使用しています。そのはず

ユニフォーム["tDiffuse"].value= THREE.ImageUtils.loadTexture( "color.png");

three.js Wikiの移行投稿を参照してください:https ://github.com/mrdoob/three.js/wiki/Migration

テクスチャの均一な変更:テクスチャユニットが自動的に割り当てられるようになり、テクスチャオブジェクトはテクスチャ1ではなくvalueプロパティに移動します{type: "t"、value:0、texture:map} => {type: "t"、value:map}

于 2012-11-14T14:43:02.263 に答える
-1

次の場所に移動する必要があります:オブジェクトの編集、選択(aを押す)してから、[メッシュ]->[法線]->[ベクトルのリセット]に移動します。

于 2022-01-12T12:07:24.013 に答える