Three.js 三个js,仅将纹理加载到特定mtl
我正在使用OBJMTLLoader加载obj&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
<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" ) {
// ...
}
}
} );