2010-11-22 31 views
11

Mi instructor dice que se pueden usar indistintamente para afectar la matriz de proyección. Sostiene que se usa preferiblemente gluLookAt() debido a su "simplicidad relativa debido a su capacidad para definir el ángulo de visión". ¿Es esto cierto? He visto ejemplos de código usando gluLookAt() y glFrustum() y me pregunto por qué los mezclaría el programador.¿Hay alguna diferencia entre gluLookAt() y glFrustum()?

como en el ejemplo cube.c de la redbook aparece:

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

hum. gluLookAt y glFrustum configuran matrices muy diferentes (gluLookAt does _not_ normalmente no se aplica a la matriz de proyección). ¿Estás seguro de que tu instructor no estaba hablando de gluPerspective en lugar de gluLookAt? – Bahbar

+0

La diferencia principal es que glFrustum es parte de la biblioteca principal OpenGL y gluLookAt forma parte de una biblioteca auxiliar que toma un conjunto diferente de parámetros y luego llama a glFrustum. No hace ninguna diferencia para OpenGL cuál utilizas; la elección es una de preferencia de codificación. – AndrewS

Respuesta

12

Tanto glFrustum y gluLookAt realizar simple multiplicación de matriz. Compruebe las páginas del manual de ecuaciones para las matrices:

gluLookAt

glFrustum

Tanto de los que se puede sustituir por una llamada glMultMatrix*.

La diferencia más importante es que glFrustum se utiliza la mayor parte del tiempo para establecer una matriz de proyección en perspectiva (utilizado internamente por gluPerspective), y gluLookAt es un método de conveniencia para especificar modelo-vista matrices (generalmente: Aplicación de una cámara).

2

gluLookAt afecta a la matriz ModelView mientras que, glFrustum/gluPerspective afecta a la matriz de proyección. Estas son completamente dos matrices diferentes en la tubería. gluLookAt es un método de utilidad que es una combinación de llamadas glRotate y glTranslate para mover la "cámara" al punto apropiado en el espacio y apuntarla a la ubicación deseada. Mientras que, glFrustum/gluPerspective son métodos que definen un volumen de visualización en perspectiva. Consulte más detalles en el OpenGL Red Book.

+0

Hurm? Estas funciones afectan la matriz que ha sido configurada por glMatrixMode. – AndrewS

Cuestiones relacionadas