2012-03-05 21 views
13

Tengo la escena con un simple triángulo. Y estoy usando proyección de perspectiva. He puesto mi matriz MVP arriba (con la ayuda de GLM) de esta manera:Cambiando de perspectiva a matriz ortográfica

glm::mat4 Projection = glm::perspective(45.0f, 4.0f/3.0f, 0.1f, 100.0f); 
glm::mat4 View  = glm::lookAt(
    glm::vec3(0,0,5), // Camera is at (0,0,5), in World Space 
    glm::vec3(0,0,0), // and looks at the origin 
    glm::vec3(0,1,0) // Head is up (set to 0,-1,0 to look upside-down) 
); 
glm::mat4 Model  = glm::mat4(1.0f); 
glm::mat4 MVP  = Projection * View * Model; 

Y todo funciona bien, puedo cambiar los valores de la cámara y el triángulo se sigue mostrando correctamente.

Pero quiero usar la proyección ortográfica. Y cuando cambio la matriz de proyección a ortográfica, funciona de manera impredecible, no puedo mostrar el triángulo, o simplemente veo una pequeña parte de ella en la esquina de la pantalla. Para usar la proyección ortográfica, hago esto:

glm::mat4 Projection = glm::ortho(0.0f, 800.0f, 600.0f, 0.0f,-5.0f, 5.0f); 

mientras no cambio nada en las matrices de Vista y Modelo. Y simplemente no funciona correctamente.

Solo necesito un empujón en la dirección correcta, ¿estoy haciendo algo mal? ¿Qué me estoy perdiendo? ¿Qué debo hacer para configurar correctamente la proyección ortográfica?

PD No sé si se necesita, pero estas son las coordenadas del triángulo:

static const GLfloat g_triangle[] = { 
    -1.0f, 0.0f, 0.0f, 
    1.0f, 0.0f, 0.0f, 
    0.0f, 2.0f, 0.0f, 
}; 

Respuesta

14

Su triángulo es de aproximadamente 1 unidad grande. Si usa una matriz de proyección ortográfica de 800/600 unidades de ancho, es natural que el triángulo parezca muy pequeño. Simplemente disminuya los límites de la matriz ortográfica y asegúrese de que el triángulo esté dentro de esta área (por ejemplo, el primer vértice está fuera de la vista, porque su coordenada x es menor que 0).

Además, asegúrese de que su triángulo no se borre mediante eliminación de fondos ocultos o recorte z. Por cierto, los valores negativos para zNear son un poco inusuales, pero deberían funcionar para proyecciones ortográficas.

+0

@Nico_Schertler Gracias, soy realmente estúpido: \ ¡Eso funcionó! si pudiera preguntarte una cosa más: intenté eliminar por completo el modelo y ver matrices y todo sigue apareciendo correctamente. ¿Necesito solo la matriz de proyección cuando estoy usando orthographic? Lo siento si la pregunta es un poco confusa, acabo de comenzar con OpenGL hace unos días. ¡Muchas gracias! – IanDess

+1

El sistema de coordenadas no transformadas predeterminado se encuentra arriba a la izquierda (-1,1), abajo a la derecha (1, -1). La coordenada z depende de si usa un sistema de coordenadas RH o LH. Si esta medida se adapta a sus necesidades, puede dejar la matriz de proyección en la identidad y usar solo la matriz de vista para navegar por la escena. De lo contrario, puede usar la matriz de proyección para escalar la escena, etc. –