Ao mapear a superfície de uma esfera com ladrilhos, como você pode lidar com a distorção polar?


24

É fácil lidar com a maneira como os locais interagem em uma grade cartesiana limpa. É apenas matemática de baunilha. E você pode meio que ignorar a geometria da superfície da esfera por um monte, se quiser apenas truncar os pólos ou algo assim. Mas continuo tendo idéias para jogos em que o espaço polar é importante. ARGs com código geográfico e roguelikes globais e outras coisas.

Quero locais quadrados (ish?) - razoavelmente representáveis ​​por blocos quadrados do mesmo tamanho em todo o mundo.

Isso tem que ser um problema resolvido, certo?

Quais são as soluções?

ETA:

No equador - e assumindo que as localizações dos quadrados são razoavelmente pequenas, é quase verdade que você pode ter um quadrado nas linhas norte e sul da linha mais equatorial. E você provavelmente poderia se safar disso apenas acenando com a mão a diferença de até 45 graus ou mais. Mas, eventualmente, você precisa ter menos quadrados em uma linha circunferencial da ala de pólos. Se eu reduzir o comprimento da linha em um e compensar os quadrados em 1/2, eles serão como hexágonos e é relativamente fácil fazer a codificação para acompanhar as conexões. Mas, à medida que você avança, fica cada vez mais extremo.

Projetar a superfície do mundo na superfície de um cubo é tentador. Mas achei que já deveria haver soluções mais elegantes em uso.

Se eu fiz a coisa do cubo (sem dissecá-la ainda mais por meio da geodésia), existem prós e contras relacionados à colocação do poste no centro de uma face ou no vértice de três lados?


1
Você poderia elaborar o que você quer dizer com "quadrado (ish)"? Quão quadrado é "quadrado (ish)"?
Steve H

Respostas:



9

Eu sempre quis ver um jogo em que o mapa esférico usasse algum tipo de poliedro comum, em vez de tocar o mundo em um toro. Essa técnica é chamada de mapa Dymaxion . (fonte: grunch.net )texto alternativo         

Eu recomendaria um icosaedro . Coloque o triângulo atual para que fique alinhado em uma aresta de um quadrado. Quando o jogador sair do triângulo, puxe o próximo triângulo e mapeie-o de forma idêntica. As coordenadas do jogador serão remapeadas para a nova seção. Portanto, cada seção do seu mapa tem seu próprio sistema de coordenadas. Você também precisará desenhar o plano de fundo para as 3 seções adjacentes e as 9 semi-adjacentes. Não acho que o usuário possa determinar como é implementado se for bem-feito.

Aqui está um exemplo de como isso pode funcionar.

É claro que depois de ler isso, você provavelmente usará o mapa do toro clássico e eu estarei esperando para ver um verdadeiro universo poliédrico.


Eu não vou usar um toro. Eu poderia usar um cilindro como os jogos Civ. Mas, dada a falta de soluções brilhantes, estou seriamente inclinado a um cubo. Um cubo é um poliedro! :)
clweeks

5

Se você criar uma esfera usando uma base geodésica, a área polar será tratada de maneira diferente de qualquer outra região em termos de espaçamento de vértices, o que facilita o mapeamento UV uniforme.

A maioria dos aplicativos de modelagem permite criar uma esfera primitiva usando um design geodésico.


O problema é que você terá diamantes em vez de quadrados neste caso, e não é isso que o OP queria.
Kornel Kisielewicz 30/08

A menos que esteja faltando alguma coisa, isso não me dá regiões mais fáceis de coordenar, mapear e vincular ... dá?
Clweeks 30/08/10

Geodésica parece ser o caminho a seguir, não consigo pensar em nenhuma outra opção para subdivisão regular. Se você realmente precisar de regiões quadradas, certamente poderá gerar uma região quadrada, centralizada no centro do triângulo, mesmo que ela se sobreponha a outras peças. Para esferas grandes o suficiente (e triângulos pequenos o suficiente), o deslocamento entre as regiões quadradas e as faces adjacentes do triângulo será negligenciável. Isso deve preservar a vantagem de poder descrever interações locais (ou seja, o mesmo quadrado) no mesmo sistema de coordenadas, não?
precisa saber é o seguinte

Eu acho que existem algumas formas geodésicas que podem fornecer quadrados aproximados, se REALMENTE necessário.
speeder

Você ganha diamantes em vez de quadrados, mas isso deve ser bastante fácil de fazer uma transformação para corrigi-lo. Não há pólos garantidos.
ChrisE

5

Não há como "mapear" uma esfera com quadrados (ou retângulos) e fazer com que todas se juntem em vértices "comuns".

No entanto, seria possível gerar a "visão local" sob demanda? O espaço do problema não está realmente indicado na pergunta, mas se eu estivesse trabalhando em algo em que queria uma vista da cidade, mas quisesse girar o mundo, poderia temporariamente apenas mapear uma grade em uma seção "plana o suficiente" o mundo. A origem da grade seria onde quer que estivesse o seu centro local, e o normal naquele ponto corresponde ao normal da superfície do planeta.

Então, quando alguém sai da grade, um novo é gerado sob demanda.

Isso pode ou não funcionar para o OP, mas para alguns pode ser útil.


4

Pegue um cubo, com a distância entre os vértices e o centro do cubo igual ao raio desejado. Você tem uma esfera composta de 6 quadriláteros.

Agora, em cada etapa, pegue cada quadrilátero, divida-o em 4 e mova os novos 5 vértices (um no centro e 4 nas bordas - aviso, eles são COMPARTILHADOS) para longe do centro para que eles gostem do desejado raio.

Não, esse método não é perfeito, mas pelo menos é uma distribuição mais ou menos igual na esfera.


3
A distorção é realmente bastante severa com isso - os quadriláteros no meio do rosto estarão próximos do quadrado, e os próximos aos cantos serão muito distorcidos.
JasonD

@ JasonD: Ainda será melhor do que todos os diamantes. Sugira uma solução que seja menos distorcida se você deseja votar.
Kornel Kisielewicz 30/08/10

Bem, você pode aproximar muito bem uma esfera com a divisão geodésica, mas não tenho certeza se vejo como isso me ajuda.
Clweeks 30/08/10

1

Com o dymaxion max, você tem hexágonos dispostos em triângulos em uma superfície plana, mas como o mapa não é realmente plano, eles são pentágonos. Se você deseja permitir que o jogador mantenha sua orientação quando percorrer determinadas partes, será necessário separar os mapas de localização de como eles são realmente armazenados. Para coisas como edifícios, você pode armazenar um pequeno mapa de vetores retangulares e apenas fazer um trabalho duro de desenhá-los na orientação que você precisar.

Você não precisaria sempre fazer com que o interior parecesse um terremoto recente, porque acho que o jogador comum não deveria nem pensar em entrar em uma porta para o nordeste, mas entrar em uma tela com a porta da frente sul e todo o edifício em uma grade regular.

Embora, se você estiver indo apenas para armazenar prédios e locais importantes como esse, você já fez todo o trabalho para um padrão de bola de futebol. O resultado final é que você está armazenando o mundo como um padrão não quadrado e forçando-o a uma grade onde quer que o jogador esteja.

Porém, há outra alternativa: se você não der uma indicação precisa da esfera, como se você tivesse lhes dado uma bússola de baixa precisão para dizer qual das quatro direções ortogonais era a mais próxima do norte, você poderia fugir apenas fazendo rotações de 90 graus para qualquer local em que o jogador foi. Dado o nível de gráficos assumido, não é como se você tivesse que se preocupar com um prédio alto que obscurecesse alguma porta. Desde que eles soubessem se estavam perto dos polos ou não, não deveriam ficar muito chateados com a mudança da bússola neles, a menos que os NPCs por lá lhes dissessem para ir para o nordeste ou tentassem realmente ir para coordenadas específicas de latitude e longitude .


1

Você está fazendo uma pergunta que as pessoas que fazem mapas fazem há muito tempo :)

Definitivamente, leia sobre Mapear projeções para obter algumas idéias e idéias que podem ajudar. O desafio de representar a superfície de uma esfera em / com um plano 2D plano tem sido algo em que as pessoas pensam há muito tempo.

A resposta curta é: não, você não pode fazê-lo. É por isso que, quando você olha para os mapas do mundo, algumas partes estão distorcidas e outras não. Geralmente são os pólos, porque a maioria dos mapas é sobre áreas não polares.

Como outras respostas disseram, a resposta é usar uma forma diferente (hexágonos ou triângulos, por exemplo) ou gerar dinamicamente seu mapa em tempo real para o ponto de vista atual do usuário.

Ladrilhos quadrados são muito fáceis de gerenciar, mas não acho que criar um mapa hexadecimal com blocos seja tão difícil.

Aqui está um artigo mais antigo do GameDev.net que você pode achar útil. Trata-se de fazer blocos isométricos e hexagonais em uma grade.

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

Ao pesquisar no Google "mapa hexadecimal em mosaico", você obtém muitos hits, alguns úteis outros não.


1

Estou operando várias câmeras de rede PTZ da Sony, modelo SNC-RX570N, com o objetivo de rastrear objetos em movimento no céu e triangular para obter trilhas 3D verdadeiras. Um dos aspectos da configuração inicial é definir "passeios" autônomos, para os quais os waypoints devem ser escolhidos. Há um número restrito de waypoints programáveis, e quero cobrir todo o hemisfério (a "esfera celeste") do horizonte ao zênite, sem deixar lacunas.

Então, eu me perguntei "Qual é o número mínimo de pontos de referência necessários para uma cobertura completa (sem lacunas)?". Eu descobri que na verdade não consigo entender completamente isso.

A câmera possui panorâmica infinita (360 graus) e inclinação de 0 a 90 graus; portanto, teoricamente, é possível obter uma cobertura completa. O visor da câmera, destinado ao uso do computador, é retangular na proporção de 4: 3. O FOV horizontal aproximado com zoom de 1x é de 58 graus.

Existem duas maneiras de representar o problema, dependendo de qual projeção se escolhe: - retilíneo como Mercator, em que o horizonte é "o equador" e o zênite é "o pólo", dilatado em mais de 360 ​​graus de panela. - polar, em que o horizonte é a circunferência do círculo e o zênite é o centro do círculo.

Acho polar a maneira mais fácil de abordar o problema. Posso dividir o círculo em fatias de pizza horizontais do tamanho de FOV, e isso me diz que preciso de 7 pontos de referência ao redor do círculo com esse H-FOV de 58 graus. Por enquanto, tudo bem. O raio interno é simplesmente a inclinação ou V-FOV, que é 3/4 de 58 graus. Até aí tudo bem - eu cobri as partes mais externas do círculo.

Mas fica mais complicado quando nos aproximamos do zênite. Suponho que um dos meus pontos de referência esteja exatamente no zênite. Como mapeio meu retângulo de visão na região ao redor do centro do círculo? Essa forma é um retângulo, uma elipse, uma almofada de alfinetes ou o quê? Como preencher a parte intermediária entre a bela cobertura externa elegante e essa forma estranha no zênite? Confuso.

Observo que o ângulo sólido de um hemisfério é 2 * PI steradians, e o do meu FOV em 1x zoom é 0,762 st, o que significa que preciso de um mínimo de 9 pavimentações. Suspeito que a resposta seja superior a 9.


Que tal isso? O círculo tem PI ^ 2 rad ^ 2 de área e os retângulos de FOV são área 0,75 rad ^ 2. Tão ingenuamente precisamos de 13,16 pontos que devem ser arredondados para uma cobertura total para 14 pontos. A questão agora é - como elas devem ser colocadas?
Andrew Andrew

0

Se você deseja criar uma grade mundial, sugiro que você divida o planeta em países ou continentes e faça uma grade quadrada adequadamente centralizada em cada um. Deixe o oceano cobrir as costuras.


Na verdade, minha pergunta é "como eu obviamente não posso fazer o que você pensou que eu estava realmente perguntando, o que devo fazer?"
Clweeks 30/08/10

Muito bem, editado então.
Zaratustra

Sim, acho que fui desviado pela outra parte. Eu estava pensando em implementar o Mapa Dymaxion de Fuller, mas trabalhar com blocos triangulares parecia tanto um clusterF * quanto o problema do mosaico polar em que estou começando. Portanto, com sua sugestão, se alguém está navegando da América do Norte para o norte da Ásia e as coordenadas são importantes (talvez elas possam estabelecer bases flutuantes ou algo assim) como costurar as costuras? Basta criar uma tabela de conexões do tipo NA: A5 -> A: Z475?
Clweeks 30/08/10

Eu acho. Embora se eles conseguissem fazer isso, eu daria a eles uma recompensa bônus e os colocaria fora da grade até que eles fossem para algum lugar sensato.
Zaratustra
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.