/ / Wie bekomme ich eine Umkehrung der Modelview-Matrix? - opengl, matrixinvertiert

Wie bekommt man die Inverse der Modelview Matrix? - opengl, Matrix-Invers

Ich habe einen Vektor durch Multiplikation mit der Modellansicht-Matrix transformiert.

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

Wie bekomme ich die Umkehrung der Modellsichtmatrix für die Rücktransformation?

Antworten:

2 für die Antwort № 1

Was Sie in Ihrem geposteten Code haben, ist nicht die richtige Art, die MODELVIEW-Matrix anzuwenden. OpenGL verwendet die Reihenfolge der Spalten für Matrizen.

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

Für die invertierte Matrix können Sie einfach eineGenerischer Matrixinversionsalgorithmus, wie @datenwolf bereits vorgeschlagen hat. Wenn Sie bestimmte Annahmen über die Matrix treffen können, gibt es einfachere und effizientere Methoden. Ein typischer Fall ist, dass Sie wissen, dass Ihre Transformationsmatrix nur aus Rotationen, Translationen und Skalierungen bestand. In diesem Fall können Sie die Matrix in diese Komponenten aufspalten, invertieren und wieder in die invertierte Matrix einfügen. Da Rotationen, Verschiebungen und Skalierungen alle relativ einfach zu invertieren sind, kann dies mit sehr einfacher Mathematik erfolgen.


1 für die Antwort № 2

Nun, äh, durch Invertieren der Matrix. Es ist ein mathematisches Standardverfahren, das Sie buchstäblich in jedem Lehrbuch der linearen Algebra finden können. Alle Matrixmathlibliotheken haben eine Funktion zum Invertieren einer Matrix. OpenGL ist keine Matrixmathematikbibliothek, daher hat es keine Funktion dafür. Schauen Sie sich Bibliotheken wie GLM, Eigen oder linmath.h an