2010-01-20 10 views
13

Tengo un objeto definido en coordenadas mundiales, por ejemplo, un círculo centrado en (2,3) con radio 4. Si quiero que el círculo no se distorsione, sea completamente visible en la ventana gráfica y sea tan grande como sea posible dentro de la ventana, ¿cómo puedo formular un comando gluOrtho2D para crear una ventana mundo basado en las especificaciones antes mencionadas teniendo en cuenta que:gluOrtho2D y glViewport

glViewport(20, 30, 1000, 500)? 

me estoy confundido con toda la ventana gráfica vs mundo frente a la pantalla, etc coordenadas. ¿Alguien me puede guiar? Realmente quiero entender esto.

Respuesta

27

En su ejemplo, la vista es de 1000 píxeles de ancho por 500 de alto. Por lo tanto, debe especificar coordenadas glOrtho que tengan la misma relación de aspecto (2: 1).

Su círculo tiene 4 unidades de radio, por lo que necesita una vista que sea de 8 unidades de alto por 8 de ancho. Teniendo en cuenta la relación de aspecto 2: 1, hagamos 16 unidades de ancho por 8 unidades de alto.

El centro está en (2, 3). Así centrado estos 16 x 8 alrededor que usted debe conseguir:

glOrtho2D (2 - 8, 2 + 8, 3 - 4, 3 + 4); 

Eso es:

glOrtho2D (-6, 10, -1, 7); 

Esto mapea con eficacia la coordenada X del -6 hasta el borde izquierdo de la ventana. El mapeo glViewport luego lo mapea a la ubicación real en la pantalla. A medida que cambia el tamaño de la pantalla, debe ajustar las coordenadas glOrtho2D para compensar la relación de aspecto, pero siempre que la ventana gráfica sea 2: 1, estas llamadas glOrtho2D no tendrán que cambiar.

+0

Gracias! Pero, ¿cómo entran en juego los 20,30 del comando de la ventana gráfica? ¿Eso afecta lo que será el glOrtho2D? ¿Si no, porque no? – Alex

+4

@Alex: realmente no afecta lo que va a ser el glOrtho2D. Estamos diciendo: asigna la coordenada X de -6 en las coordenadas de mi modelo al borde izquierdo de la ventana gráfica (que ya se ha mapeado al píxel 20 en la ventana). – Tarydon

+1

Solo una nota: esto no es glOrtho2D, esto es ** 'gluOrtho2D()' ** (ver ** glu **): http://www.opengl.org/sdk/docs/man2/xhtml/gluOrtho2D. xml, o ** 'glOrtho()' **: http://www.opengl.org/sdk/docs/man2/xhtml/glOrtho.xml – Sk8erPeter

Cuestiones relacionadas