我导出了一些.obj
个文件和相应的.mtl
个文件。纹理在.tga
格式的同一文件夹中。
以下是我用来加载.obj
的所有代码:
function addCar(modelPath, modelName) {
var mtlLoader = new THREE.MTLLoader();
mtlLoader.setPath(modelPath);
for (var i = 0; i <= 2; i++) {
loadObject(mtlLoader, modelPath, modelName, i);
}
}
function loadObject(loader, path, name, i) {
var objectName = name + i + '.obj';
loader.load(name + i + '.mtl', function (materials) {
materials.preload();
var objLoader = new THREE.OBJLoader();
objLoader.setMaterials(materials);
objLoader.setPath(path);
objLoader.load(objectName, function (object) {
scene.add(object);
}, function (xhr) {
onProgress(xhr, objectName)
}, onError);
});
}
汽车已加载,但不是纹理。它看起来都是白色的,控制台中没有错误。我试着添加
mtlLoader.setTexturePath(modelPath);
但它没有改变任何东西。
我也尝试添加
THREE.Loader.Handlers.add( /\.tga$/i, new THREE.TGALoader() );
之前调用addCar
函数。当我这样做时,控制台中会出现一些警告,但纹理仍然没有出现。
在我看到的所有示例中,使用OBJLoader和MTLLoader时会自动加载纹理,但我没有使用带有TGA纹理的OBJLoader和MTLLoader的任何示例。所以我想知道是否有办法让它运作起来。
任何帮助都将不胜感激。
PS:文件(.obj
,.mtl
和.tga
)从3D max导出。
答案 0 :(得分:0)
您必须使用TGALoader加载.tga文件。你可以找到它here。
有关示例,请参阅webgl_materials_texture_tga来源。
你有没有理由使用.tga纹理代替.png?在大多数情况下,它们会给出相同的结果,而.png通常会更小,并且可以通过浏览器进行本机解码,以便您获得更好的性能。
答案 1 :(得分:-1)
如果文件数量不是很大:更改mtl文件的内容,制作&#39; tga&#39;到了&#39; jpg&#39;,然后我使用photoshop将每个tga文件转换为jpg文件。