Saya mengalami sedikit kesulitan memahami bagaimana matriks ini bekerja dan bagaimana cara mengaturnya dalam kaitannya satu sama lain untuk mendapatkan sistem yang tepat berjalan.
Dalam pemahaman saya, Model Matrix adalah matriks dari suatu objek, misalnya kubus atau bola, akan ada banyak dari ini dalam aplikasi / permainan.
World Matrix adalah matriks yang menentukan asal dari dunia 3D. titik awal.
Dan View Matrix adalah "kamera" semuanya diterjemahkan dengan ini untuk memastikan Anda memiliki ilusi kamera yang sebenarnya padahal sebenarnya semuanya bergerak bukan matriks ini?
Saya agak tersesat di sini. Jadi saya berharap seseorang di sini dapat membantu saya memahami ini dengan benar.
Apakah setiap modelMatrix dapat diterjemahkan / dikalikan dengan matriks dunia dan worldMatrix kemudian dengan viewMatrix? Atau apakah setiap modelMatrix dapat diterjemahkan / dikalikan dengan viewMatrix dan kemudian dengan worldMatrix?
Bagaimana hubungan semua matriks ini dan bagaimana Anda mengatur dunia dengan banyak objek dan "kamera"?
EDIT:
Terima kasih banyak atas umpan baliknya. Saya melakukan beberapa aswel googling dan saya pikir saya memahaminya sedikit lebih baik sekarang, namun apakah mungkin untuk mendapatkan beberapa saran kode semu?
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;
Apakah saya melipatgandakan atau menerjemahkan viewMatrix dengan modelMatrix atau sebaliknya? dan lalu apa? Saat ini saya memiliki metode menggambar sedemikian rupa sehingga hanya perlu 2 matriks untuk argumen untuk menggambar.
Inilah metode menggambar saya:
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);
}
Matriks apa yang seharusnya? Terima kasih banyak sebelumnya kawan.
Jawaban:
Dalam adegan yang diberikan 3D, biasanya ada tiga matriks utama yang digunakan untuk mengubah objek dari ruang lokalnya sendiri (ruang objek / model) ke ruang homogen yang dikenal sebagai ruang layar.
Dunia
Melihat
Proyeksi
Pada level paling sederhana, setiap objek Anda harus mengandung matriks dunianya sendiri, "adegan" Anda atau konteks apa pun yang Anda gunakan harus berisi matriks tampilan untuk mewakili kamera, dan matriks proyeksi untuk mengonversi koordinat dunia ke koordinat layar. Semua ini kemudian perlu diteruskan ke vertex shader (dengan matriks dunia berubah untuk setiap objek, tetapi tidak harus tampilan atau proyeksi) untuk diubah.
sumber
Jawaban yang bagus ada di sini /programming/6461740/xna-worldmatrix-and-viewmatrix
Pertama-tama, tidak ada perbedaan nyata antara "Matriks Dunia" dan "Matriks Tampilan" , keduanya adalah matriks transformasi dan perbedaannya agak sewenang-wenang. Beberapa sistem bahkan menggabungkan keduanya (OpenGL hanya memiliki matriks "ModelView" ).
Secara tradisional "matriks dunia" digunakan untuk memindahkan model individual dari "ruang model" ke "ruang dunia". Kemudian "view matrix" digunakan untuk memindahkan semua model dari ruang dunia ke posisi relatif mereka di depan kamera (yang, pada dasarnya, "memindahkan kamera"). Dan akhirnya "Matriks Proyeksi" mengubah posisi 3D menjadi posisi 2D di layar (umumnya dengan proyeksi perspektif). Karena mereka adalah matriks, mereka dapat dikalikan bersama menjadi matriks tunggal yang dapat mengubah poin dalam satu langkah.
sumber