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.
Réponses:
Dans une scène de rendu 3D, trois matrices principales sont généralement utilisées pour transformer un objet de son propre espace local (espace objet / modèle) en un espace homogène appelé espace d'écran.
Monde
Vue
Projection
Au niveau le plus simple, chacun de vos objets doit contenir sa propre matrice de monde, votre "scène" ou le contexte que vous utilisez doit contenir une matrice de vue pour représenter une caméra et une matrice de projection pour convertir les coordonnées du monde en coordonnées d'écran. Tous ces éléments doivent ensuite être passés au vertex shader (avec la matrice du monde changeant pour chaque objet, mais pas nécessairement la vue ou la projection) pour être transformés.
la source
La bonne réponse est ici /programming/6461740/xna-worldmatrix-and-viewmatrix
Tout d'abord, il n'y a pas de réelle différence entre une "World Matrix" et une "View Matrix" , ce sont toutes les deux des matrices de transformation et la distinction est quelque peu arbitraire. Certains systèmes combinent même les deux (OpenGL a simplement une matrice "ModelView" ).
Traditionnellement, la «matrice mondiale» est utilisée pour déplacer des modèles individuels de «l'espace modèle» vers «l'espace mondial». Ensuite, la «matrice de vue» est utilisée pour déplacer tous les modèles de l'espace mondial dans leurs positions relatives devant la caméra (qui, en fait, «déplace la caméra»). Et enfin la "Projection Matrix" convertit les positions 3D en leurs positions 2D sur l'écran (généralement avec une projection en perspective). Parce que ce sont des matrices, elles peuvent être multipliées ensemble en une seule matrice qui peut transformer des points en une seule étape.
la source