2016-08-08 3 views
0

J'ai exporté des fichiers .obj et les fichiers .mtl correspondants. Les textures sont au format .tga dans le même dossier.three.js: MTLLoader ne charge pas les textures tga

Voici le code que j'utilise pour charger tous mes .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); 
    }); 
} 

La voiture est chargée, mais pas les textures. Il semble tout blanc, et il n'y a pas d'erreur dans la console. J'ai essayé d'ajouter

mtlLoader.setTexturePath(modelPath); 

mais cela n'a rien changé.

J'ai essayé aussi d'ajouter

THREE.Loader.Handlers.add(/\.tga$/i, new THREE.TGALoader()); 

avant d'appeler addCar fonction. Lorsque je fais cela, un avertissement apparaît dans la console, mais la texture n'apparaît toujours pas. Dans tous les exemples que j'ai vus, les textures sont chargées automatiquement quand j'utilise OBJLoader et MTLLoader, mais je n'ai pas utilisé d'exemple avec OBJLoader et MTLLoader avec des textures TGA. Je me demande donc s'il y a quelque chose à faire pour que cela fonctionne.

Toute aide serait appréciée. PS: les fichiers (.obj, .mtl et .tga) sont exportés de 3D max).

+0

La duplication possible de [modèles d'importation WebGL utilisant le OBJMTLoader dans three.js échoue] (http://stackoverflow.com/questions/19401151/webgl-importing-models-using-the-objmtloader-in-three-js- échoue) –

+0

MTLLoader utilise la classe TextureLoader pour charger les images, ce qui ne supporte pas les images TGA (ce qui explique aussi pourquoi il existe une classe spécifique pour charger les images TGA) – 2pha

Répondre

-1

Si le nombre de fichiers n'est pas très grand: changez le contenu du fichier mtl, faites 'tga' en 'jpg', puis j'utilise photoshop pour faire chaque fichier tga en fichier jpg.

0

Vous devrez utiliser TGALoader pour charger les fichiers .tga. Vous pouvez le trouver here. Voir la source webgl_materials_texture_tga pour un exemple.

Y a-t-il une raison pour laquelle vous utilisez une texture .tga au lieu de .png? Dans la plupart des cas, ils donneront des résultats identiques, et .png sera généralement plus petit et peut être décodé nativement par le navigateur afin que vous obteniez de meilleures performances.