首页 > 解决方案 > 在three.js中将材料分配给加载的.obj而不带.mtl

问题描述

如何将像 THREE.MeshPhongMaterial() 这样的材料添加到加载的 .obj 文件中的一个对象(.obj 有多个对象)

        var material_10 = new THREE.MeshBasicMaterial( { color: 0x444444 } );
        var loader = new THREE.OBMLoader();
        loader.load("https://aroncad.com/wp-content/themes/AronCad/3d/satllite/100.obm", function( obj ){
            obj.traverse( function( child ) {

                ...........

            } );
            scene.add( obj );
        });

标签: javascriptthree.js

解决方案


解决您的问题的一种方法是使用Object3D.traverse () 就像您在代码中所做的那样。在官方OBJ 示例中也使用了这种方法,以便将纹理应用于所有材质。适合您的用例的代码如下所示:

object.traverse( function ( child ) {

    if ( child.isMesh ) child.material = material_10;

} );

three.js R109


推荐阅读