5. Proyecciones ortogonales |
![]() |
![]() |
Videojuegos - Curso de Programación de juegos | ||||||||||||||||||||||||||||||||||||||||||||
Escrito por Vicengetorix | ||||||||||||||||||||||||||||||||||||||||||||
![]() Empezaremos con la proyeccion ortografica u ortogonal. ¿Que es una proyeccion ortografica? ummm... ¿como explicarlo? ¿y para que? Si en internet ya esta casi todo. En estos enlaces aclaran las cosas: Ortografica , ortogonal. Como se ve en la wikipedia, lo importante del concepto es que las lineas que se proyectan sobre el plano en que estamos dibujando (papel o la ventana de nuestro programa) son perpendiculares a este mismo plano y por tanto paralelas entre si. ![]() Esta proyeccion nos serviria, por ejemplo, para un juego en isometrica (un caso de proyeccion ortogonal) o para graficos en 2D en los que las cordenadas X e Y de los vertices coincidirian con los pixels de nuestra ventana Windows y la coordenada Z seria siempre la misma (en el caso de nuestro codigo ejemplo, 0 ). Ahora modificamos nuestro programa. El meollo del asunto sera en la funcion IniciaGL(). Usaremos algo de programacion Windows para ajustar bien el tamaño del viewport al de nuestra ventana:
Ahora definimos la proyeccion ortogonal:
Una pequeña explicacion de la funcion glOrtho(...): Sus 4 primeros parametros delimitan el cuadrado donde se proyecta la escena. Los 2 ultimos parameros delimitan el rango del eje Z, profundidad, dentro del que se pintaran las cosas. (en nuestro caso lo que se encuentre entre -1 y 1 sera visible, fuera de este rango no). Graficamente: ![]() Y ahora la funcion glOrtho(...) correspondiente: glOrtho(xwmin, xwmax, ywmin, ywmax, pcerca, plejos); Despues viene una parte de codigo para poder ver el tañano que tiene finalmente nuestro viewport y nuestra proyeccion (ya que los valores dependen del area cliente de la ventana):
Finalmente nos vamos a la funcion Pinta() y modificamos todas las coordenadas para ajustarlas a la nueva proyeccion. Pongo de ejemplo solo el triangulo principal:
Notaras que la esquina derecha del triangulo se sale de la ventana. Esto es porque el lado inferior es de 600 pixels de longitud, lo mismo que la ventana, y el area cliente de la venana es un poco mas pequeña al ser la ventana menos el borde. El programa se veria asi: ![]() Y el codigo completo seria: usw5.cpp ¡Sólo los usuarios registrados pueden escribir comentarios!
3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved." |