Pregunta

Estoy codificando mi propio analizador .obj en OBJC para OpenGL es 2.0 para comprender mejor cómo funciona esta cosa de OpenGles. Cargar los vértices y mostrar un modelo con colores de vértice funciona como un encanto. Solo una pequeña nota: estoy usando un búfer de índice.

El verdadero problema es la asignación del cajero automático de texturas. Como verá un poco más abajo, mi textura no está mapeada como debería ser.

Así es como creo que el formato .Obj funciona, corríjeme si me equivoco: las líneas "F" describen una cara donde el número antes de un corte define el índice del vértice y el número después de la barra define una coordenada de textura .

Considere el siguiente archivo .obj (exportado por Cinema 4D):

v -75 75 -50
v 75 75 -50
v -75 -75 -50
v 75 -75 -50

vt 0 0
vt 0 1
vt 1 1
vt 1 0

f 4/3 3/2 1/1
f 2/4 4/3 1/1

Y la siguiente textura:

512x512 Texture

Ahora, cuando coloco los vértices en el espacio 3D OpenGL ES e intento mapear las coordenadas de textura a cada vértice individual, el mapeo sale mal. Podría arreglar esto moviéndose alrededor de algunos de los valores de coordenadas de textura, pero me doy cuenta de que esta no es la forma de hacerlo. También intenté editar algunas de mis configuraciones del exportador .OBJ para colocar las exisas y/o el mapeo UV, pero no de ellas dan como resultado un mapeo correcto. ¿Hay algo que me falta en mi teoría sobre el formato de archivo .obj? Una cosa que podría decir ya: leí ayer que el sistema de coordenadas del formato .obj define Topleft como el punto de anclaje de una textura. Así que lo arreglé ya en mi análisis.

Aquí hay un pequeño resumen con la situación actual: Actualización: El sistema de coordenadas de la textura es el sistema de coordenadas de textura .obj real y no el sistema de coordenadas de OpenGL. Traducto las coordenadas en mi algoritmo de análisis para contrarrestar esto.

Summary

¿Fue útil?

Solución 2

Voy a responder a mi propia pregunta: el problema parecía que estaba usando un búfer de índice para acelerar el rendimiento, pero mis coordenadas de textura todavía estaban asignadas a los vértices originales.

Otros consejos

Hasta donde yo sé, el sistema de coordenadas que está informando no es el correcto.

En realidad es algo como esto:

Coordinate System

Sé que esta no es probablemente la respuesta real a su pregunta, pero espero que arroje algo de luz sobre ella.

Encontré el problema similar analizando los archivos .obj. En mi caso, parece que mis archivos .OBJ usan el eje invertido V (segunda coordenada de textura). Resolví el problema con esta línea de código. V = 1.0f - V;

Maurizio es correcto en su representación de las coordenadas OpenGL Texturapping.

Al mirar sus fotos, diría que debe ver mejor su código OBJC. Suponiendo que el .obj sea exportado correctamente por C4D, parece que tiene sus índices de textura mezclados.

Prueba plausible: Cambie el vértice inferior izquierdo con el vértice inferior derecho en la imagen que publicó ("Resultado OpenGL") y su textura saldría a la derecha.

Editar: en realidad, la falla puede estar en su código de carga de textura, pero eso no explica el resultado que está obteniendo. Incluso si la falla estuviera en la carga de textura, la textura simplemente aparecería al revés (debido al sistema de coordenadas OpenGL de fondo izquierdo). Sugerencia: cambiar VT0 y VT3 en su código ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top