Ich habe ein bisschen Probleme zu verstehen, wie diese Matrizen funktionieren und wie sie relativ zueinander eingerichtet werden, um ein ordnungsgemäßes System zum Laufen zu bringen.
Nach meinem Verständnis ist die Modellmatrix die Matrix eines Objekts, zum Beispiel eines Würfels oder einer Kugel. Viele davon werden in der Anwendung / im Spiel vorhanden sein.
Die Weltmatrix ist die Matrix, die den Ursprung der 3D-Welt definiert. Der Startpunkt.
Und die Ansichtsmatrix ist die "Kamera", mit der alles übersetzt wird, um sicherzustellen, dass Sie die Illusion einer tatsächlichen Kamera haben, wenn sich tatsächlich alles anstelle dieser Matrix bewegt?
Ich bin hier ein bisschen verloren. Ich hatte gehofft, jemand hier könnte mir helfen, das richtig zu verstehen.
Wird jede modelMatrix mit der Weltmatrix und der worldMatrix dann mit der viewMatrix übersetzt / multipliziert? Oder wird jede modelMatrix mit der viewMatrix und dann mit der worldMatrix übersetzt / multipliziert?
Wie hängen all diese Matrizen zusammen und wie baut man eine Welt mit mehreren Objekten und einer "Kamera" auf?
BEARBEITEN:
Vielen Dank für das Feedback. Ich habe ein bisschen gegoogelt und ich denke, ich verstehe es jetzt ein bisschen besser, aber wäre es möglich, einen Pseudo-Code-Rat zu bekommen?
projectionMatrix = Matrix;
makePerspective(45, width, height, 0.1, 1000.0, projectionMatrix);
modelMatrix = Matrix;
identity(modelMatrix);
translate(modelMatrix, [0.0, 0.0, -10.0]); // move back 10 on z axis
viewMatrix = Matrix;
identity(viewMatrix);
// do some translation based on input with viewMatrix;
Multipliziere oder übersetze ich die viewMatrix mit der modelMatrix oder umgekehrt? und was dann? Ich habe derzeit eine Zeichenmethode so eingerichtet, dass nur 2 Matrizen zum Zeichnen von Argumenten benötigt werden.
Hier ist meine Zeichenmethode:
draw(matrix1 matrix2) {
bindBuffer(ARRAY_BUFFER, cubeVertexPositionBuffer);
vertexAttribPointer(shaderProgram.getShaderProgram().vertexPositionAttribute, cubeVertexPositionBuffer.itemSize, FLOAT, false, 0, 0);
bindBuffer(ARRAY_BUFFER, cubeVertexColorBuffer);
vertexAttribPointer(shaderProgram.getShaderProgram().vertexColorAttribute, cubeVertexColorBuffer.itemSize, FLOAT, false, 0, 0);
bindBuffer(ELEMENT_ARRAY_BUFFER, cubeVertexIndexBuffer);
setMatrixUniforms(shaderProgram, matrix1, matrix2);
drawElements(TRIANGLES, cubeVertexIndexBuffer.numItems, UNSIGNED_SHORT, 0);
}
Was sollen diese Matrizen sein? Nochmals vielen Dank im Voraus Jungs.
Antworten:
Innerhalb einer 3D-gerenderten Szene gibt es normalerweise drei Hauptmatrizen, die verwendet werden, um ein Objekt aus seinem eigenen lokalen Raum (Objekt- / Modellraum) in einen homogenen Raum zu transformieren, der als Bildschirmraum bezeichnet wird.
Welt
Aussicht
Projektion
Auf der einfachsten Ebene muss jedes Ihrer Objekte eine eigene Weltmatrix enthalten, Ihre "Szene" oder der von Ihnen verwendete Kontext muss eine Ansichtsmatrix zur Darstellung einer Kamera und eine Projektionsmatrix zur Umwandlung von Weltkoordinaten in Bildschirmkoordinaten enthalten. All dies muss dann an den Vertex-Shader übergeben werden (wobei sich die Weltmatrix für jedes Objekt ändert, aber nicht unbedingt die Ansicht oder Projektion), um transformiert zu werden.
quelle
Eine gute Antwort finden Sie hier /programming/6461740/xna-worldmatrix-and-viewmatrix
Erstens gibt es keinen wirklichen Unterschied zwischen einer "Weltmatrix" und einer "Ansichtsmatrix" , sie sind beide Transformationsmatrizen und die Unterscheidung ist etwas willkürlich. Einige Systeme kombinieren sogar beide (OpenGL hat einfach eine "ModelView" -Matrix).
Traditionell wird die "Weltmatrix" verwendet, um einzelne Modelle vom "Modellraum" in den "Weltraum" zu verschieben. Dann wird die "Ansichtsmatrix" verwendet, um alle Modelle aus dem Weltraum in ihre relativen Positionen vor der Kamera zu bewegen (was praktisch "die Kamera bewegt"). Und schließlich konvertiert die "Projektionsmatrix" die 3D-Positionen in ihre 2D-Positionen auf dem Bildschirm (im Allgemeinen mit einer perspektivischen Projektion). Da es sich um Matrizen handelt, können sie zu einer einzigen Matrix multipliziert werden, die Punkte in einem einzigen Schritt transformieren kann.
quelle