A matriz de identidade, em termos das matrizes de projeção e modelview, redefine essencialmente a matriz de volta ao seu estado padrão.
Como você provavelmente sabe, glTranslate
e glRotate
sempre são relativos ao estado atual da matriz. Por exemplo, se você ligar glTranslate
, estará traduzindo da posição atual da matriz, não da origem. Mas se você deseja começar de novo na origem, é quando você chama glLoadIdentity()
e pode glTranslate
partir da matriz que agora está localizada na origem ou glRotate
da matriz que agora está orientada na direção padrão.
Eu acho que a resposta de Boon, que é o equivalente a 1, não está exatamente correta. A matriz fica assim:
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Essa é a matriz de identidade. Boon está correto, matematicamente, que qualquer matriz multiplicada por essa matriz (ou uma matriz que se parece com isso; diagonais, todos os outros 0s) resultará na matriz original, mas não acredito que ele tenha explicado por que isso é importante.
A razão pela qual isso é importante é porque o OpenGL multiplica todas as posições e rotações por cada matriz; portanto, quando, por exemplo, você desenha um polígono ( glBegin(GL_FACE)
, alguns pontos glEnd()
), ele o converte em "espaço do mundo", multiplicando-o com o MODELVIEW, e depois converte-o de 3D para 2D, multiplicando-o pela matriz PROJECT, e isso fornece os pontos 2D na tela, juntamente com a profundidade (na tela 'câmera'), que ela usa para desenhar pixels. Mas quando uma dessas matrizes é a matriz de identidade, os pontos são multiplicados pela matriz de identidade e, portanto, não são alterados; portanto, a matriz não tem efeito; não traduz os pontos, não os gira, os deixa como estão.
Espero que isso esclareça um pouco mais!
Matriz de identidade é o equivalente a 1 para número. Como você sabe que qualquer número que multiplica por 1 é ele próprio
(e.g. A x 1 = A)
,O mesmo vale para a matriz
( MatrixA x IdentityMatrix = MatrixA)
.Portanto, carregar uma matriz de identidade é uma maneira de inicializar sua matriz no estado correto antes de multiplicar mais matrizes na pilha de matrizes.
glMatrixMode(GL_PROJECTION)
: lida com as matrizes usadas por transformação de perspectiva ou transformação ortogonal.glMatrixMode(GL_MODELVIEW)
: lida com matrizes usadas pela transformação de visualização de modelo. Ou seja, para transformar seu objeto (também conhecido como modelo) no espaço de coordenadas da vista (ou no espaço da câmera).fonte
A matriz de projeção é usada para criar seu volume de visualização. Imagine uma cena no mundo real. Você realmente não vê tudo ao seu redor, apenas o que seus olhos permitem que você veja. Se você é um peixe, por exemplo, vê as coisas um pouco mais amplas. Então, quando dizemos que montamos a matriz de projeção, queremos dizer que montamos o que queremos ver da cena que criamos. Quero dizer, você pode desenhar objetos em qualquer lugar do seu mundo. Se eles não estiverem dentro do volume da visualização, você não verá nada. Ao criar o volume da visualização, imagine que você criou 6 planos de recorte que definem seu campo de visão.
Quanto à matriz modelview, ela é usada para fazer várias transformações nos modelos (objetos) em seu mundo. Assim, você só precisa definir seu objeto uma vez e depois convertê-lo ou girá-lo ou dimensioná-lo.
Você usaria a matriz de projeção antes de desenhar os objetos em sua cena para definir o volume da vista. Em seguida, você desenha seu objeto e altera a matriz modelview de acordo. É claro que você pode alterar sua matriz no meio do desenho de seus modelos se, por exemplo, desejar desenhar uma cena e depois desenhar algum texto (que, com alguns métodos, você pode trabalhar mais facilmente na projeção ortográfica), volte para a matriz modelview.
Quanto ao nome modelview, ele tem a ver com a dualidade de modelar e visualizar transformações. Se você puxar a câmera 5 unidades para trás ou mover o objeto 5 unidades para frente, é essencialmente o mesmo.
Espero ter derramado alguma luz
fonte
A matriz de identidade é usada para "inicializar" uma matriz para um padrão sadio.
Uma coisa importante a perceber é que as multiplicações de matrizes são, de certo modo, aditivas. Por exemplo, se você pegar uma matriz que começa com a matriz de identidade, multiplica-a por uma matriz de rotação e multiplica-a por uma matriz de escala, você termina com uma matriz que gira e escala as matrizes nas quais é multiplicada.
fonte
Apenas para recapitular o que outros disseram, a matriz de identidade é uma matriz que, quando você multiplica um vetor / matriz com ela, o resultado é esse mesmo vetor / matriz. É o equivalente ao número 1 com multiplicação ou ao número 0 com adição.
glLoadIdentity () é uma função obsoleta e você é incentivado a gerenciar suas próprias matrizes.
fonte
glLoadIdentity()
A função garante que cada vez que entrarmos no modo de projeção, a matriz será redefinida para matriz de identidade, para que os novos parâmetros de visualização não sejam combinados com o anterior.fonte