Pregunta

Estoy escribiendo un juego en C ++ y tengo un nivel que consta de muchas mallas separadas, cada una con su propio búfer de vértice. Estoy usando vmmlib (brillante vector gl / biblioteca de matriz libre) para crear mi triturador y probarla contra la esfera delimitada de cada malla en el nivel. Lamentablemente, mi nivel puede consistir en hasta 800 mallas e iterar a través de todas ellas cada fotograma es lento. ¿Cuál es la mejor manera de optimizar el código para que no tenga que mirar todas las mallas en cada iteración? ¿Volúmenes limitantes dentro del tronco?

¿Fue útil?

Solución

Sí, el camino a seguir es el objeto delimitador, debe tener cuidado al elegir un volumen delimitador adecuado, por ejemplo, para las mallas que se mueven alrededor de la escena como los robots y que no se acueste un cilindro es el mejor volumen, otros están mejor representados por Cubos (eje alineado o no).

Luego creas un quadtree u octree para dividir jerárquicamente los datos de malla.

Esto funciona muy bien para el sacrificio de personas en el exterior.

Para interiores, un BSP es la mejor manera de hacerlo, ya que tienes muchas paredes para dividir tu espacio. Aún debe enlazar en volumen sus mallas que tienen más de 10 polígonos.

Otros consejos

Solo quería agregar que ahora en general se prefieren los portales de días en lugar de BSP, pero no tengo la reputación suficiente para editar la publicación original.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top