У меня возникли проблемы с пониманием того, как работают эти матрицы и как их настраивать относительно друг друга, чтобы обеспечить правильную работу системы.
В моем понимании Матрица модели - это матрица объекта, например, куба или сферы, их будет много в приложении / игре.
Матрица мира - это матрица, которая определяет происхождение трехмерного мира. отправная точка.
И Матрица просмотра - это «камера», все переводится с этим, чтобы убедиться, что у вас есть иллюзия реальной камеры, когда на самом деле все движется вместо этой матрицы?
Я немного потерян здесь. Поэтому я надеялся, что кто-то здесь сможет помочь мне понять это правильно.
Каждый ли modelMatrix переводится / умножается на мировую матрицу и worldMatrix, а затем на ViewMatrix? Или каждый modelMatrix переводится / умножается с помощью viewMatrix, а затем с помощью worldMatrix?
Как соотносятся все эти матрицы и как вы настраиваете мир с несколькими объектами и «камерой»?
РЕДАКТИРОВАТЬ:
Большое спасибо за отзывы уже. Я немного погуглил и думаю, что теперь понимаю немного лучше, но можно ли получить совет по псевдокоду?
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;
Умножить или перевести viewMatrix с modelMatrix или наоборот? а что тогда? В настоящее время у меня есть метод рисования таким образом, что для рисования аргументов нужны только 2 матрицы.
Вот мой метод рисования:
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);
}
Какими должны быть эти матрицы? Большое спасибо заранее снова, ребята.