Jak mapując powierzchnię kuli za pomocą płytek, jak poradzić sobie z zniekształceniem biegunowym?


24

Łatwo jest poradzić sobie ze sposobem interakcji lokalizacji na czystej siatce kartezjańskiej. To tylko matematyka waniliowa. I możesz zignorować geometrię powierzchni kuli dla jej garści, jeśli chcesz po prostu obciąć bieguny lub coś w tym rodzaju. Ale ciągle wymyślam pomysły na gry, w których liczy się przestrzeń polarna. Geo-kodowane ARG i globalne roguelike i tak dalej.

Chcę kwadratowych (ish?) Lokalizacji - zresztą reprezentatywnych dla kwadratowych kafelków tego samego rozmiaru na całym świecie.

To musi być rozwiązany problem, prawda?

Jakie są rozwiązania?

ETA:

Na równiku - i zakładając, że twoje lokalizacje kwadratowe są stosunkowo małe, jest wystarczająco blisko prawdy, że możesz uciec, mając jeden kwadrat w rzędach na północ i południe od najbardziej równikowego rzędu. I prawdopodobnie można to zrobić, machając ręką do około 45 stopni. Ale ostatecznie musisz mieć mniej kwadratów w obwodowym rzędzie totemu. Jeśli zmniejszę długość wiersza o jeden i przesunę kwadraty o 1/2, wówczas będą one jak heksy i stosunkowo łatwo jest wykonać kodowanie, aby śledzić połączenia. Ale kiedy dostajesz totem, staje się coraz bardziej ekstremalny.

Rzucanie powierzchni świata na powierzchnię sześcianu jest kuszące. Ale pomyślałem, że muszą być w użyciu bardziej eleganckie rozwiązania.

Gdybym zrobił sześcian (nie analizując go dalej przez geodezję) Czy są jakieś plusy i minusy związane z umieszczeniem bieguna na środku twarzy lub na wierzchołku z trzech stron?


1
Czy mógłbyś wyjaśnić, co rozumiesz przez „kwadrat (ish)”? Jak kwadratowy jest „kwadrat (ish)”?
Steve H

Odpowiedzi:



9

Zawsze chciałem zobaczyć grę, w której mapa sferyczna używa jakiegoś zwykłego wielościanu zamiast grać w świat torusem. Ta technika nazywa się mapą Dymaxion . (źródło: grunch.net )alternatywny tekst         

Chciałbym polecić dwudziestościan . Umieść bieżący trójkąt tak, aby był wyrównany na jednej krawędzi kwadratu. Kiedy gracz zejdzie z trójkąta, pociągnij następny trójkąt i ponownie odwzoruj go identycznie. Współrzędne gracza zostaną wówczas ponownie przypisane do nowej sekcji. Tak więc każda sekcja mapy ma własny układ współrzędnych. Musisz także narysować tło dla 3 sąsiednich i 9 pół sąsiednich sekcji. Nie sądzę, aby użytkownik był w stanie określić, w jaki sposób zostanie zaimplementowany, jeśli będzie dobrze zrobiony.

Oto przykład, jak to może działać.

Oczywiście po przeczytaniu tego prawdopodobnie użyjesz klasycznej mapy torusów i będę czekał, aby zobaczyć prawdziwy wielościenny wszechświat.


Nie użyję torusa. Przydałby mi się cylinder, jak w grach Civ. Ale biorąc pod uwagę brak genialnych rozwiązań, poważnie pochylam się w kierunku sześcianu. Sześcian to wielościan! :)
clweeks

5

Jeśli tworzysz sferę przy użyciu podstawy geodezyjnej, obszar biegunowy jest traktowany nie inaczej niż jakikolwiek inny region pod względem odstępów między wierzchołkami, co ułatwia jednolite odwzorowanie UV.

Większość aplikacji do modelowania pozwala tworzyć prymitywne sfery za pomocą projektu geodezyjnego.


Problem polega na tym, że w tym przypadku dostaniesz diamenty zamiast kwadratów, a OP tego nie chciał.
Kornel Kisielewicz

Chyba że czegoś mi brakuje, nie daje mi to regionów, które łatwiej koordynować, mapować i łączyć ... prawda?
clweeks

Geodezja wydaje się drogą do mnie, nie mogę wymyślić żadnych innych opcji zwykłego podziału. Jeśli naprawdę potrzebujesz kwadratowych regionów, z pewnością możesz wygenerować kwadratowy region, wyśrodkowany na środku trójkąta, nawet jeśli zachodzi on na inne płytki. W przypadku wystarczająco dużych kulek (i wystarczająco małych trójkątów) przesunięcie między obszarami kwadratowymi a sąsiadującymi powierzchniami trójkątów będzie pomijalne. To powinno zachować tę zaletę, że jest w stanie opisać lokalne (tj. Ten sam kwadrat) interakcje w tym samym układzie współrzędnych, prawda?
MrCranky

Myślę, że istnieją pewne kształty geodezyjne, które mogą dać przybliżone kwadraty, jeśli NAPRAWDĘ potrzebne.
ścigacz

Dostajesz diamenty zamiast kwadratów, ale powinno być dość łatwo dokonać transformacji, aby to poprawić. Nie ma gwarancji na słupy.
ChrisE

5

Nie ma możliwości „mapowania” kuli za pomocą kwadratów (lub prostokątów) i połączenia ich w „wspólnych” wierzchołkach.

Czy byłoby jednak możliwe wygenerowanie „lokalnego widoku” na żądanie? Problematyka nie jest tak naprawdę określona w pytaniu, ale gdybym pracował nad czymś, co chciałem zobaczyć miasto, ale chciałbym móc obracać świat, mógłbym tymczasowo po prostu odwzorować siatkę na „wystarczająco płaską” sekcję świat. Początek siatki byłby wszędzie tam, gdzie był twój lokalny środek, a normalna w tym punkcie odpowiada normalnej powierzchni planety.

Następnie, gdy ktoś schodzi z sieci, na żądanie generowana jest nowa.

To może, ale nie musi, działać dla PO, ale dla niektórych może być przydatne.


4

Weź sześcian o odległości między wierzchołkami i środkiem sześcianu równej pożądanemu promieniu. Masz kulę zbudowaną z 6 quadów.

Teraz na każdym kroku, weź każdy quad, podziel go na 4 i przesuń nowe 5 wierzchołków (jeden na środku i 4 na krawędziach - uwaga, są UDOSTĘPNIONE) od środka, aby podobały się pożądanym promień.

Nie, ta metoda nie jest doskonała, ale przynajmniej jest to mniej więcej równy rozkład w kuli.


3
Zniekształcenie jest w rzeczywistości dość poważne - kwadraty na środku twarzy będą prawie kwadratowe, a te w rogach będą mocno zniekształcone.
JasonD

@JasonD: Będzie jeszcze lepiej niż wszystkie diamenty. Zaproponuj rozwiązanie, które jest mniej zniekształcone, jeśli chcesz przegłosować.
Kornel Kisielewicz

Cóż, całkiem dobrze można przybliżać kulę za pomocą podziału geodezyjnego, ale nie jestem pewien, czy widzę, jak to mi pomaga.
clweeks

1

Z dymaxion max masz sześciokąty ułożone w trójkąty na płaskiej powierzchni, ale ponieważ mapa nie jest tak płaska, są pięciokątami. Jeśli chcesz pozwolić graczowi zachować orientację podczas przechodzenia przez określone części, musisz oddzielić mapy lokalizacji od tego, jak są faktycznie przechowywane. W przypadku obiektów takich jak budynki możesz zapisać małą mapę wektorów prostokątnych, a następnie wykonać ciężką pracę, rysując je w dowolnej potrzebnej orientacji.

Nie musisz zawsze sprawiać, by wnętrze wyglądało tak, jakby miało miejsce niedawne trzęsienie ziemi, ponieważ myślę, że przeciętny gracz nie powinien nawet mrużyć oczu przed wejściem na północno-wschodnie drzwi, ale wejściem na ekran z ukierunkowanymi frontowymi drzwiami południe i cały budynek na regularnej siatce.

Chociaż jeśli zamierzasz po prostu przechowywać budynki i ważne takie witryny, to i tak wykonałeś całą pracę nad wzorem piłki nożnej. Efektem końcowym jest to, że przechowujesz świat jako jakiś niekwadratowy wzór, a następnie wciskasz go w taką siatkę, gdziekolwiek jest gracz.

Jest jeszcze jedna alternatywa - jeśli nie podasz im tak dokładnego wskazania kuli, tak jakbyś po prostu dał im kompas o niskiej precyzji, aby powiedzieć im, który z czterech ortogonalnych kierunków jest najbliżej północy, możesz uciec po prostu wykonując obrót o 90 stopni dla dowolnej lokalizacji, do której poszedł gracz. Biorąc pod uwagę założony poziom grafiki, nie jest tak, jakbyś musiał się martwić o wysoki budynek zasłaniający niektóre drzwi. Tak długo, jak wiedzą, czy znajdują się w pobliżu biegunów, czy nie, nie powinni się denerwować, że kompas się na nich zmienia, chyba że otaczający ich NPC polecili im udać się na północny wschód lub próbować faktycznie dotrzeć do określonych współrzędnych szerokości i długości geograficznej .


1

Pytasz pytanie, że ludzie, którzy tworzą mapy zostały z prośbą o długim czasie :)

Zdecydowanie poczytaj o Map Projekcjach, aby uzyskać spostrzeżenia i pomysły, które mogą pomóc. Wyzwanie polegające na reprezentowaniu powierzchni kuli na płaskiej płaszczyźnie 2D było czymś, o czym ludzie myślą od dawna.

Krótka odpowiedź brzmi: nie, nie możesz tego zrobić. Dlatego gdy patrzysz na mapy świata, niektóre części są zniekształcone, a niektóre nie. Zwykle są to bieguny, ponieważ większość map dotyczy obszarów niepolarnych.

Jak już powiedzieli inne odpowiedzi, odpowiedzią jest albo użyć innego kształtu (na przykład sześciokąty lub trójkąty), albo dynamicznie wygenerować mapę w locie dla bieżącego punktu widzenia użytkownika.

Kwadratowymi kafelkami można łatwo zarządzać bez żadnych wątpliwości, ale nie sądzę, aby tworzenie mapy heksadecymalnej było tak trudne.

Oto starszy artykuł z GameDev.net, który może Ci się przydać. Chodzi o wykonywanie płytek izometrycznych i sześciokątnych na siatce.

http://www.gamedev.net/reference/articles/article747.asp

Googling „kafelkowa mapa heksadecymalna” da ci wiele trafień, niektóre przydatne, a niektóre nie.


1

Używam kilku kamer sieciowych PTZ Sony, model SNC-RX570N, w celu śledzenia ruchomych obiektów na niebie i triangulacji w celu uzyskania prawdziwych ścieżek 3D. Jednym z aspektów wstępnej konfiguracji jest zdefiniowanie nienadzorowanych „tras”, dla których należy wybrać punkty trasy. Istnieje ograniczona liczba takich programowalnych punktów orientacyjnych i chcę objąć całą półkulę („sferę niebieską”) od horyzontu do zenitu, nie pozostawiając żadnych przerw.

Zadałem sobie więc pytanie „Jaka jest minimalna liczba punktów potrzebnych do pełnego pokrycia (bez przerw)?”. Odkryłem, że tak naprawdę nie mogę tego w pełni zrozumieć.

Aparat ma nieskończoną panoramę (360 stopni) i pochylenie 0-90 stopni, więc teoretycznie możliwe jest uzyskanie pełnego zasięgu. Wyświetlacz aparatu, przeznaczony do użytku komputerowego, ma prostokątny format 4: 3. Szorstkie poziome pole widzenia przy 1x powiększeniu wynosi 58 °.

Istnieją dwa sposoby przedstawienia problemu, w zależności od tego, który rzut wybierzesz: - prostoliniowy jak Mercator, przy czym horyzont jest „równikiem”, a zenit jest „biegunem”, rozszerzonym o ponad 360 stopni obrotu. - biegunowy, przy czym horyzont jest obwodem koła, a zenit jest jego środkiem.

Uważam polar za najłatwiejszy sposób na rozwiązanie tego problemu. Mogę wykroić koło na poziome plastry ciasta o wielkości FOV, a to mówi mi, że potrzebuję 7 punktów na całym okręgu z tym 58 ° H FOV. Jak na razie dobrze. Promień wewnętrzny to po prostu nachylenie lub V-FOV, czyli 3/4 z 58 stopni. Jak dotąd tak dobrze - pokryłem najbardziej zewnętrzne części koła.

Ale staje się trudniejsze, gdy zbliżamy się do zenitu. Zakładam, że jeden z moich punktów orientacyjnych znajduje się dokładnie w zenicie. Jak odwzorować prostokąt widoku na region wokół środka koła? Czy ten kształt to prostokąt, elipsa, poduszeczka na szpilki, czy co? Jak wypełnić środkowy bit między ładnym, schludnym pokryciem zewnętrznym a tym dziwnym kształtem w zenicie? Flummoxed.

Zauważam, że kąt bryły półkuli wynosi 2 * steradiany PI, a kąt mojego pola widzenia przy powiększeniu 1x wynosi 0,762 st, co oznacza, że ​​potrzebuję minimum 9 teselacji. Podejrzewam, że odpowiedź jest wyższa niż 9.


Co powiesz na to .. Okrąg ma obszar PI ^ 2 rad ^ 2, a prostokąty FOV mają powierzchnię 0,75 rad ^ 2. Naiwnie potrzebujemy 13,16 punktów, które należy zaokrąglić w górę, aby uzyskać pełne pokrycie do 14 punktów. Pytanie brzmi: jak je umieścić?
Andrew

0

Jeśli chcesz stworzyć ogólnoświatową siatkę, proponuję podzielić planetę na kraje lub kontynenty i ustawić kwadratową siatkę odpowiednio na środku. Niech ocean zakryje szwy.


Właściwie moje pytanie brzmi: „skoro oczywiście nie mogę zrobić tego, o czym myślałeś, że tak naprawdę pytam, co mógłbym zamiast tego zrobić?”
clweeks

Bardzo dobrze, zredagowane wtedy.
zaratustra

Tak, chyba druga strona mnie śledziła. Zastanawiałem się nad implementacją mapy Dymaxion Fullera, ale praca z trójkątnymi płytkami wydawała się równie dużym skupieniem F *, jak problem z układaniem płytek biegunowych, od którego zaczynam. Tak więc, zgodnie z twoją sugestią, jeśli ktoś płynie z Ameryki Północnej do północnej Azji, a współrzędne mają znaczenie (być może mogą ustalić pływające podstawy lub coś takiego), jak połączyć szwy? Po prostu wymyślisz tabelę połączeń typu NA: A5 -> A: Z475?
clweeks

Zgaduję. Chociaż jeśli im się to uda, po prostu dam im dodatkową nagrodę i odłożę je z planszy, dopóki nie pójdą gdzieś rozsądnie.
zaratustra
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.