/ / como obter inverso da matriz modelview? - opengl, matriz inversa

como obter inverso da matriz de modelview? - opengl, matriz inversa

Transformei um vetor multiplicando-o pela matriz Model View.

glGetDoublev( GL_MODELVIEW_MATRIX, cam );
newX=cam[0]*tx+cam[1]*ty+cam[2]*tz+cam[3];
newY=cam[4]*tx+cam[5]*ty+cam[6]*tz+cam[7];
newZ=cam[8]*tx+cam[9]*ty+cam[10]*tz+cam[11];

Como obtenho a matriz inversa da vista de modelo para a transformação reversa?

Respostas:

2 para resposta № 1

O que você tem no seu código publicado não é a maneira correta de aplicar a matriz MODELVIEW. O OpenGL usa a ordem principal da coluna para matrizes. Seu cálculo precisaria da seguinte maneira:

newX=cam[0]*tx+cam[4]*ty+cam[8]*tz+cam[12];
newY=cam[1]*tx+cam[5]*ty+cam[9]*tz+cam[13];
newZ=cam[2]*tx+cam[6]*ty+cam[10]*tz+cam[14];

Para a matriz invertida, você pode apenas usar umalgoritmo genérico de inversão de matriz, como o @datenwolf já sugeriu. Se você pode fazer certas suposições sobre a matriz, existem métodos mais fáceis e eficientes. Um caso típico é que você sabe que sua matriz de transformação era composta apenas de rotações, traduções e dimensionamento. Nesse caso, você pode separar a matriz nesses componentes, inverter cada um e remontá-los na matriz invertida. Como rotações, traduções e redimensionamento são triviais para inverter, isso pode ser feito com uma matemática muito simples.


1 para resposta № 2

Bem, invertendo a matriz. É um procedimento matemático padrão que você pode encontrar literalmente em todos os livros sobre álgebra linear. Todas as bibliotecas de matrizes matemáticas têm uma função para inverter uma matriz. O OpenGL não é uma biblioteca matemática de matriz, portanto, não possui uma função para isso. Veja bibliotecas como GLM, Eigen ou linmath.h