Dlaczego ?
Ponieważ kamera reprezentuje widok projekcyjny.
Ale w przypadku kamery 3D (kamera wirtualna) kamera porusza się zamiast świata. Później szczegółowo wyjaśniłem tę odpowiedź.
Zrozumienie matematyczne
Widok rzutu porusza się po przestrzeni i zmienia jej orientację. Pierwszą rzeczą, na którą należy zwrócić uwagę, jest to, że pożądana projekcja na ekranie nie zmienia się wraz z kierunkiem widoku.
Z tego powodu przekształcamy inne rzeczy, aby uzyskać pożądaną projekcję.
Zrozumienie z http://opengl.org
Aby wyglądać na poruszoną kamerę, aplikacja OpenGL musi przesunąć scenę z odwrotnością transformacji kamery. w przypadku OpenGL nie ma kamery. Mówiąc dokładniej, kamera zawsze znajduje się we współrzędnej przestrzeni oka (0, 0, 0)
Zrozumienie From http://open.gl
Również chcesz udostępnić następujące linie z części Matryca widokowa http://open.gl/transformations
Aby zasymulować transformację kamery, trzeba transformować świat odwrotnością tej transformacji. Przykład: jeśli chcesz przesunąć kamerę w górę, musisz zamiast tego przesunąć świat w dół.
Zrozumienie z perspektywy
W prawdziwym świecie widzimy rzeczy w sposób nazywany „perspektywą”.
Perspektywa odnosi się do koncepcji, że obiekty znajdujące się dalej są mniejsze niż te, które są bliżej Ciebie. Perspektywa oznacza również, że jeśli siedzisz na środku prostej drogi, faktycznie widzisz granice drogi jako dwie zbieżne linie.
To jest perspektywa. Perspektywa ma kluczowe znaczenie w projektach 3D. Bez perspektywy świat 3D nie wygląda na prawdziwy.
Choć może się to wydawać naturalne i oczywiste, należy wziąć pod uwagę, że podczas tworzenia renderowania 3D na komputerze próbujesz symulować świat 3D na ekranie komputera, który jest powierzchnią 2D.
Wyobraź sobie, że za ekranem komputera znajduje się prawdziwa scena 3D, a ty oglądasz ją przez „szybę” ekranu komputera. Używając perspektywy, Twoim celem jest stworzenie kodu, który renderuje to, co jest „rzutowane” na tę „szklankę” ekranu, tak jakby za ekranem znajdował się prawdziwy świat 3D. Jedynym zastrzeżeniem jest to, że ten świat 3D nie jest prawdziwy… to tylko matematyczna symulacja świata 3D.
Tak więc, gdy używasz renderowania 3D do symulacji sceny w 3D, a następnie rzutujesz scenę 3D na powierzchnię 2D ekranu, proces ten nazywa się rzutowaniem perspektywicznym.
Zacznij od intuicyjnego wyobrażenia sobie, co chcesz osiągnąć. Jeśli obiekt znajduje się bliżej widza, obiekt musi wydawać się większy. Jeśli obiekt jest dalej, musi wydawać się mniejszy. Ponadto, jeśli obiekt odsuwa się od widza, w linii prostej, chcesz, aby zbiegał się w kierunku środka ekranu, gdy przesuwa się dalej w dal.
Tłumaczenie perspektywy na matematykę
Patrząc na ilustrację na poniższym rysunku, wyobraź sobie, że obiekt znajduje się w scenie 3D. W świecie 3D pozycję obiektu można opisać jako xW, yW, zW, odnosząc się do układu współrzędnych 3D z punktem początkowym w punkcie oka. Tam właśnie znajduje się obiekt, w scenie 3D poza ekranem.
Gdy widz ogląda ten obiekt na ekranie, obiekt 3D jest „rzutowany” na pozycję 2D opisaną jako xP i yP, która odnosi się do układu współrzędnych 2D ekranu (płaszczyzny projekcji).
Aby umieścić te wartości we wzorze matematycznym, użyję układu współrzędnych 3D dla współrzędnych świata, gdzie oś x wskazuje w prawo, y wskazuje w górę, a dodatnie punkty z wewnątrz ekranu. Pochodzenie 3D odnosi się do położenia oka widza. Tak więc szkło ekranu znajduje się w płaszczyźnie prostopadłej (pod kątem prostym) do osi Z, w pewnym punkcie Z, który nazywam ZProj.
Możesz obliczyć rzutowane pozycje xP i yP, dzieląc pozycje świata xW i yW przez zW, w następujący sposób:
xP = K1 * xW / zW yP
= K2 * yW / zW
K1 i K2 są stałymi wyprowadzonymi z czynników geometrycznych, takich jak współczynnik kształtu płaszczyzny projekcji (twoja rzutnia) i „pole widzenia” twojego oka, które uwzględnia stopień widzenia szerokokątnego.
Możesz zobaczyć, jak ta transformacja symuluje perspektywę. Punkty w pobliżu boków ekranu są przesuwane w kierunku środka wraz ze wzrostem odległości od oka (ZW). Jednocześnie punkty znajdujące się bliżej środka (0,0) są znacznie mniej zależne od odległości od oka i pozostają blisko środka.
Ten podział przez z jest znanym „podziałem perspektywicznym”.
Teraz rozważmy, że obiekt w scenie 3D jest zdefiniowany jako seria wierzchołków. Stosując tego rodzaju transformację do wszystkich wierzchołków geometrii, skutecznie upewniasz się, że obiekt skurczy się, gdy znajdzie się dalej od punktu oka.
Inne ważne przypadki
- W przypadku kamery 3D (wirtualnej kamery) kamera porusza się zamiast świata.
Aby lepiej zrozumieć kamery 3D, wyobraź sobie, że kręcisz film. Musisz ustawić scenę, którą chcesz sfotografować i potrzebujesz aparatu. Aby uzyskać materiał filmowy, będziesz przemierzać scenę aparatem, strzelając do obiektów w scenie pod różnymi kątami i punktami widzenia.
Ten sam proces filmowania zachodzi w przypadku kamery 3D. Potrzebujesz „wirtualnej” kamery, która może wędrować po utworzonej przez Ciebie „wirtualnej” scenie.
Dwa popularne style strzelania polegają na obserwowaniu świata oczami bohatera (znanym również jako kamera z perspektywy pierwszej osoby) lub kierowaniu kamery na postać i utrzymywaniu ich w polu widzenia (znanym jako kamera z perspektywy trzeciej osoby).
Jest to podstawowe założenie kamery 3D: wirtualna kamera, której można używać do wędrowania po scenie 3D i renderowania materiału z określonego punktu widzenia.
Zrozumienie przestrzeni świata i przestrzeni widokowej
Aby zakodować tego rodzaju zachowanie, wyrenderujesz zawartość świata 3D z punktu widzenia kamery, a nie tylko z punktu widzenia układu współrzędnych świata lub z innego stałego punktu widzenia.
Mówiąc ogólnie, scena 3D zawiera zestaw modeli 3D. Modele są zdefiniowane jako zestaw wierzchołków i trójkątów, odniesionych do ich własnego układu współrzędnych. Przestrzeń, w której modele są zdefiniowane, nazywana jest przestrzenią modelu (lub lokalną).
Po umieszczeniu obiektów modelu w scenie 3D przekształcisz wierzchołki tych modeli za pomocą macierzy „transformacji świata”. Każdy obiekt ma swoją własną matrycę świata, która określa, gdzie obiekt znajduje się na świecie i jak jest zorientowany.
Ten nowy system odniesienia nazywa się „przestrzenią świata” (lub przestrzenią globalną). Prostym sposobem zarządzania nim jest powiązanie macierzy transformacji świata z każdym obiektem.
Aby zaimplementować zachowanie kamery 3D, musisz wykonać dodatkowe kroki. Będziesz odnosić się do świata - nie do jego pochodzenia - ale do systemu odniesienia samej kamery 3D.
Dobra strategia polega na traktowaniu kamery jako rzeczywistego obiektu 3D w świecie 3D. Jak każdy inny obiekt 3D, używasz macierzy „transformacji świata”, aby ustawić kamerę w żądanej pozycji i orientacji w świecie 3D. Ta matryca transformacji świata kamery przekształca obiekt kamery z oryginalnego obrotu w kierunku do przodu (wzdłuż osi Z) w rzeczywistą pozycję świata (xc, yc, zc) i obrót świata.
Poniższy rysunek pokazuje relacje między układem współrzędnych Świat (x, y, z) a układem współrzędnych Widok (kamera) (x ', y', z ').