如何将材质指定给ColladaLoader或OBJLoader

时间:2013-10-24 01:35:52

标签: javascript 3d three.js

我查看了文档以及许多示例,但无法找到将材料分配给Collada .dae或OBJLoader .obj文件的正确语法。

在创建Mesh并将加载器作为几何和材质作为集合材质时,Json文件似乎正常工作。

这样的代码

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节目的素材颜色。如何正确设置这些装载机的材料?如果这是可能的话。

1 个答案:

答案 0 :(得分: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