Tôi gặp một chút khó khăn khi hiểu cách thức các ma trận này hoạt động và cách thiết lập chúng liên quan đến nhau để có được một hệ thống phù hợp.
Theo hiểu biết của tôi, Ma trận mô hình là ma trận của một đối tượng, ví dụ như hình khối hoặc hình cầu, sẽ có nhiều trong số này trong ứng dụng / trò chơi.
Ma trận thế giới là ma trận xác định nguồn gốc của thế giới 3D. điểm băt đâu.
Và View Matrix là "máy ảnh" mọi thứ được dịch với điều này để đảm bảo bạn có ảo ảnh về một chiếc máy ảnh thực tế khi thực tế mọi thứ đang chuyển động thay vì ma trận này?
Tôi có một chút mất ở đây. Vì vậy, tôi đã hy vọng ai đó ở đây có thể giúp tôi hiểu điều này đúng.
Có phải mọi modelMatrix đều được dịch / nhân với ma trận thế giới và worldMatrix sau đó với viewMatrix không? Hay mọi modelMatrix đều được dịch / nhân với viewMatrix và sau đó với worldMatrix?
Làm thế nào để tất cả các ma trận này liên quan và làm thế nào để bạn thiết lập một thế giới với nhiều đối tượng và một "máy ảnh"?
BIÊN TẬP:
Cảm ơn rất nhiều cho các thông tin phản hồi đã. Tôi đã làm một số aswel googling và tôi nghĩ rằng bây giờ tôi đã hiểu nó tốt hơn một chút, tuy nhiên liệu có thể nhận được một số lời khuyên mã giả?
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;
Tôi có nhân hoặc dịch viewMatrix với modelMatrix hay ngược lại không? và sau đó thì sao? Tôi hiện đang có một phương thức vẽ theo cách mà nó chỉ cần 2 ma trận cho các đối số để vẽ.
Đây là phương pháp vẽ của tôi:
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);
}
Những ma trận giả sử là gì? Cảm ơn rất nhiều trước một lần nữa các bạn.