Współrzędne współrzędnych X, Y, Z?


12

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?


Układy współrzędnych lewej / prawej ręki. DirectX jest lewą ręką, domyślnie w OpenGL jest prawą ręką.
Jonathan Connell,

Odpowiedzi:


19

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.


Właściwie podoba mi się pozostałe dwie odpowiedzi, ale ponieważ jest to odpowiedź zaakceptowana, uwaga, aby zaznaczyć, że Y jest pionowa, a Z jest na ekranie, jest sposobem, w jaki większość sprzętowych interfejsów API 3D jest skonfigurowana do pracy (DirectX i OpenGL) . Jeśli chcesz mieć własny system, pamiętaj o tym, ponieważ może być wymagane tłumaczenie. (Coś użytego niewłaściwie, ale konsekwentnie często może działać zgodnie z życzeniem, stąd „może być” :))
James

1
Technicznie OpenGL ma domyślnie Z wychodzący z ekranu, jeśli uwzględnisz kierunek, więc chociaż zarówno on, jak i DirectX mają Z równolegle do kierunku oglądania, nadal są niekompatybilne! Podczas pracy z 3D musisz być kompetentny w przechodzeniu od jednego układu współrzędnych do drugiego za pomocą rotacji, tłumaczeń i skalowania - w rzeczywistości tak właśnie kończą się modele na świecie - więc nie ma większego sensu przywiązywanie się do jakiegokolwiek pojęcia standard.
Kylotan,

Wystarczy wskazać wtedy, gdy mamy do czynienia z milionami trójkątów, być może im mniej musisz zrobić, aby walczyć z układem koordynacyjnym sprzętu, może tym lepiej;) Koniec dnia, tworzenie gier jest fajne pomimo poziomów stresu. Rób, co chcesz: )
James

Pojęcie „Z” jako wchodzenie / wychodzenie z ekranu lub bycie na wysokości jest nieco mylące. Może być po prostu łatwiej zrozumieć koncepcje transformacji. Przekazujemy współrzędne wierzchołków 3D / 4D, które ostatecznie są przekształcane w przestrzeń okna 2D, ale z wartością głębokości. Pomysł, że interfejs API nieodłącznie odwzorowuje współrzędne 3D X, Y lub Z na „głębokość”, nie jest naprawdę poprawny - możesz wymyślić dowolną transformację, która zmienia znaczenie współrzędnych. Pod koniec tej transformacji nadal będziesz otrzymywać współrzędne przestrzeni okien 2D i wartość głębokości.
PatrickB

1
Nie jestem jednak całkowicie pewien, gdzie nie zgadzamy się z resztą: oczywiście możesz użyć dowolnej przestrzeni współrzędnych, o ile możesz rzutować na x, y, głębokość na końcu, ale to pytanie dotyczy przede wszystkim tego, dlaczego istnieją pewne konwencje dla układów współrzędnych, a konwencje są nieuchronnie powiązane z rzeczywistymi koncepcjami.
Kylotan

6

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.


4

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.


1

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.

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.