tortuga sirve que para glloadidentity opengl graphics

opengl - tortuga - glloadidentity para que sirve



¿Qué hace GlLoadIdentity() en OpenGL? (5)

La matriz de identidad es el equivalente de 1 para el número. Como sabes, cualquier número que se multiplique por 1 es él mismo (eg A x 1 = A) ,

Lo mismo ocurre con la matriz ( MatrixA x IdentityMatrix = MatrixA) .

Entonces, cargar una matriz de identidad es una forma de inicializar su matriz al estado correcto antes de multiplicar matrices adicionales en la pila de la matriz.

glMatrixMode(GL_PROJECTION) : trata de las matrices utilizadas por transformación de perspectiva o transformación ortogonal.

glMatrixMode(GL_MODELVIEW) : se ocupa de las matrices utilizadas por la transformación de vista de modelo. Es decir, para transformar su objeto (modelo aka) al espacio de coordenadas de la vista (o espacio de la cámara).

Soy nuevo en OpenGL y estoy un poco abrumado con todas las funciones aleatorias que tengo en mi código. Funcionan y sé cuándo usarlos, pero no sé por qué los necesito o lo que realmente hacen.

Sé que glLoadIdentity() reemplaza la matriz actual con la matriz de identidad, pero ¿qué hace exactamente eso? Si cada programa lo requiere, ¿por qué no es la matriz de identidad por defecto a menos que se especifique lo contrario? No me gusta tener funciones en mi código a menos que sepa lo que hacen. Debo señalar que estoy usando OpenGL exclusivamente para clientes ricos en 2D, así que disculpe mi ignorancia si esto es algo muy obvio para 3D.

También un poco confundido sobre glMatrixMode(GL_PROJECTION) VS glMatrixMode(GL_MODELVIEW) .


La matriz de identidad se utiliza para "inicializar" una matriz a un valor predeterminado de sana.

Una cosa importante es darse cuenta de que las multiplicaciones de matrices son, en cierto sentido, aditivas. Por ejemplo, si tomas una matriz que comienza con la matriz de identidad, la multiplicas por una matriz de rotación y luego la multiplicas por una matriz de escala, terminas con una matriz que rota y escala las matrices contra las que se multiplica.


La matriz de identidad, en términos de las matrices de proyección y de vista de modelo, esencialmente restablece la matriz a su estado predeterminado.

Como es de esperar, glTranslate y glRotate siempre están relacionados con el estado actual de la matriz. Entonces, por ejemplo, si llama a glTranslate , está traduciendo desde la "posición" actual de la matriz, no desde el origen. Pero si quiere comenzar de nuevo en el origen, es cuando llama a glLoadIdentity() , y luego puede glTranslate desde la matriz que ahora se encuentra en el origen, o glRotate desde la matriz que ahora está orientada en la dirección predeterminada.

Creo que la respuesta de Boon, que es el equivalente a 1, no es exactamente correcta. La matriz realmente se ve así:

1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1

Esa es la matriz de identidad. Boon es correcto, matemáticamente, que cualquier matriz multiplicada con esa matriz (o una matriz que se parece a eso, diagonales, todos los demás 0) dará como resultado la matriz original, pero no creo que haya explicado por qué esto es importante.

La razón por la cual esto es importante es porque OpenGL multiplica todas las posiciones y rotaciones a través de cada matriz; entonces cuando, por ejemplo, glBegin(GL_FACE) un polígono ( glBegin(GL_FACE) , algunos puntos, glEnd() ), lo traduce como "espacio mundial" multiplicándolo con MODELVIEW, y luego lo traduce de 3D a 2D multiplicándolo con el PROYECTO matriz, y que le da los puntos 2D en la pantalla, junto con la profundidad (de la pantalla ''cámara''), que utiliza para dibujar píxeles. Pero cuando una de estas matrices es la matriz de identidad, los puntos se multiplican con la matriz de identidad y, por lo tanto, no se modifican, por lo que la matriz no tiene efecto; no traduce los puntos, no los rota, los deja tal como están.

¡Espero que esto aclare un poco más!


La matriz de proyección se usa para crear su volumen de visualización. Imagina una escena en el mundo real. Realmente no ves todo a tu alrededor, solo lo que tus ojos te permiten ver. Si eres un pez, por ejemplo, ves las cosas un poco más. Entonces, cuando decimos que configuramos la matriz de proyección, queremos decir que configuramos lo que queremos ver en la escena que creamos. Quiero decir que puedes dibujar objetos en cualquier parte de tu mundo. Si no están dentro del volumen de la vista, no verás nada. Cuando crea el volumen de vista imagínese que crea 6 planos de recorte que definen su campo de visión.

En cuanto a la matriz modelview, se usa para hacer varias transformaciones a los modelos (objetos) en su mundo. De esta manera solo tienes que definir tu objeto una vez y luego traducirlo o rotarlo o escalarlo.

Utilizaría la matriz de proyección antes de dibujar los objetos en su escena para establecer el volumen de la vista. Luego dibuja tu objeto y cambia la matriz de la vista modelo en consecuencia. Por supuesto, puede cambiar su matriz a mitad de dibujar sus modelos si, por ejemplo, desea dibujar una escena y luego dibujar algo de texto (que con algunos métodos puede trabajar más fácilmente en proyección ortográfica) y luego volver a la matriz de vista modelo.

En cuanto al nombre modelview, tiene que ver con la dualidad de modelado y visualización de transformaciones. Si dibujas la cámara 5 unidades hacia atrás, o mueves el objeto 5 unidades hacia adelante, es esencialmente la misma.

Espero haber arrojado algo de luz


glLoadIdentity() función glLoadIdentity() garantiza que cada vez que glLoadIdentity() en el modo de proyección, la matriz se restablecerá en la matriz de identidad, de modo que los nuevos parámetros de visualización no se combinen con el anterior.