【发布时间】:2015-07-27 06:12:07
【问题描述】:
我正在使用 OBJMTLLoader 加载 obj 和 mtl 文件。对象中有多种材料。我想要的是将纹理应用于对象内的特定材质。
例如。我有一个 Bag 对象,它有 Handle、Brand name、Wheels 作为不同的材料。我想为它们中的每一个添加不同的纹理。材质文件中不会出现纹理。我只想使用代码添加它。
<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>
【问题讨论】:
-
为此,我会先加载纹理,然后再加载模型(即,将 loader.load 函数放入 loadTexture 回调中)。您还需要一个测试(您的代码将适用于所有网格)。但是对于一个独特的文件,我只需将纹理添加到 .MTL 中(只需将 'map_Ka path/textureimage.jpg' 添加到材质定义中),至少如果我不需要控制包装参数...
标签: three.js