Jaka jest poprawna kolejność mnożenia macierzy skalowania, rotacji i translacji dla właściwej matrycy świata?


62

Przyjmij DirectX za platformę, jeśli jest to ważne. (Jestem pewien, że tak nie jest)

Zakładając, że mam odpowiednią macierz skali, rotacji i translacji, w jakiej kolejności je pomnożę, aby uzyskać odpowiednią matrycę świata i dlaczego?

Przez „właściwe” mam na myśli „mógłbym wrzucić je bezpośrednio do DirectX i uzyskać najczęściej używaną ramkę 3D”.


6
Oto wyjaśnienie „obracaj, a następnie tłumacz” (wirowanie) vs „tłumacz, a następnie obracaj” (orbitowanie)
bobobobo

link jest dobry, ale z małym błędem. powinien się toczyć, a nie wirować, ponieważ kula ma tendencję do oddalania się od swojej pozycji (pozostawania na osi) przez translację.
zaatakowany

Odpowiedzi:


77

Zwykle jest to skala, potem rotacja i na koniec tłumaczenie. Z oznaczeniem macierzy (tj. T dla macierzy translacji, R dla macierzy rotacji i S dla macierzy skalowania), która byłaby:

T * R * S

Jeśli jednak chcesz obrócić obiekt wokół określonego punktu, to jest to skala, translacja punktów, obrót i wreszcie translacja obiektu.

Dlaczego: Najpierw chcesz skalować obiekt, aby tłumaczenia działały poprawnie. Następnie obracasz osie, aby tłumaczenie odbywało się na skorygowanych osiach. Na koniec tłumaczysz obiekt na jego pozycję.

W OpenGL możesz użyć gluLookAt, aby uzyskać pełną transformację kamery w jednym wywołaniu. Prawdopodobnie istnieje podobne wywołanie dla DirectX.


11
I pamiętaj, że jeśli chcesz przekształcić wokół środka, najpierw musisz przetłumaczyć, aby przesunąć środek na początek, a następnie zrób tak, jak powiedział użytkownik 392858, a następnie przetłumacz go ponownie z powrotem o tę samą wartość. Zasadniczo jest to jednak konieczne tylko w 2D, gdzie masz trochę duszka, którego górny lewy jest u początku.
Inżynier

Wspaniały. :) Teraz muszę tylko dowiedzieć się, dlaczego mój model odwraca się teraz w widoku poziomym i potrzebuje iloczynu punktowego na kierunkowym świetle odwróconego w widoku pionowym. Kiedyś tak się nie
działo

Wystarczy zauważyć, że nienawidzę źle umieszczonych znaków ujemnych. W każdym razie dzięki i możesz rozważyć to pytanie. :)
Narf the Mouse

Nie ma problemu, zawsze chętnie pomogę.
Raphael R.

2
@Matthias O ile mi wiadomo, zależy to od sposobu pomnożenia przez wektor, który chcesz przekształcić. Jeśli pomnożysz M * v, to tak, odpowiedź ma odwrotną kolejność.
bialpio

-4

rotacja translacji i skalowanie to sekwencja wykonywania operacji


-5

Wierzę, że to rotacja tłumaczeń i dialacja


2
To nie dostarcza więcej wyjaśnień niż istniejące odpowiedzi.
DMGregory
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.