Ahoy!
Estou procurando algumas informações sobre mapas de blocos, ou melhor, como é chamado um tipo específico de mapa de blocos.
Estou interessado no tipo de implementação usada no tycoon da montanha-russa ou na série de jogos do tycoon de transporte e tenho estudado o terreno do campo vetorial e o mapa do mapa de altura, mas não sei se eles são adequados para o que eu estou procurando desenvolve.
Tem sido difícil encontrar informações decentes, já que a maioria das pessoas se refere a elas como um mapa isométrico de blocos, mas estou procurando criar algo em 3D com uma perspectiva ortográfica fixa. Entendo que o armazenamento subjacente do mapa de blocos não tem nada a ver com a forma como ele é renderizado, mas não pretendo criar um mapa de blocos 2D como os jogos pokemon / zelda da velha escola, mais parecidos com o diablo com a capacidade de incluir falésias salientes e terrenos inclinados.
Estou apenas tentando encontrar os termos certos para pesquisar no google e no stackoverflow por recursos para me ajudar a decidir qual caminho seguir.
Até agora, consegui detalhar um mapa básico de blocos sem usar o componente height / y armazenado em um VBO e renderizado como uma estrutura de arame. Parece bom até agora, mas imagino que encontrarei problemas ao tentar manipular um único vértice para criar falésias e declives sem afetar um ladrilho vizinho.
Existe um tipo específico de implementação em que eu deveria estar analisando? Eu pensei que tinha rachado quando encontrei uma quantidade razoável se informações sobre terreno de campo vetorial, mas não tenho certeza se isso renderia os resultados corretos também.
Se alguém puder esclarecer isso para mim, por favor, a ajuda seria muito apreciada :)
Atualizar
Incluí uma imagem para esclarecimentos adicionais sobre o que eu gostaria de alcançar:
Imagem emprestada de Como criar blocos isométricos inclinados (altura)
Esta imagem mostra o tipo de terreno que gostaria de gerar, mas não inclui os "penhascos" ou os tipos de terreno pendentes que estou interessado em modelar. No entanto, levanta algumas outras questões que eu não havia considerado, a saber;
- Como 'camadas' como a água (canto superior esquerdo da imagem) seriam tratadas para incluir o solo visível embaixo da água?
- Como as "bordas" do mapa seriam atendidas para que a terra / lama fosse renderizada para representar o mundo como uma entidade não plana?
- O armazenamento subjacente a esse tipo de terreno poderia ser usado para modelar a física, como uma bola rolando ladeira abaixo ou a velocidade de movimento de um jogador atravessando uma ladeira?
Eu tinha uma idéia de que cada ladrilho do terreno poderia ser modelado com 8 vértices, onde os 4 vértices principais cobrem o próprio ladrilho real e os 4 vértices restantes são usados para modelar os lados / paredes de cada ladrilho. Os dois problemas que vejo nesta implementação são: a) o mapa do mundo é essencialmente dobrado em tamanho eb) dado que nem todos os ladrilhos incluirão "paredes", alguns acabarão com vértices redundantes que não são usados.
Eu gostaria de criar um editor de terreno que permita que cada bloco seja deformado, além de incluir a capacidade de alterar o terreno durante o jogo. Isso por si só coloca questões adicionais como; Um VBO pode ser usado para armazenar e renderizar o terreno enquanto está sendo modificado em tempo real e também é possível modificar vértices sem afetar os ladrilhos vizinhos?
Estou com a impressão de que estou complicando demais as coisas ou passando por uma paralisia na análise, pois estou deixando de escrever qualquer código para resolver o problema sem ter uma ideia clara de como conseguiria o que quero.
Mais uma vez, estou realmente procurando um empurrão na direção certa com isso. Existe um tipo específico de implementação de mapa de mosaico / terreno que atenderia à deformação de um mapa 3D tanto por um editor de mapas quanto durante o jogo ou eu tenho que rolar sozinho, por assim dizer? Não estou tentando reinventar a roda aqui, mas estou lutando para encontrar algum recurso, pois não tenho certeza do que procurar.
Se alguém puder fornecer informações, recursos ou trechos de código, isso seria muito apreciado, pois estou ansioso para sujar as mãos e começar a produzir algo diferente do wireframe plano que tenho atualmente.
Obrigado pela leitura!
Este: http://30.media.tumblr.com/tumblr_m06qv6OREt1r2qjpao1_500.png é um exemplo de mapa que fiz há algum tempo.
Eu tinha um XML representando o mapa e diferentes tipos de blocos. Cada tipo teria alguns atributos:
ALL
(se ele mesclar com qualquer bloco ao seu redor),EQUAL
(mesclar apenas com blocos do mesmo tipo),NONE
(nunca mesclar).Eu lia todos os ladrilhos e os criava na cena. Primeiro, apenas levando em consideração a posição. Cada peça tinha que saber sua vizinha, então eu tive que percorrer o mapa duas vezes, uma vez para criar tudo e mais uma vez para mover cada vértice para a posição correta.
Embora meus modelos sejam hexágonos, o conceito é o mesmo, você precisaria de um cubo para representar seu bloco, movendo os vértices da base para o nível mais baixo e suavizando a parte superior do cubo com os cubos ao seu redor. Você também verificaria se dois lados dos cubos foram mesclados para que você possa remover esse lado do cubo (se eles não forem mesclados, provavelmente é um penhasco ou algo assim).
Sobre física, depende do seu objetivo. Se você está fazendo algo como um magnata de montanha-russa, não precisa realmente deles. Você pode apenas verificar a altura do jogador entre cada peça e decidir a velocidade de caminhada. Você poderia fazer o mesmo com um objeto que se move sozinho (como a bola), verificar as peças ao redor (ou o ângulo atual da peça) e decidir uma direção / velocidade. Se você precisar de física realista (como gravidade, atrito, etc.), seria necessário usar um mecanismo de física e a representação 3D do cubo no mecanismo.
Camadas também são possíveis, mas você precisaria de algo como minecraft (com suavização dos cubos na camada mais alta). Se você precisar apenas de camadas de água, poderá ter uma "nascente de água" em um ladrilho e fazer com que seu código preencha todos os espaços ao redor dele que estejam na mesma altura ou menos (uma solução recursiva seria adequada aqui).
Um editor de terreno também seria simples: se seu código for flexível o suficiente, você poderá aplicar as transformações em um único bloco (o que você está alterando) ou em uma lista de blocos (se estiver usando um 'pincel' para selecione e mova-os). O mesmo código pode ser usado para modificar o terreno do jogo. E sim, você pode alterar os vértices no VBO, também é possível alterar os vértices sem afetar os outros (isso também depende de você codificar dessa maneira).
fonte