2011-08-04 19 views
8

Estoy leyendo un libro en OpenGL, SDL y he leído parte de la documentación de OpenGL. También he leído esta publicación: What does glLoadIdentity() do in OpenGL?¿Por qué se debe llamar a glLoadIdentity después de cada llamada a glMatrixMode?

Estoy captando lo que glLoadIdentity() hace, y por qué se usa en un sentido general (para devolver la matriz actual a su estado original). Lo que no sé es por qué lo estoy devolviendo a su estado original. Por ejemplo:

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 

glOrtho(0.0f, 640, 480, 0.0f, -1.0f, 1.0f); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

No estoy exactamente seguro de por qué glLoadIdentity() tiene que ser llamado después de cada llamada a glMatrixMode.

Respuesta

13

When to call glMatrixMode() - primera respuesta trata de explicar:

glLoadIdentity() se suele llamar inmediatamente después de un cambio de modo de matriz por lo que está comenzando "fresco" si se quiere. Las transformaciones de matriz tales como gluPerspective(), glOrtho(), glFrustum(), glRotate(), glMultMatrix(), glTranslate() son operaciones acumulativas porque se agregan para permitirle describir transformaciones de espacio mundial en 3D complejas o para describir su visión de OpenGL volumen. Ejemplo: si quiero que un cubo se traduzca en la dirección + X y luego gire alrededor del eje Z, publico un glRotate() seguido de un glTranslate().

glLoadIdentity() borra la matriz (del modo de matriz actual) con la matriz de identidad por lo que seguir un gluPerspective() por glLoadIdentity() es equivalente a una sola llamada a glLoadIdentity(). En otras palabras, esa secuencia no tiene sentido.

+1

Perfecto, gracias por señalar esa respuesta. Cavaré más la próxima vez. –

Cuestiones relacionadas