Estou com um pouco de dificuldade para entender como essas matrizes funcionam e como configurá-las umas com as outras para obter um sistema adequado em execução.
No meu entendimento, o Model Matrix é a matriz de um objeto, por exemplo, um cubo ou uma esfera, haverá muitos deles no aplicativo / jogo.
The World Matrix é a matriz que define a origem do mundo 3D. O ponto de partida.
E a View Matrix é a "câmera" que tudo é traduzido com isso para garantir que você tenha a ilusão de uma câmera real, quando na verdade tudo está se movendo em vez dessa matriz?
Estou um pouco perdido aqui. Então, eu esperava que alguém aqui pudesse me ajudar a entender isso corretamente.
Toda modelMatrix é traduzida / multiplicada com a matriz mundial e a worldMatrix e com a viewMatrix? Ou cada modelMatrix é traduzida / multiplicada com o viewMatrix e depois com o worldMatrix?
Como todas essas matrizes se relacionam e como você configura um mundo com vários objetos e uma "câmera"?
EDITAR:
Muito obrigado pelo feedback já. Eu fiz algumas pesquisas no Google e acho que entendo um pouco melhor agora, no entanto, seria possível obter alguns conselhos sobre pseudo-código?
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;
Multiplico ou traduzo o viewMatrix com o modelMatrix ou o contrário? e o que então? Atualmente, tenho um método de desenho de tal maneira que ele precisa apenas de 2 matrizes para desenhar argumentos.
Aqui está o meu método de desenho:
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);
}
Quais são essas matrizes devem ser? Muito obrigado antecipadamente novamente pessoal.