Estoy tratando de dibujar un objeto 3D simple generado por Google SketchUp 8 Pro en mi aplicación WebGL, el modelo es un cilindro simple.
Abrí el archivo exportado y copié las posiciones de vértices, índices, normales y coordenadas de textura en un archivo .json para poder usarlo en javascript. Todo parece funcionar bien, excepto las coordenadas de textura que tienen valores bastante grandes, como 46.331676 y también valores negativos. Ahora no sé si estoy equivocado, pero ¿no se supone que las coordenadas de textura 2D solo están en un rango de 0.0 a 1.0?
Bueno, dibujar el modelo usando estas coordenadas de textura me da un aspecto totalmente extraño, y solo puedo ver la textura correctamente cuando estoy muy cerca (no realmente yo, la cámara) del modelo, como si la textura hubiera sido una locura reducido en su tamaño y repetido infinitamente a través de las caras del modelo. (sí, estoy usando GL_REPEAT en esa envoltura de textura)
Lo que noté es que si obtengo todas estas coordenadas y las divido entre 10 o 100 obtengo un aspecto mucho "normal", pero aún no en el rango de 0.0 a 1.0.
Aquí está mi archivo json: http://pastebin.com/Aa4wvGvv
Aquí están mis sombreadores GLSL: http://pastebin.com/DR4K37T9
Y aquí está el archivo .X exportado por SketchUp: http://pastebin.com/hmYAJZWE
También intenté dibujar este modelo usando XNA, pero aún no funciona. Usando estos sombreadores HLSL: http://pastebin.com/RBgVFq08
Intenté exportar el mismo modelo a diferentes formatos, collada, fbx y x. Todos esos rinden lo mismo.
Parece que SketchUp no está normalizando sus coordenadas de textura, o usando una métrica propia. Tener texcoords <0 o> 1 y GL_REPEAT como ajuste de textura significa que la textura se reducirá para ajustarse a la geometría y se repetirá horizontal y verticalmente.
Intente importar la malla en otro paquete de modelado (MilkShape, Blender) y arregle el mapa uv desde allí.
fuente