Quando si mappa la superficie di una sfera con le tessere, come è possibile gestire la distorsione polare?


24

È facile gestire il modo in cui le posizioni interagiscono su una griglia cartesiana pulita. È solo matematica alla vaniglia. E puoi in qualche modo ignorare la geometria della superficie della sfera per un po 'di esso se vuoi solo troncare i poli o qualcosa del genere. Ma continuo a trovare idee per giochi in cui lo spazio polare conta. ARG con codifica geografica e roguelike globali e cose del genere.

Voglio posizioni quadrate (ish?) - ragionevolmente rappresentabili da tessere quadrate della stessa dimensione in tutto il mondo, comunque.

Questo deve essere un problema risolto, giusto?

Quali sono le soluzioni?

ETA:

All'equatore - e supponendo che le posizioni dei tuoi quadrati siano ragionevolmente piccole, è abbastanza vicino al vero che puoi cavartela con un quadrato nelle file a nord ea sud della fila più equatoriale. E probabilmente potresti farcela semplicemente agitando a mano la differenza fino a circa 45 gradi. Ma alla fine, devi avere meno quadrati in una fila circonferenziale di palo. Se riduco la lunghezza della riga di uno e compenso i quadrati di 1/2 allora sono proprio come esagoni ed è relativamente facile fare la codifica per tenere traccia delle connessioni. Ma man mano che diventi un palo, diventa sempre più estremo.

Proiettare la superficie del mondo sulla superficie di un cubo è allettante. Ma ho pensato che ci fossero già soluzioni più eleganti già in uso.

Se facessi la cosa del cubo (non sezionandola ulteriormente attraverso la geodesia), ci sono pro e contro legati al posizionamento del palo al centro di una faccia o al vertice di tre lati?


1
Potresti approfondire cosa intendi per "quadrato (ish)"? Quanto è quadrato "quadrato (ish)"?
Steve H,

Risposte:



9

Ho sempre desiderato vedere un gioco in cui la mappa sferica usasse un normale poliedro di qualche tipo invece di giocare al mondo su un toro. Questa tecnica è chiamata mappa Dymaxion . (fonte: grunch.net )testo alternativo         

Consiglierei un Icosaedro . Posiziona il triangolo corrente in modo che sia allineato su un bordo di un quadrato. Quando il giocatore si sposta dal triangolo, tira su il triangolo successivo e mappalo di nuovo in modo identico. Le coordinate del giocatore verrebbero quindi rimappate nella nuova sezione. Quindi ogni sezione della tua mappa ha il suo sistema di coordinate. Inoltre dovrai disegnare lo sfondo per le 3 sezioni adiacenti e 9 semi adiacenti. Non penso che l'utente sarebbe in grado di determinare come è implementato se è ben fatto.

Ecco un esempio di come potrebbe funzionare.

Ovviamente dopo aver letto questo, probabilmente userete la classica mappa del torus e aspetterò di vedere un vero universo poliedrico.


Non userò un toro. Potrei usare un cilindro come fanno i giochi Civ. Ma, data la mancanza di soluzioni brillanti, mi sto impegnando seriamente verso un cubo. Un cubo è un poliedro! :)
clweeks

5

Se si crea una sfera utilizzando una base geodetica, l'area polare non viene trattata in modo diverso da qualsiasi altra regione in termini di spaziatura dei vertici che facilita l'uniformità della mappatura uv.

La maggior parte delle app di modellazione consente di creare una primitiva sfera utilizzando un design geodetico.


Il problema è che in questo caso otterrai diamanti anziché quadrati, e non è quello che voleva l'OP.
Kornel Kisielewicz,

A meno che non mi manchi qualcosa, ciò non mi dà regioni più facili da coordinare, mappare e collegare ... vero?
clweeks

La geodetica sembra la strada da percorrere per me, non riesco a pensare ad altre opzioni per una suddivisione regolare. Se hai davvero bisogno di regioni quadrate, sicuramente puoi generare una regione quadrata, centrata sul centro del triangolo, anche se si sovrappone ad altre tessere. Per sfere abbastanza grandi (e triangoli abbastanza piccoli), l'offset tra le regioni quadrate e le facce triangolari adiacenti sarà neglible. Ciò dovrebbe preservare il vantaggio di poter descrivere le interazioni locali (cioè lo stesso quadrato) nello stesso sistema di coordinate, no?
MrCranky,

Penso che ci siano alcune forme geodetiche che possono dare quadrati approssimativi se REALMENTE necessario.
speeder

Ottieni diamanti invece di quadrati, ma dovrebbe essere abbastanza facile fare una trasformazione per correggerlo. Nessun palo garantito.
ChrisE

5

Non è possibile "mappare" una sfera con quadrati (o rettangoli) e unirli tutti a vertici "comuni".

Tuttavia, sarebbe possibile generare la "visione locale" su richiesta? Lo spazio del problema non è realmente indicato nella domanda, ma se stavo lavorando su qualcosa in cui volevo una vista della città ma volevo essere in grado di girare il mondo, potrei temporaneamente mappare una griglia su una sezione "abbastanza piatta" di il mondo. L'origine della griglia sarebbe dovunque fosse il tuo centro locale e la normale in quel punto corrisponderebbe alla normale della superficie del pianeta.

Quindi, quando si esce dalla griglia, uno nuovo viene generato su richiesta.

Questo potrebbe funzionare o meno per l'OP, ma per alcuni potrebbe essere utile.


4

Prendi un cubo, con la distanza tra i vertici e il centro del cubo uguale al raggio desiderato. Hai una sfera composta da 6 quadrupli.

Ora in ogni passaggio, prendi ogni quadruplo, dividilo in 4 e sposta i nuovi 5 vertici (uno al centro e 4 sui bordi - attenzione, sono CONDIVISI) dal centro in modo che a loro piaccia il desiderato raggio.

No, questo metodo non è perfetto, ma almeno è una distribuzione più o meno equa sulla sfera.


3
La distorsione in realtà è piuttosto grave con questo: i quadratini al centro della faccia saranno vicini al quadrato e quelli vicino agli angoli saranno gravemente distorti.
JasonD,

@JasonD: Sarà ancora meglio di tutti i diamanti. Suggerisci una soluzione meno distorta se desideri effettuare il downgrade.
Kornel Kisielewicz,

Bene, puoi approssimare una sfera abbastanza bene con la divisione geodetica, ma non sono sicuro di vedere come questo mi aiuti.
clweeks

1

Con il dymaxion max hai esagoni disposti a triangoli su una superficie piana ma poiché la mappa non è davvero piatta sono pentagoni. Se si desidera consentire al giocatore di mantenere il proprio orientamento quando camminano su determinate parti, è necessario separare le mappe della posizione da come sono effettivamente memorizzate. Per cose come gli edifici potresti memorizzare una piccola mappa di vettori rettangolari e poi fare un duro lavoro disegnandoli con qualsiasi orientamento tu abbia bisogno.

Non avresti bisogno di far sempre sembrare l'interno come se ci fosse stato un recente terremoto perché penso che il giocatore medio non dovrebbe nemmeno battere gli occhi per entrare in una porta a nord-est ma entrare in uno schermo con la porta principale orientata a causa a sud e l'intero edificio su una griglia regolare.

Tuttavia, se hai intenzione di conservare solo edifici e siti importanti come quello, hai comunque fatto tutto il lavoro per un modello di pallone da calcio. Il risultato finale è che stai memorizzando il mondo come un modello non quadrato e poi lo stai forzando in una tale griglia ovunque si trovi il giocatore.

C'è un'altra alternativa però: se non dai loro un'indicazione così precisa della sfera, come se avessi appena dato loro una bussola di bassa precisione per dire loro quale delle quattro direzioni ortogonali era più vicina al Nord, allora potevi scappare semplicemente facendo rotazioni di 90 gradi in qualunque posizione si trovasse il giocatore. Dato il livello grafico presunto, non è come se dovessi preoccuparti di un edificio alto che oscura una porta. Fintanto che sapevano se si trovavano vicino ai poli o no, non dovevano preoccuparsi troppo del cambio della bussola su di essi, a meno che gli NPC lì intorno non dicessero loro di andare a nord-est o che cercassero effettivamente di andare a specifiche coordinate di latitudine e longitudine .


1

Stai ponendo una domanda che le persone che creano mappe chiedono da molto tempo :)

Sicuramente vai a leggere su Map Projectsions per ottenere alcune idee e idee che potrebbero aiutare. La sfida di rappresentare la superficie di una sfera su / con un piano 2D piatto è stata qualcosa a cui le persone hanno pensato per molto tempo.

La risposta breve è, no, non puoi farlo. Ecco perché quando guardi le mappe del mondo, alcune parti sono distorte e altre no. Di solito sono i poli perché la maggior parte delle mappe riguarda aree non polari.

Come hanno già detto altre risposte, la risposta è utilizzare una forma diversa (esagoni o triangoli per esempio) o generare dinamicamente la tua mappa al volo per l'attuale punto di vista dell'utente.

Le tessere quadrate sono abbastanza facili da gestire senza dubbio, ma non penso che creare una mappa esagonale di piastrellatura sia così difficile.

Ecco un vecchio articolo di GameDev.net che potresti trovare utile. Si tratta di fare piastrelle isometriche ed esagonali su una griglia.

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

La "mappa esadecimale della piastrellatura" di Google ti darà molti colpi, alcuni utili altri no.


1

Sto utilizzando diverse telecamere di rete PTZ di Sony, modello SNC-RX570N, allo scopo di tracciare oggetti in movimento nel cielo e triangolare per ottenere tracce 3D reali. Uno degli aspetti della configurazione iniziale è la definizione di "tour" non presidiati, per i quali devono essere scelti i waypoint. Esiste un numero limitato di tali waypoint programmabili e voglio coprire l'intero emisfero (la "sfera celeste") dall'orizzonte allo zenit, senza lasciare spazi vuoti.

Quindi mi sono posto la domanda "Qual è il numero minimo di waypoint di cui ho bisogno per una copertura completa (senza lacune)?". Ho scoperto che in realtà non riesco a capirlo del tutto.

La fotocamera ha una panoramica infinita (360 gradi) e un'inclinazione di 0-90 gradi, quindi teoricamente è possibile ottenere una copertura completa. Il display della fotocamera, destinato all'uso da computer, ha un formato rettangolare di 4: 3. Il FOV orizzontale approssimativo con zoom 1x è di 58 gradi.

Esistono due modi per rappresentare il problema, a seconda della proiezione che si sceglie: - rettilinea come Mercatore, per cui l'orizzonte è "l'equatore", e lo zenit è "il polo", dilatato su oltre 360 ​​gradi di pan. - polare, per cui l'orizzonte è la circonferenza del cerchio e lo zenit è il centro del cerchio.

Trovo polare il modo più semplice per affrontare il problema. Posso ritagliare il cerchio in fette di torta orizzontali di dimensioni FOV, e questo mi dice che ho bisogno di 7 waypoint attorno al cerchio con quel 58 ° H-FOV. Fin qui tutto bene. Il raggio interno è semplicemente l'inclinazione o V-FOV, che è 3/4 di 58 gradi. Fin qui tutto bene - ho coperto le parti più esterne del cerchio.

Ma diventa più complicato mentre ci avviciniamo allo zenit. Presumo che uno dei miei waypoint sia esattamente allo zenit. Come posso mappare il mio rettangolo di visualizzazione sulla regione intorno al centro del cerchio? Quella forma è un rettangolo, un'ellisse, un puntaspilli o cosa? Come posso riempire il punto centrale tra la bella copertura esterna ordinata e questa strana forma allo zenit? Flummoxed.

Noto che l'angolo solido di un emisfero è di 2 * PI steradiani e quello del mio FOV con zoom 1x è di 0,762 st, il che significa che ho bisogno di un minimo di 9 tassellazioni. Sospetto che la risposta sia superiore a 9.


Che ne dici di questo .. Il cerchio ha PI ^ 2 rad ^ 2 di area, e i rettangoli FOV sono area 0.75 rad ^ 2. In modo ingenuo abbiamo bisogno di 13,16 punti che devono essere arrotondati per una copertura completa a 14 punti. La domanda ora è: come devono essere posizionati?
Andrew

0

Se vuoi creare una griglia mondiale, ti suggerisco di dividere il pianeta in paesi o continenti e creare una griglia quadrata correttamente centrata su ciascuno. Lascia che l'oceano copra le cuciture.


In realtà, la mia domanda è "dal momento che ovviamente non posso fare quello che pensavi davvero stavo chiedendo, cosa potrei fare invece?"
clweeks

Molto bene, modificato quindi.
Zaratustra,

Sì, immagino di essere stato messo da parte dall'altra parte. Stavo pensando di implementare la Dymaxion Map di Fuller, ma lavorare con tessere triangolari mi è sembrato tanto un cluster F * quanto il problema della piastrellatura polare con cui sto iniziando. Quindi, con il tuo suggerimento, se qualcuno naviga dal Nord America all'Asia settentrionale e le coordinate contano (forse possono stabilire basi galleggianti o qualcosa del genere) come posso unire le giunture? Basta venire con una tabella di connessioni NA: A5 -> A: tipo Z475?
clweeks

Suppongo. Ma se riescono a farlo, darei loro una ricompensa bonus e li metterei fuori dalla griglia fino a quando non andranno in qualche luogo ragionevole.
Zaratustra,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.