1. gl_Position = Projektion * Ansicht * Modell * Position;
von der lokalen/Modellposition zur Position des endgültigen Clipbereichs
Drei Transformation Maxtrix:
-
Projektion: Projektionstransformationsmatrix
Transformation Koordinatensystem anzeigen in Raumkoordinatensystem ausschneiden
-
Ansicht: Transformationsmatrix anzeigen
Modellkoordinatensystem in Koordinatensystem anzeigen(Position der Kamera verschieben)
-
Modell: Modelltransformationsmatrix
lokale Koordinate in Modellkoordinatensystem/Spielweltkoordinatensystem (absolute Koordinate) umwandeln
-
Position: Die lokalen Koordinaten der Eckpunkte
Lokales Koordinatensystem (relatives Koordinatensystem)
Hinweis:-
- Der Ursprung des Koordinatensystems von Position und Modell wird vom Entwickler je nach Anforderung definiert.
- das Koordinatensystem von Welt und Modell, das den Modell- und Positionsmatrixdaten entspricht:
Absolute(World) Y+ axis
Y (0, 1, 0)
|
| Local(Model) Y+ axis
| | /
| | /
| |
| ---------- o (1, 0, 1) ← Local(Model) Origin ---- Local X+ axis
| / |
| / |
| / |
| / |
| / |
|______________________/______|__________ X (1, 0, 0) Absolute(World) X+ axis
/ Local(Model) Z+ axis
/
/
/
Z (0, 0, 1)
Absolute(World) Z+ axis
Nach dem Login kopieren
Nach dem Login kopieren
2. WebGL verwendet standardmäßig die primäre Spaltenreihenfolge, während C standardmäßig die primäre Zeilenreihenfolge verwendet.
In WebGL werden Matrizen in der
Spalten-Hauptreihenfolge gespeichert, was sich auf die Matrixanordnung und die Berechnungsreihenfolge auswirkt. Diese Speichermethode beeinflusst, wie Matrizen in WebGL definiert und verwendet werden. Hier sind einige gängige Vorgehensweisen bei der Arbeit mit Spalten-Hauptmatrizen in WebGL:
- Matrixdefinition und -anordnung
## Matrixdefinition und -anordnung
Bei der spaltengroßen Speicherung werden die Spalten der Matrix nacheinander gespeichert. Beispielsweise sieht eine 4x4-Matrix M in Spalten-Hauptreihenfolge so aus:
M = | m11 m21 m31 m41 | | m12 m22 m32 m42 | | m13 m23 m33 m43 | | m14 m24 m34 m44 |
In WebGL wird diese Matrix als eindimensionales Array in Spalten-Hauptreihenfolge dargestellt:
const matrix = [
m11, m21, m31, m41, // First column
m12, m22, m32, m42, // Second column
m13, m23, m33, m43, // Third column
m14, m24, m34, m44 // Fourth column
];
Nach dem Login kopieren
- Konsistentes Matrix- und Array-Format
Bei der Übergabe von Matrixdaten an WebGL-Shader ist es wichtig, ein konsistentes Format zu verwenden. Wenn Sie beispielsweise eine 4x4-Transformationsmatrix übergeben, erwartet die Funktion uniformMatrix4fv von WebGL das Array in der Reihenfolge der Hauptspalten:
gl.uniformMatrix4fv(location, false, matrix);
Nach dem Login kopieren
Falsch bedeutet hier, dass die Matrix nicht transponiert werden soll. Da WebGL standardmäßig die Reihenfolge der Hauptspalten verwendet, stellen Sie sicher, dass das Datenformat dieser Anforderung entspricht, da die Standard-Math-Bibliothek von JavaScript möglicherweise standardmäßig die Reihenfolge der Hauptzeilen verwendet.
-
Matrix-Multiplikationsreihenfolge
In der Praxis wirkt sich die Spaltenhauptordnung auf die Multiplikationssequenz von Matrizen aus. In diesem System werden Matrizen von rechts nach links multipliziert, was bedeutet, dass die letzte Transformation zuerst angewendet wird. Zum Beispiel:
Die resultierende Matrix M kann als Produkt der Transformationsmatrizen T, R und S ausgedrückt werden:
M = T ⋅ R ⋅ S
In dieser Gleichung:
-
S ist eine Skalierungsmatrix,
-
R ist eine Rotationsmatrix,
-
T ist eine Übersetzungsmatrix.
In der Reihenfolge der Hauptspalten wendet diese Sequenz zuerst die Skalierung, dann die Drehung und schließlich die Übersetzung an.
-
Utility-Bibliotheken verwenden
Die Verwendung von Bibliotheken wie glMatrix vereinfacht Matrixoperationen in WebGL. Diese Bibliotheken folgen im Allgemeinen der Spalten-Hauptreihenfolge, richten sich nach den Anforderungen von WebGL und vermeiden die Notwendigkeit manueller Anpassungen des Matrixformats. Zum Beispiel:
lass modelMatrix = mat4.create();// eine Identitätsmatrix erstellen
Absolute(World) Y+ axis
Y (0, 1, 0)
|
| Local(Model) Y+ axis
| | /
| | /
| |
| ---------- o (1, 0, 1) ← Local(Model) Origin ---- Local X+ axis
| / |
| / |
| / |
| / |
| / |
|______________________/______|__________ X (1, 0, 0) Absolute(World) X+ axis
/ Local(Model) Z+ axis
/
/
/
Z (0, 0, 1)
Absolute(World) Z+ axis
Nach dem Login kopieren
Nach dem Login kopieren
-
Debugging und Konvertierung
Das Verständnis des spaltengroßen Speichers hilft beim Debuggen von Matrixberechnungen. Wenn ein Matrixergebnis unerwartet ist, überprüfen Sie, ob die Datenanordnung in den Shadern mit der Spaltenhauptreihenfolge übereinstimmt.
Das obige ist der detaillierte Inhalt von[WebGL] [Basis] nicht gehäutetes Modell. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!