Semua formula rotasi kanonik yang digunakan untuk menurunkan matriks rotasi Anda adalah untuk rotasi tentang asal. Jika Anda ingin menerapkan rotasi di sekitar titik tertentu, Anda harus terlebih dahulu mengimbangi titik asal - atau, ekuivalennya, memindahkan objek sehingga titik yang ingin Anda putar ada di titik asal.
Pertimbangkan kasus 2D terlebih dahulu, karena lebih sederhana dan skala teknik. Jika Anda memiliki kubus lebar 2 yang berpusat pada titik asal dan Anda ingin memutarnya 45 derajat di tengahnya, itu akan menjadi aplikasi sepele dari matriks rotasi 2D .
Tetapi jika sebaliknya Anda ingin memutarnya di sudut kanan atas (terletak di 1,1
) Anda harus terlebih dahulu menerjemahkannya sehingga sudut tersebut berada di tempat asalnya. Ini dapat diselesaikan dengan terjemahan -1,-1
. Kemudian Anda dapat memutar objek seperti sebelumnya, tetapi Anda harus mengikuti ini dengan menerjemahkannya kembali (oleh 1,1
). Jadi secara umum, untuk mencapai matriks rotasi R
untuk rotasi r
sekitar titik yang P
Anda lakukan:
R = translate(-P) * rotate(r) * translate(P)
di mana translate
dan rotate
masing-masing merupakan matriks terjemahan / rotasi kanonik. Seperti yang terjadi, skala ini sepele ke 3D, yang pengecualian harus memasok sumbu untuk rotasi juga - Anda selalu bisa memilih matriks rotasi sumbu X, Y atau Z kanonik, tetapi itu akan membosankan. Anda akan ingin menggunakan matriks rotasi sudut sumbu sewenang - wenang . Jadi final Anda R
dalam 3D adalah:
R = translate(-P) * rotate(a,r) * translate(P)
di mana a
vektor satuan mewakili sumbu rotasi dan P
sekarang menjadi titik 3D dalam ruang model yang mewakili titik rotasi.
Ketika itu terjadi, angka empat dapat dikonversi ke dan dari representasi matriks, sehingga Anda dapat melakukan penggabungan Anda dengan cara yang harus Anda pilih. Atau Anda bisa meninggalkan semuanya sebagai matriks (angka empat memiliki beberapa keuntungan bagus seperti menjadi lebih mudah untuk diinterpolasi dengan cara yang waras, tetapi apakah Anda membutuhkannya atau tidak, itu tergantung pada Anda).
Juga:
Jadi saya memvisualisasikannya sebagai memutar tentang vektor yang ekornya diposisikan tidak pada asal lokal.
Sebenarnya, sementara vektor dapat digunakan untuk mewakili posisi dengan menganggapnya sebagai perpindahan dari suatu asal, vektor tidak memiliki posisi sendiri sehingga agak tidak biasa untuk memvisualisasikannya.