2012-11-17 27 views

Odpowiedz

4

Powód jest taki, ponieważ mnożenie macierzy musi być wykonane w określonej kolejności, aby uzyskać prawidłowy wynik (jak być może już wiesz).

Sekwencja tłumaczeń/obrotów/skal odbywa się w kolejności odwrotnej podczas ich wpisywania.

Więc jeśli coś takiego:

Camera.rotate(15, 0, 0); 
Camera.scale(.5f, .5f, .5f); 
Camera.translate(70, 70, 70); 

Ty pierwszy tłumaczenia 70,70,70 następnie skalowanie o 50% we wszystkich kierunkach, a następnie obraca się o 15 stopni wokół osi X.

Więc Matrix ma przed i po tłumaczeniu (dobrze, przed i po wszystkim), ponieważ może chcesz go najpierw obrócić o 15 stopni, a następnie przetłumaczyć, a następnie przeskalować.

Dzięki temu odpowiedzi na pre i post tłumaczą się. Teraz powód, dla którego kamera ma prosty obrót i tłumaczenie jest dla ludzi, którzy wiedzą jak to działa (jak ja!), Więc nigdy nie używam Matrixa lub Camera w tej sprawie, ponieważ mogę po prostu wykonywać swoje rotacje i tłumaczenia bezpośrednio na płótnie. Możesz też tak długo, jak wiesz, że tłumaczenia, skale i obracanie są wykonywane w odwrotnej kolejności.

Ponadto, jeśli wiesz, co ci powiedziałem, daje ci to więcej mocy. Możesz wykonać sekwencję 10 macierzy bez otaczania ich w wielu obiektach Matrix dla każdego z nich (na przykład, chcesz wykonać ruch wahadłowy, który odchyla się na zewnątrz ORAZ obraca się wokół środka, aby symulować siłę odśrodkową). Musiałoby to zostać wykonane z wieloma obrotami i tłumaczeniami (otoczonymi przez wiele obiektów Matrix przekazywanych sobie nawzajem), ale jeśli wiesz, jak działają tłumaczenia, możesz po prostu zrobić serię .translate(), .rotate(), i .scale().

Ta informacja jest szczególnie przydatna, jeśli kiedykolwiek tworzysz grafikę 3D, ponieważ wtedy te matryce wywołują u ludzi bóle głowy.

Mam nadzieję, że to pomoże!

+1

Czy prowadzisz mnie do dokumentacji, że znalazłeś ten fakt? – hasanghaforian

+0

Czy możesz podać link, który wspiera twoją odpowiedź? –

+0

O mój. Minęło dużo czasu, odkąd to napisałem, a co najmniej brzmi arogancko. Dokumentację można znaleźć na wikipedii, a konkretnie: http://pl.wikipedia.org/wiki/Transformacja_matrix#Composing_and_inverting_transformations "Zauważ, że mnożenie odbywa się w przeciwnej kolejności od zdania angielskiego: matryca" A przez B "jest BA, nie AB." –

1

Wynik byłby wizualnie to samo, jeśli nie to znaczy dotknąć płótno ale obracać kamerę 90 degs lub trzymać aparat nadal jednak obrócić płótno to patrzy na od -90 degs.

+1

Czy znasz jakieś dobre dokumenty lub samouczki w 3D na temat 'Android.Canvas'? Wydaje się' Magic' i 'surd'. – hasanghaforian