Estou tentando encontrar uma solução para esse problema. Estou tentando criar uma malha de navegação no formato de uma grade de vértices bloqueados para x, y coordenadas com piso em forma de quadrados para o espaço 3D. Mas estou tendo problemas para tentar descobrir uma maneira de fazer isso.
Tentei procurar na biblioteca de reformulação. É um método bastante robusto, mas aparentemente diminui a velocidade com mapas maiores e espaço aberto. Também não sei como eles geram vértices e arestas para o espaço mundial com o mapa de altura.
Meu próximo pensamento foi fazer o que o Unreal Engine 3 costumava fazer.
https://udn.epicgames.com/Three/NavigationMeshReference.html
Que era usar raycasts para gerar a malha. Eu não conseguia descobrir como parar o raycasts.
Então ... minha próxima opção foi caixa, possivelmente uma caixa moldada. Crie um volume subdividido com um tamanho que seja uma potência de 2. Alinhe a caixa à grade e atire prismas retangulares para baixo como um raio. Se ele cair em um pedaço de geometria que faz parte do solo e o retângulo não estiver sendo cruzado, deixe um quadrado ali. E continue até que os limites do volume sejam atingidos. Para verificar se as arestas precisam ser vinculadas, suponho que eu possa verificar se a inclinação entre dois pares de vértices está dentro da inclinação que pode ser percorrida, mesclá-las se isso for verdade.
Meus principais problemas são ... isso não parece ser o ideal. Sem pensar nisso, na estimativa, o processo é O (N ^ 3) para um nível de várias camadas. O que pode ficar bem desagradável.
E o último bit é para criar automaticamente grupos retangulares desses quadrados. Não tenho muita certeza de como fazer isso. A implementação Unreal os separa por declives. No entanto, estou tentando manter o formato da grade. Portanto, isso não é totalmente necessário. Ainda existe o problema de criar grandes blocos retangulares para dividir o processo de localização de caminhos em uma base por bloco. Os ladrilhos não podem ser muito grandes nem muito pequenos.
Então as perguntas são ...
Qual seria uma maneira eficiente de gerar essa navmesh cingida? E qual seria uma boa maneira de criar os azulejos?