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.