Pertama saya akan sangat merekomendasikan hanya menyimpan posisi sebagai vektor secara terpisah, itu akan membuat segalanya lebih mudah secara komputasi. Bagaimanapun ...
[x (dot) right, y (dot) up, z (dot) look]
bukan matriks tampilan aktual. Matriks itu sendiri berbentuk:
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
di mana matriks 3x3 kiri atas mewakili rotasi, skala, dll. Semua orientasi kamera dilakukan di sana. Baris dan kolom yang tersisa digunakan untuk terjemahan dan beberapa hal perspektif rumit lainnya yang tidak akan saya bahas sekarang.
Ketika Anda mendapatkan matriks (dengan asumsi itu adalah matriks 4x4), terjemahan akan selalu disimpan di baris terakhir atau kolom terakhir, tergantung pada apakah kelas matriks Anda adalah urutan-utama atau urutan-kolom-utama.
Apa yang mungkin membuat Anda bingung adalah kenyataan bahwa Anda membutuhkan produk titik. Apa yang terjadi adalah penyederhanaan matrik matematika, ada jawaban yang lebih terperinci dalam pertanyaan Stack Overflow ini: /programming/349050/calculating-a-lookat-matrix
Solusinya dapat ditemukan di sini , Anda perlu mengambil kebalikan dari matriks dan mendapatkan terjemahannya:
Vector3 ViewTrans = Matrix.Invert(ViewMatrix).Translation;
Position = ViewTrans;