Three.js 三个js,仅将纹理加载到特定mtl

Three.js 三个js,仅将纹理加载到特定mtl,three.js,Three.js,我正在使用OBJMTLLoader加载obj&mtl文件。对象中有多个材质。我想要的是将纹理应用于对象中的特定材质 我有一个袋子,上面有把手、商标、轮子等不同的材料。我想给它们添加不同的纹理。纹理将不在材质文件中。我只想用代码添加它 <pre> var loader = new THREE.OBJMTLLoader(); loader.load( 'obj/Test.obj', 'obj/Test.mtl', function ( object ) { va

我正在使用OBJMTLLoader加载obj&mtl文件。对象中有多个材质。我想要的是将纹理应用于对象中的特定材质

我有一个袋子,上面有把手、商标、轮子等不同的材料。我想给它们添加不同的纹理。纹理将不在材质文件中。我只想用代码添加它

<pre>
    var loader = new THREE.OBJMTLLoader();
    loader.load( 'obj/Test.obj', 'obj/Test.mtl', function ( object ) {

    var tex = new THREE.MeshLambertMaterial({map:THREE.ImageUtils.loadTexture(     'obj/texture.png')});

    object.traverse( function(child) {
    if (child instanceof THREE.Mesh) {
    // apply custom material
    child.material = tex;

    // enable casting shadows
    child.castShadow = true;
    child.receiveShadow = true;
    }
    });
</pre>

var loader=new THREE.OBJMTLLoader();
loader.load('obj/Test.obj','obj/Test.mtl',函数(对象){
var-tex=new THREE.MeshLambertMaterial({map:THREE.ImageUtils.loadTexture('obj/texture.png'))});
遍历(函数(子对象){
if(三个.Mesh的子实例){
//应用自定义材质
child.material=tex;
//启用投射阴影
child.castShadow=true;
child.receiveShadow=true;
}
});

您可以通过检查已写入mtl文件的材质名称,然后指定纹理来完成此操作

您的.mtl文件如下所示:

var wheelsTexture = THREE.ImageUtils.loadTexture('obj/wheelTexture.png');

object.traverse( function(child) {
    if (child instanceof THREE.Mesh) {
        if ( child.material.name === "wheels" ) {

            child.material.map = wheelsTexture;

        } else if ( child.material.name === "handle" ) {
            // ...
        }
    }
} );
在代码中:


为此,我将首先加载纹理,然后加载模型(即将loader.load函数放入loadTexture回调中)。此外,您还需要一个测试(您的代码将应用于所有网格)。但对于唯一的文件,我只需将纹理添加到.MTL中(只需将“map_Ka path/textureimage.jpg”添加到材质定义中),至少如果我不需要控制包装参数。。。
var wheelsTexture = THREE.ImageUtils.loadTexture('obj/wheelTexture.png');

object.traverse( function(child) {
    if (child instanceof THREE.Mesh) {
        if ( child.material.name === "wheels" ) {

            child.material.map = wheelsTexture;

        } else if ( child.material.name === "handle" ) {
            // ...
        }
    }
} );