J'essaie de dessiner un simple objet 3D généré par Google SketchUp 8 Pro sur mon application WebGL, le modèle est un simple cylindre.
J'ai ouvert le fichier exporté et copié les positions des sommets, les indices, les normales et les coordonnées de texture dans un fichier .json afin de pouvoir l'utiliser sur javascript. Tout semble bien fonctionner, à l'exception des coordonnées de texture qui ont de très grandes valeurs, comme 46.331676 et aussi des valeurs négatives. Maintenant, je ne sais pas si je me trompe, mais les coordonnées de texture 2D ne sont-elles pas censées être comprises dans une plage de 0,0 à 1,0 uniquement?
Eh bien, dessiner le modèle en utilisant ces coordonnées de texture me donne un look totalement bizarre, et je ne peux voir la texture correctement que lorsque je suis très proche (pas vraiment moi, la came) du modèle, comme si la texture avait été incroyablement réduit en taille et répété à l'infini sur les faces du modèle. (ouais, j'utilise GL_REPEAT sur cette chose de texture wrap)
Ce que j'ai remarqué, c'est que si j'obtiens toutes ces coordonnées et que je les divise par 10 ou 100, j'obtiens un aspect beaucoup "normal", mais toujours pas dans la plage de 0,0 à 1,0.
Voici mon fichier json: http://pastebin.com/Aa4wvGvv
Voici mes shaders GLSL: http://pastebin.com/DR4K37T9
Et voici le fichier .X exporté par SketchUp: http://pastebin.com/hmYAJZWE
J'ai également essayé de dessiner ce modèle en utilisant XNA, mais ne fonctionne toujours pas. Utilisation de ces shaders HLSL: http://pastebin.com/RBgVFq08
J'ai essayé d'exporter le même modèle vers différents formats, collada, fbx et x. Tout cela donne la même chose.
Il semble que SketchUp ne normalise pas vos coordonnées de texture ou n'utilise pas sa propre métrique. Avoir texcoords <0 ou> 1 et GL_REPEAT comme habillage de texture signifie que la texture sera réduite pour s'adapter à la géométrie et répétée horizontalement et verticalement.
Essayez d'importer le maillage dans un autre package de modélisation (MilkShape, Blender) et de corriger la carte uv à partir de là.
la source