2010-09-01 37 views
6

Tengo problemas para entender cómo funcionan. Primero, en un juego 2d, la matriz de proyección debe configurarse como orto con la izquierda, la derecha, la parte superior, la parte inferior haciendo coincidir la ventana, ¿verdad? Pero cuando la ventana cambia de tamaño, ¿debería simplemente cambiar glViewport, no la matriz de proyección? ¿Y cómo mantengo la relación de aspecto?OpenGL - matriz de proyección orto, glViewport

¿Podría alguien explicar los propósitos de estas dos cosas, en el juego ortográfico en 2d, para poder entenderlo mejor?

Parece que OpenGL está haciendo muchas cosas inútiles en una configuración 2d. Rasterizar y calcular fragmentos cuando las imágenes ya están allí, convirtiendo las coordenadas de los vértices a NDC solo para que se conviertan de nuevo a glViewport.

Además, ¿cómo es posible que en OpenGL heredado tengamos que hacer nuestras propias matrices, pero no nuestros propios cálculos que glViewport hace?

Gracias.

Respuesta

5

No confunda lo que de entrada a GL y lo que da salida a.

los parámetros que utiliza para calcular la matriz Ortho son los que se correlacionan con su entrada . El resultado de una matriz de proyección es siempre el cubo [-1: 1] x [-1: 1] x [-1: 1].

la ventana gráfica traduce ese cubo a las coordenadas del objetivo del renderizado. Por lo general, eso es lo que quiere cambiar para que coincida con el tamaño de su nueva ventana (bueno, eso y el framebuffer mismo).

Sí, GL hace muchas cosas inútiles para una ruta de representación en 2D. Es una API 3D después de todo ...

Terminaré diciendo que no es necesario construir matrices para hacer transformaciones 2D, siempre y cuando el sombreado del vértice salga en el cubo que mencioné anteriormente. Si desea escribir en la esquina superior derecha de la ventana gráfica, siempre puede pasar sus vértices directamente como (0,0) (0,1) (1,0) (1,1) y simplemente emitir eso.

+0

Gracias, creo que ahora entiendo, y estaba confundiendo la entrada con la salida. Usar una matriz de proyección simplemente lo hace mucho más fácil ya que utilizo coordenadas de vértice que coinciden con los píxeles de la ventana. Lo que hace no es realmente inútil porque rastrillar vértices con texturas significa que OpenGL puede escalarlos por usted, y puede usar posiciones de vértices precisas y rotar cosas, etc. por ejemplo, y OpenGL sigue siendo la forma más rápida de hacerlo de todos modos. ¿Estoy en lo cierto? – mk12

-2

No estoy seguro de qué idioma está usando OpenGL, pero si está buscando C++ este sitio, http://nehe.gamedev.net/ prácticamente cubre todo y tiene tutoriales desde "Hello World" hasta juegos básicos y efectos 3D .

creo que sirve

+6

Nehe enseña utilizando la interconexión de funciones fijas desaprobada, que no quiero usar (y también desde una perspectiva de Windows C++). Estoy usando Objective C en un mac por cierto. Y estaba buscando una respuesta específica. – mk12

Cuestiones relacionadas