Tengo problemas para entender cómo funcionan estas matrices y cómo configurarlas en relación entre sí para que el sistema funcione correctamente.
Según tengo entendido, la Matriz Modelo es la matriz de un objeto, por ejemplo, un cubo o una esfera, habrá muchos de estos en la aplicación / juego.
World Matrix es la matriz que define el origen del mundo 3D. el punto de partida.
Y la View Matrix es la "cámara", todo se traduce con esto para asegurarse de que tiene la ilusión de una cámara real cuando, de hecho, todo se mueve en lugar de esta matriz.
Estoy un poco perdido aquí. Así que esperaba que alguien aquí pudiera ayudarme a entender esto correctamente.
¿Cada modelMatrix se traduce / multiplica con la matriz mundial y worldMatrix y luego con viewMatrix? ¿O cada modelMatrix se traduce / multiplica con viewMatrix y luego con worldMatrix?
¿Cómo se relacionan todas estas matrices y cómo se configura un mundo con múltiples objetos y una "cámara"?
EDITAR:
Muchas gracias por los comentarios ya. Busqué en Google y creo que lo entiendo un poco mejor ahora, sin embargo, ¿sería posible obtener algunos consejos de pseudocó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 o traduzco viewMatrix con modelMatrix o al revés? ¿y luego que? Actualmente tengo un método de dibujo de tal manera que solo necesita 2 matrices para dibujar los argumentos.
Aquí está mi método de dibujo:
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);
}
¿Qué se supone que son esas matrices? Muchas gracias de antemano nuevamente chicos.
Respuestas:
Dentro de una escena renderizada en 3D, normalmente se utilizan tres matrices principales para transformar un objeto desde su propio espacio local (espacio objeto / modelo) a un espacio homogéneo conocido como espacio de pantalla.
Mundo
Ver
Proyección
En el nivel más simple, cada uno de sus objetos debe contener su propia matriz mundial, su "escena" o cualquier contexto que use debe contener una matriz de vista para representar una cámara y una matriz de proyección para convertir las coordenadas mundiales en coordenadas de pantalla. Todos estos deben pasar al sombreador de vértices (con la matriz mundial cambiando para cada objeto, pero no necesariamente la vista o proyección) para transformarse.
fuente
Buena respuesta está aquí /programming/6461740/xna-worldmatrix-and-viewmatrix
En primer lugar, no existe una diferencia real entre una "matriz mundial" y una "matriz de vista" , ambas son matrices de transformación y la distinción es algo arbitraria. Algunos sistemas incluso combinan los dos (OpenGL simplemente tiene una matriz "ModelView" ).
Tradicionalmente, la "matriz mundial" se utiliza para mover modelos individuales del "espacio modelo" al "espacio mundial". Luego, la "matriz de vista" se usa para mover todos los modelos del espacio mundial a sus posiciones relativas frente a la cámara (que, en efecto, "mueve la cámara"). Y finalmente, la "Matriz de proyección" convierte las posiciones 3D en sus posiciones 2D en la pantalla (generalmente con una proyección en perspectiva). Debido a que son matrices, se pueden multiplicar en una sola matriz que puede transformar puntos en un solo paso.
fuente