Para la autoeducación, estoy escribiendo un motor de plataformas 2D en C ++ usando SDL / OpenGL. Inicialmente comencé con SDL puro usando los tutoriales en sdltutorials.com y lazyfoo.net, pero ahora estoy usando SDL para crear un contexto de representación OpenGL y luego renderizar con funciones OpenGL (específicamente modo inmediato, pero estoy aprendiendo acerca de VAO / VBO) ) Estoy usando SDL solo para interfaz, audio, etc.
SDL utiliza un sistema de coordenadas con el origen en la esquina superior izquierda de la pantalla y el eje y positivo apuntando hacia abajo. Es fácil configurar mi proyección ortográfica en OpenGL para reflejar esto.
Sé que las coordenadas de textura son un sistema de la derecha con valores de 0 a 1: voltear la textura verticalmente antes de renderizar (bueno, voltear el archivo antes de cargar) produce texturas que se procesan correctamente ... lo cual está bien si estoy dibujando toda la textura, pero en última instancia estaré usando mosaicos y puedo imaginar problemas.
¿Qué debería preocuparme en términos de renderizado cuando hago esto?
Si alguien tiene algún consejo o lo ha hecho ellos mismos y puede señalar dificultades futuras, sería genial, pero realmente cualquier comentario sería apreciado.
Respuestas:
"¿Qué debería preocuparme en términos de renderizado cuando hago esto?" - no mucho. Un sistema de coordenadas es solo una convención, no una regla estricta, y esto es algo legal y válido. Solo asegúrese de ser coherente en su propio uso y todo funcionará bien.
fuente
Cuando trabajo en 2D con OpenGL, a menudo uso la esquina superior izquierda como origen. Esto se puede hacer con:
Sin embargo, hay algunas dificultades al cambiar el origen a la esquina superior izquierda.
Un escollo con el que me he encontrado más de una vez:
glScissor()
que se usa para recortar, siempre usa coordenadas inferiores a la izquierda.Su firma es:
donde
x, y
especifique la esquina inferior izquierda del cuadro de tijera.De manera más general, todas las funciones que operan en coordenadas de ventana usan la parte inferior izquierda como origen. Esto incluye funciones como
gluProject
,gluUnProject
,glCopyPixels
, etc.Pero algunas funciones, como el
glDrawPixels
usoglRasterPos
para el posicionamiento, y elglRasterPos
uso de objetos (es decir, transformadas) coordenadas .Si está ejecutando en Linux y sabe cómo usarlo
man
, es posible que desee obtener una copia de las páginas de manual de OpenGL aquí: ftp://ftp.sgi.com/sgi/opengl/doc/ Las encuentro en tiempo real. ahorrador.Además, noto que dices "voltear el archivo antes de cargar" texturas. Esto no es necesario. En lugar de voltear la imagen al cargarla, simplemente voltee las coordenadas de textura para pasar de 1.0 a 0.0 al renderizar.
fuente