3

ドキュメントと多くの例を調べましたが、マテリアルを Collada .dae または OBJLoader .obj ファイルに割り当てるための正しい構文を見つけることができませんでした。

Json ファイルは、 を作成しMesh、ローダーをジオメトリとして、マテリアルをセット マテリアルとして持つと、適切に機能するようです。

このようなコードは機能します

var loader = new THREE.JSONLoader();
loader.load( "modelPath.js", function(geometry){
  var material = new THREE.MeshLambertMaterial({color: 0x666666});
  mesh = new THREE.Mesh(geometry, material);
  scene.add(mesh);
});

これは動作しません

var loader = new THREE.ColladaLoader();
loader.load( "modelPath.dae", function(geometry){
  var material = new THREE.MeshLambertMaterial({color: 0x666666});
  mesh = new THREE.Mesh(geometry, material);
  scene.add(mesh);
});

そして、これは機能しません

var loader = new THREE.OBJLoader();
loader.load( "modelPath.obj", function(geometry){
  var material = new THREE.MeshLambertMaterial({color: 0x666666});
  mesh = new THREE.Mesh(geometry, material);
  scene.add(mesh);
});

私もgeometry.material = new THREE.MeshLambertMaterial({ color: 0xff0000});内部で試しましたがfunction(geometry)成功しませんでした。

.Dae 形式は、Cinema などの 3D プログラムから直接素材の色を保持しているようです。これらのローダーにマテリアルを適切に設定するにはどうすればよいですか? これさえあれば。

4

1 に答える 1

4

については、次のパターンに従いますOBJLoader

var loader = new THREE.OBJLoader();

loader.load( 'model.obj', function ( object ) {

    var material = new THREE.MeshLambertMaterial( { color: 0x666666 } );

    object.traverse( function ( child ) {

        if ( child instanceof THREE.Mesh ) {

            child.material = material;

        }

    } );

    scene.add( object );

} );

の場合ColladaLoaderも同様です。

var loader = new THREE.ColladaLoader();

loader.load( 'model.dae', function ( collada ) {

    var dae = collada.scene;
    scene.add( dae );

} );

three.js r.62

于 2013-10-24T02:19:58.930 に答える