/ / comment obtenir l'inverse de la matrice modelview? - opengl, matrice-inverse

comment obtenir l'inverse de la matrice modelview? - opengl, matrice-inverse

J'ai transformé un vecteur en le multipliant avec la matrice Vue de modèle.

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];

Comment puis-je obtenir l'inverse de la matrice de vue de modèle pour la transformation inverse?

Réponses:

2 pour la réponse № 1

Ce que vous avez dans votre code posté n’est pas la bonne façon d’appliquer la matrice MODELVIEW. OpenGL utilise l’ordre majeur des colonnes pour les matrices. Votre calcul devrait ressembler à ceci:

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];

Pour la matrice inversée, vous pouvez simplement utiliser unalgorithme d'inversion de matrice générique, comme l'a déjà suggéré @datenwolf. Si vous pouvez faire certaines hypothèses sur la matrice, il existe des méthodes plus simples et plus efficaces. Un cas typique est que vous savez que votre matrice de transformation était composée uniquement de rotations, de translations et de mises à l'échelle. Dans ce cas, vous pouvez séparer la matrice dans ces composants, les inverser et les réassembler dans la matrice inversée. Comme les rotations, les traductions et la mise à l’échelle sont toutes simples à inverser, vous pouvez le faire en mathématiques très simples.


1 pour la réponse № 2

Eh bien, en inversant la matrice. C’est une procédure mathématique standard que l’on trouve littéralement dans tous les manuels d’algèbre linéaire. Toutes les bibliothèques mathématiques matricielles ont une fonction permettant d’inverser une matrice. OpenGL n’est pas une bibliothèque mathématique matricielle, il n’a donc pas de fonction pour cela. Regardez des bibliothèques comme GLM, Eigen ou linmath.h