Apa urutan yang benar untuk mengalikan skala, rotasi, dan matriks terjemahan untuk matriks dunia yang tepat?

62

Asumsikan DirectX sebagai platform, jika itu penting. (Cukup yakin bukan)

Dengan asumsi saya memiliki skala yang tepat, rotasi dan matriks terjemahan, dalam urutan apa saya mengalikan mereka untuk menghasilkan matriks dunia yang tepat dan mengapa?

Maksudnya "benar", maksud saya, "Saya bisa melemparnya langsung ke DirectX dan mendapatkan bingkai 3D yang paling umum digunakan."

Narf the Mouse
sumber
6
Berikut adalah penjelasan tentang "rotate then translate" (spinning) vs "translate then rotate" (mengorbit)
bobobobo
tautannya bagus, tetapi dengan kesalahan kecil. itu harus efek bergulir dan tidak berputar, karena bola cenderung bergerak menjauh dari posisinya (tetap pada sumbu) dengan menerjemahkan.
infoclogged

Jawaban:

77

Biasanya itu skala, lalu rotasi dan terjemahan terakhir. Dengan denotasi matriks (yaitu T untuk matriks terjemahan, R untuk matriks rotasi dan S untuk matriks penskalaan) yang akan menjadi:

T * R * S

Namun, jika Anda ingin memutar objek di sekitar titik tertentu, maka itu adalah skala, terjemahan titik, rotasi dan terjemahan objek terakhir.

Mengapa: Pertama, Anda ingin skala objek agar terjemahan berfungsi dengan baik. Kemudian Anda memutar sumbu sehingga terjemahan terjadi pada sumbu yang disesuaikan. Akhirnya Anda menerjemahkan objek ke posisi itu.

Di OpenGL Anda dapat menggunakan gluLookAt untuk mendapatkan transformasi kamera penuh dalam satu panggilan. Kemungkinan ada panggilan serupa untuk DirectX.

Raphael R.
sumber
11
Dan ingat, jika Anda ingin mentransformasikan pusat, maka Anda harus terlebih dahulu menerjemahkan untuk mengimbangi pusat menjadi asal, lalu lakukan seperti yang telah dinyatakan oleh user392858, lalu terjemahkan kembali jauh dari asal dengan jumlah yang sama. Namun secara umum, ini hanya diperlukan dalam 2D, di mana Anda memiliki beberapa sprite yang memiliki kiri atas pada titik asal.
Insinyur
Bagus. :) Sekarang saya hanya perlu mencari tahu mengapa model saya sekarang terbalik dalam tampilan horizontal dan membutuhkan produk titik pada lampu arah terbalik dalam tampilan vertikal. Itu tidak digunakan untuk melakukan itu, maka saya memperbaiki beberapa matematika ...
Narf the Mouse
Biarkan dicatat, saya benci tanda negatif yang salah tempat. Bagaimanapun, terima kasih, dan Anda dapat mempertimbangkan pertanyaan ini selesai. :)
Narf the Mouse
Tidak masalah, selalu senang membantu.
Raphael R.
2
@ Matthias Sejauh yang saya tahu, itu tergantung bagaimana Anda kemudian mengalikan dengan vektor yang ingin Anda ubah. Jika Anda mengalikan M * v maka ya, jawabannya telah terbalik.
bialpio
-4

rotasi dan penskalaan terjemahan adalah urutan untuk melakukan operasi

nol
sumber
-5

Saya percaya itu adalah Rotasi Terjemahan dan Dialasi

Jimmy
sumber
2
Ini tidak memberikan penjelasan lebih dari jawaban yang ada.
DMGregory