Jestem całkiem nowy w tworzeniu wszelkiego rodzaju gier 3D, niemniej jednak. Czytając samouczki i przykłady, okazuje się, że współrzędne X / Y / Z wydają się nieco odwrócone niż moje pierwsze przypuszczenie.
Wyobrażałem sobie, że gdyby ktoś chodził po polu, jego pozycja X / Y zmieniałaby się, a jeśli miałby skakać, chodzić w górę lub w dół wzgórza, wówczas zmieniałaby się ich pozycja Z. Moje założenia wydają się błędne, ponieważ chodzenie po polu wydaje się zmieniać X / Z, a skakanie lub wchodzenie / schodzenie ze wzgórza zmienia Y.
1) Czy moje obserwacje są prawidłowe? 3D jest dla mnie nowością i być może nie myślę właściwie o rzeczach.
2) Jaka jest logika ruchu poziomego jako X / Z i ruchu pionowego jako Y?
3) Czy byłoby tak źle, że użyłem X / Y jako ruchu poziomego i Z jako ruchu pionowego w ramach XNA?
źródło
Odpowiedzi:
Twoje założenia nie są błędne: każdy silnik traktuje te współrzędne inaczej. Ogólnie mówiąc, X prawie zawsze jest osią wschód-zachód, ale to, czy Y lub Z jest osią wysokości, może się różnić. Jak rozumiem, Quake 3, Source Engine i silnik Torque mają Z jak wyżej. Podobnie narzędzie do modelowania 3DS Max. To nie jest rzadkie.
Sensowne jest posiadanie układu współrzędnych uporządkowanego z grubsza w malejącej kolejności ważności, aby spłaszczenie reprezentacji do mniejszej liczby wymiarów było łatwiejsze do zrozumienia. Na przykład, jeśli gra jest ustawiona na mapie wysokości 2D, sensowne jest, aby Z było „podniesione”, ponieważ wtedy współrzędne X i Y na mapie świata 3D bezpośrednio do współrzędnych X i Y na mapie wysokości. Z drugiej strony, jeśli myślisz przede wszystkim o renderowaniu (a robi to wielu twórców silnika gry), jesteś przyzwyczajony do X i Y jako współrzędnych ekranu, więc dodanie trzeciej osi naturalnie wchodzi lub wychodzi z ekranu.
Używaj tego, co jest dla ciebie najłatwiejsze, ale pamiętaj, że każdy wybór jest arbitralny i że może być konieczna konwersja między nimi i użycie wielu układów współrzędnych w jednym programie.
źródło
Wyobraź sobie, że patrząc na kawałek papieru wyciągnięty przed tobą z wykresem, osie są zwykle oznaczone X na dole i Y na górze; pozostawia to Z jako zewnętrzną oś wzdłuż ziemi.
To tylko konwencja, ale jest często używana w grafice, w której myślimy o Z jako o głębi sceny.
W innych dziedzinach, takich jak CAD, Twoja wersja byłaby bardziej popularna.
źródło
Chodzi o to, że osie xiy pozostają takie same - y jest „w górę” na ekranie, a x jest w poprzek.
z - trzeci wymiar, rzutuje z powrotem na ekran (ignorując tutaj kwestie praktyczności). W 3 wymiarach robi się to nieco dziwne, ale dla pozycjonowania rzeczy w przestrzeni ekranu ma to większy sens.
3) Możesz, jeśli chcesz, ale byłoby to bolesne i niezgrabne. Radziłbym tylko przyzwyczaić się do Z-projektów-do / poza monitorem.
źródło
1) Tak, twoje obserwacje są prawidłowe.
2) Standardowy globalny układ współrzędnych XYZ ma sens, gdy myślisz w kategoriach strzelanki z perspektywy pierwszej osoby, gdy patrzysz oczami postaci na scenie z pustą matrycą transformacji (tożsamości). Podobnie jak w przypadku rysowania układu współrzędnych na kartce papieru, X wskazuje na prawo, a Y na górę. Zgodnie z zasadą prawej ręki (x-> kciuk, y-> palec wskazujący, z-> palec środkowy), Z wskazuje na ciebie.
3) Nie byłoby źle, ale byłoby to odejście od standardów. W tej chwili mogę wymyślić trzy problemy: (a) Powiedzmy, że pewnego dnia chcesz użyć biblioteki fizyki, która korzysta ze standardowej ramki współrzędnych. Jeśli nie przestrzegałeś tego standardu, teraz musisz pomyśleć o transformacji, która zabiera cię ze świata do świata fizyki. Może być denerwujące, gdy chcesz naprawić błąd. (b) Jeśli chcesz udostępnić komuś kod lub przyprowadzić kogoś do pomocy w rozwoju, musi on przyzwyczaić się do Twojej konwencji. (c) Używając standardowych modeli 3D, zawsze musisz mieć nad nimi transformację, aby nie patrzeć w bok.
Teraz, aby dodać do pytania 2, bardzo dobrze jest myśleć o X, Y i Z jako nie tylko trzech literach, ale jako o prawej, do góry i do tyłu. Każda postać na scenie ma dołączony do nich lokalny układ współrzędnych, aw ich lokalnych ramkach współrzędnych X ma zawsze rację, Y jest w górze, a Z jest do tyłu. Gdy już to zrobisz, możesz teraz zrozumieć wektory, które drukujesz, lub napisać algorytmy w sposób, który ma sens. Powiedzmy, że masz dwie postacie A i B i chcesz coś zrobić, jeśli jedna z nich jest skierowana w stronę drugiej. Możesz po prostu znaleźć lokalizację B w ramce współrzędnej A (Ta ^ -1 * p_b), spójrz na otrzymany wektor i sprawdź, czy Z (do tyłu) jest ujemne, a X (po prawej) i Y (w górę) są małe, ponieważ ten wektor mówi ci, ile wynosi wstecz, prawo i góra B w stosunku do A.
źródło