2010-11-22 17 views
11

Il mio istruttore dice che possono essere usati in modo intercambiabile per influenzare la matrice di proiezione. Egli sostiene che lo gluLookAt() è preferibilmente utilizzato a causa della sua "semplicità relativa dovuta alla sua capacità di definire l'angolo di visione". È vero? Ho visto esempi di codice usando sia gluLookAt() e glFrustum() e mi chiedo perché il programma li mixerebbe.C'è una differenza tra gluLookAt() e glFrustum()?

Come nell'esempio cube.c del Redbook appare:

void display(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 
    glColor3f(1.0, 1.0, 1.0); 
    glLoadIdentity(); 

    gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); 
    **//why isn't this a call to glFrustum?** 
    glScalef(1.0, 2.0, 1.0); 
    glutWireCube(1.0); 
    glFlush(); 
} 

void reshape(int w, int h) 
{ 

    glViewport(0, 0, (GLsizei) w, (GLsizei) h); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0); 
    //why isn't this a call a call to gluLookAt()? 
    glMatrixMode(GL_MODELVIEW); 
} 
+1

ronzio. gluLookAt e glFrustum impostano matrici molto diverse (generalmente gluLookAt__not_ viene applicato alla matrice di proiezione). Sei sicuro che il tuo istruttore non stesse parlando di gluPerspective invece di gluLookAt? – Bahbar

+0

La differenza principale è che glFrustum fa parte della libreria di base di OpenGL e gluLookAt fa parte di una libreria di helper che accetta un diverso set di parametri e quindi chiama glFrustum. Non fa differenza con OpenGL quale si usa; la scelta è una delle preferenze di codifica. – AndrewS

risposta

12

Sia glFrustum e gluLookAt eseguire semplice moltiplicazione matrice. Controllare le pagine man di equazioni per quelle matrici:

gluLookAt

glFrustum

Sia di coloro che possono essere sostituiti da una chiamata glMultMatrix*.

La differenza più importante è che glFrustum viene utilizzata la maggior parte del tempo per stabilire una matrice di proiezione prospettica (utilizzato internamente da gluPerspective), e gluLookAt è un metodo comodo per specificare modello vista matrici (normalmente: esecuzione di una telecamera).

2

gluLookAt agisce sulla matrice ModelView mentre, glFrustum/gluPerspective influisce sulla matrice di Projection. Queste sono interamente due matrici diverse nella pipeline. gluLookAt è un metodo di utilità che è una combinazione di chiamate glRotate e glTranslate per spostare la "telecamera" nel punto appropriato nello spazio e puntarla nella posizione desiderata. Mentre glFrustum/gluPerspective sono metodi che definiscono un volume di visualizzazione prospettico. Scopri maggiori dettagli nel OpenGL Red Book.

+0

Hurm? Queste funzioni influenzano la matrice che è stata impostata da glMatrixMode. – AndrewS

Problemi correlati