2012-03-05 15 views
13

Ho la scena con un semplice triangolo. E sto usando la proiezione prospettica. Ho la mia matrice MVP istituito (con l'aiuto di GLM) come questo:Modifica dalla prospettiva alla matrice ortografica

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; 

E tutto funziona bene, posso cambiare i valori della fotocamera e il triangolo è ancora visualizzato correttamente.

Ma io voglio usare la proiezione ortografica. E quando cambio la matrice di proiezione in ortografica, funziona in modo imprevedibile, non riesco a visualizzare il triangolo o ne vedo solo una piccola parte nell'angolo dello schermo. Per usare la proiezione ortogonale, faccio questo:

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

mentre io non cambio nulla in vista e il modello matrici. E semplicemente non funziona correttamente.

Ho solo bisogno di una spinta nella giusta direzione, sto facendo qualcosa di sbagliato? Cosa mi manca, cosa devo fare per impostare correttamente la proiezione ortografica?

PS non so se è necessario, ma queste sono le coordinate del triangolo:

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

risposta

14

tuo triangolo è di circa 1 unità di grandi dimensioni. Se si utilizza una matrice di proiezione ortografica larga 800/600, è naturale che il triangolo appaia molto piccolo. Basta diminuire i limiti della matrice ortografica e accertarsi che il triangolo sia all'interno di questa area (ad esempio il primo vertice è esterno alla vista, poiché la sua coordinata x è inferiore a 0).

Inoltre, accertarsi che il triangolo non venga cancellato da cogliere indietro o z-ritaglio. Btw .. valori negativi per zNear sono un po 'inusuali ma dovrebbero funzionare per le proiezioni ortografiche.

+0

@Nico_Schertler Grazie, sono davvero stupido: \ Ha funzionato! se potessi chiederti solo una cosa in più - ho provato a rimuovere completamente il modello e visualizzare le matrici e tutto è ancora visualizzato correttamente! Ho bisogno solo della matrice di proiezione quando sto usando l'ortografia? Scusate se la domanda è un po 'confusa, ho appena iniziato con OpenGL qualche giorno fa. Molte grazie! – IanDess

+1

Il sistema di coordinate predefinito non trasformato è in alto a sinistra (-1,1), in basso a destra (1, -1). La coordinata z dipende dall'utilizzo di un sistema di coordinate RH o LH. Se questa misura si adatta alle tue esigenze, puoi lasciare la matrice di proiezione all'identità e utilizzare solo la matrice di visualizzazione per navigare nella scena. Altrimenti puoi usare la matrice di proiezione per ridimensionare la scena, ecc. –

Problemi correlati