J'ai un peu de mal à comprendre comment ces matrices fonctionnent et comment les configurer les unes par rapport aux autres pour obtenir un bon fonctionnement du système.
À ma connaissance, la matrice de modèle est la matrice d'un objet, par exemple un cube ou une sphère, il y en aura beaucoup dans l'application / le jeu.
La World Matrix est la matrice qui définit l'origine du monde 3D. le point de départ.
Et la matrice de vue est la "caméra", tout est traduit avec cela pour vous assurer que vous avez l'illusion d'une caméra réelle alors qu'en fait tout bouge à la place de cette matrice?
Je suis un peu perdu ici. J'espérais donc que quelqu'un ici pourrait m'aider à bien comprendre cela.
Est-ce que chaque modelMatrix est traduit / multiplié avec la matrice du monde et le worldMatrix puis avec le viewMatrix? Ou est-ce que chaque modelMatrix est traduit / multiplié avec le viewMatrix et ensuite avec le worldMatrix?
Comment toutes ces matrices sont-elles liées et comment configurez-vous un monde avec plusieurs objets et une "caméra"?
ÉDITER:
Merci beaucoup pour les commentaires déjà. J'ai fait quelques recherches sur Google et je pense que je le comprends un peu mieux maintenant, mais serait-il possible d'obtenir des conseils sur le pseudo-code?
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;
Dois-je multiplier ou traduire le viewMatrix avec le modelMatrix ou l'inverse? et quoi encore? J'ai actuellement une méthode de dessin telle qu'elle n'a besoin que de 2 matrices pour les arguments à dessiner.
Voici ma méthode de tirage:
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);
}
Quelles sont ces matrices supposées être? Merci beaucoup d'avance à nouveau les gars.