(Jawaban ini pada dasarnya sama dengan Stefan, tetapi saya ingin menambahkan beberapa detail tentang vektor baris dan kolom, dan cara menentukan yang Anda gunakan.)
Ya, ini mungkin, tetapi detailnya bergantung pada apakah Anda mewakili vektor Anda sebagai baris atau kolom.
Vektor kolom
Jika Anda menggunakan vektor kolom , Anda biasanya akan mengubahnya dengan meninggalkan -multiplikasi matriks Anda:
vector = mRotateZ * vector;
vector = mRotateX * vector;
Tentu saja, Anda juga dapat melakukan ini dalam satu langkah:
vector = mRotateX * mRotateZ * vector;
Tetapi perkalian matriks adalah asosiatif, yang berarti tidak masalah perkalian mana yang dilakukan terlebih dahulu:
A * B * C = (A * B) * C = A * (B * C)
Jadi kita bisa menulis
Matrix mRotate = mRotateX * mRotateZ;
vector = mRotate * vector;
Kami sekarang telah membuat matriks tunggal, yang setara dengan putaran pertamaZ
dan kedua tentang X
. Ini secara umum sepele untuk sejumlah transformasi. Perhatikan bahwa transformasi diterapkan dari kanan ke kiri.
Vektor baris
Jika, di sisi lain, Anda menggunakan vektor baris , Anda biasanya akan ke kanan -multiply matriks Anda:
vector = vector * mRotateZ;
vector = vector * mRotateX;
Sekali lagi, menulisnya dalam satu langkah, kita dapatkan
vector = vector * mRotateZ * mRotateX;
yang dapat ditulis ulang sebagai
Matrix mRotate = mRotateZ * mRotateX;
vector = vector * mRotate;
Perhatikan bahwa dalam kasus ini, transformasi diterapkan dari kiri ke kanan.