Autor Wątek: Konwersja między układami współrzędnych  (Przeczytany 3126 razy)

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Styczeń 25, 2006, 00:08:54
Bywa, że modele, geometria czy inne wczytywane informacje są w innym układzie współrzędnych, niż używany w naszej grze. Pojawia się konieczność ich konwertowania. Konwersja samych współrzędnych jest prosta - po prostu neguje się niektóre składowe z XYZ albo zamienia się je miejscami.

Gorzej, kiedy przychodzi konwertować również inne informacje geometryczne, jak kąty Eulera oraz (szczególnie) kwaterniony do opisywania obrotów. Czy ktoś zna jakieś metody, wzory albo źródła na to? Od dawna szukam i nikt nigdy nic o tym nie widział :)

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Styczeń 25, 2006, 00:12:34
Cytuj
Gorzej, kiedy przychodzi konwertować również inne informacje geometryczne, jak kąty Eulera oraz (szczególnie) kwaterniony do opisywania obrotów.
Możesz zkonwertować kąty/kwaterion na macierz przekształcenia 3x3, pozamieniać/zanegować wiersze albo kolumny i przekształcić spowrotem na kąty/kwaterion już w swoim układzie. Pozatym, nie jestem pewien, ale być może zamienianie składowych i negowanie ich zadziała także z kwaterionami (składowej 'w' nie ruszasz). :)

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Styczeń 25, 2006, 18:47:41
OK, sprawdzę to jak wrócę kiedyś do tego tematu.

Ale czy to znaczy, że kwaternion może być jednoznacznie zaprerezentowany w postaci macierzy obrotu (bez tego nieszczęsnego przypadku zdegenerowanego) i na odwrót? W jaki sposób taką macierz (czy jakąkolwiek macierz transformacji) przekształca się między układami?

Offline Xion

  • Redaktor
    • xion.log

# Styczeń 25, 2006, 18:53:34
Obrót wektora wokół prostej o zadany kąt jest w przestrzeni trójwymiarowej przekształceniem liniowym, więc jego macierz jest wyznaczona jednoznacznie.

Offline orzech

  • Użytkownik
    • homepage

# Styczeń 25, 2006, 18:58:58
Cytuj
Pozatym, nie jestem pewien, ale być może zamienianie składowych i negowanie ich zadziała także z kwaterionami (składowej 'w' nie ruszasz).
Zależy co chcesz osiągnąć. Dla przykładu - odwrócenie wektora v kwaternionu (w v) będzie miało taki sam efekt jak odwrócenie znaku samego w. W pierwszym przypadku zmieniamy zwrot wektora osi obrotu, przez co zmienia się również kierunek, który uważamy za 'dodatni'. W drugim przypadku zmieniamy po prostu kąt obrotu na przeciwny (bo w to cos ( x/2 ) ).

Ale czy to znaczy, że kwaternion może być jednoznacznie zaprerezentowany w postaci macierzy obrotu (bez tego nieszczęsnego przypadku zdegenerowanego) i na odwrót? W jaki sposób taką macierz (czy jakąkolwiek macierz transformacji) przekształca się między układami?
Każdy kwaternion można sprowadzić do macierzy obrotu. Tak się generalnie postępuje, gdyż w praktyce kwaternionów używa się tylko do przechowywania obrotów i ich modyfikowania. W drugą stronę też jest to możliwe.

Jak to wygląda w kodzie, możesz zobaczyć tutaj http://www.flipcode.com/documents/matrfaq.html.

Pozdrawiam!