Estoy intentando encontrar una solución a este problema. Estoy tratando de construir una malla de navegación en el formato de una cuadrícula de vértices bloqueados en coordenadas x, y con piso en forma de cuadrados para el espacio 3D. Pero tengo problemas para tratar de encontrar una manera de hacerlo.
Intenté buscar en la biblioteca de Recast. Es un método bastante robusto, pero aparentemente se ralentiza con mapas más grandes y espacios abiertos. Tampoco sé cómo generan vértices y bordes para el espacio mundial con el mapa de altura.
Mi siguiente pensamiento fue hacer lo que solía hacer Unreal Engine 3.
https://udn.epicgames.com/Three/NavigationMeshReference.html
Lo cual era usar rayos para generar la malla. No pude encontrar la manera de detener los rayos.
Entonces ... mi siguiente opción era la caja, posiblemente un molde de caja. Cree un volumen subdividido con un tamaño que sea una potencia de 2. Alinee el cuadro con la cuadrícula y dispare los prismas rectangulares hacia abajo como un rayo. Si cae sobre una pieza de geometría que es parte del suelo y el rectángulo no se cruza, deja un cuadrado allí. Y continúe hacia abajo hasta alcanzar los límites del volumen. Para verificar si los bordes deben estar vinculados, supongo que podría verificar si la pendiente entre dos pares de vértices está dentro de la pendiente transitable, fusionarlos si esto es cierto.
Mis principales problemas son ... esto no parece ser muy óptimo. Sin pensarlo, en la estimación, el proceso es O (N ^ 3) para un nivel multicapa. Lo que puede ser bastante desagradable.
Y el último bit es para crear automáticamente grupos rectangulares de estos cuadrados. No estoy completamente seguro de cómo hacer esto. La implementación de Unreal los separa por pendientes. Sin embargo, estoy tratando de mantener el formato de cuadrícula. Entonces eso no es del todo necesario. El problema sigue siendo la creación de grandes mosaicos rectangulares para dividir el proceso de búsqueda de ruta en una base por mosaico. Los azulejos no pueden ser demasiado grandes ni demasiado pequeños.
Entonces las preguntas son ...
¿Cuál sería una manera eficiente de generar este navmesh ceñido? ¿Y cuál sería una buena forma de crear los mosaicos?