Heim > Web-Frontend > js-Tutorial > [WebGL] [Basis] nicht gehäutetes Modell

[WebGL] [Basis] nicht gehäutetes Modell

Linda Hamilton
Freigeben: 2024-11-04 07:00:31
Original
725 Leute haben es durchsucht

[WebGL] [basic] non-skinned model

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:

  1. 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
  1. 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.

  1. 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 = TRS

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.

  1. 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
  1. 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!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage