Algoritmo de ordenacion en perspectiva isometrica

EnZo

Buenas, como siempre cuando tengo una duda acudo a los gurús a que me la resuelvan :P

Estoy usando un engine isometrico que me esta dando problemas (es una mierda de engine) cuando tiene que renderizar todos los elementos del escenario.

En el escenario tengo objetos de los cuales conozco su posicion (x y z) y su tamaño (alto ancho largo). Pues con estos parametros tengo que arreglar la clase del engine de mierda que hace la tarea de superponer objetos uno encima del otro.

Aquí un ejemplo de lo que he leido:
http://gamedev.stackexchange.com/questions/25982/how-do-i-determine-the-draw-order-in-an-isometric-view-flash-game

Esta imagen ilustra bien como hacerlo de forma facil:
http://i.imgur.com/919bb.png

Pero no vale cuando la posicion de tus objetos es variable en los tres ejes. Ahí ya entra el tamaño y la posicion para ordenarlos.

Imaginaros que tengo un tablero de ajedrez de 100x100 casillas. Con lo cual tenemos 100x100=10000 Objetos.

Tal y como lo hace el engine hace un bucle de esos 10000 mas otro bucle anidado para ordenar. Con lo cual los bucles suponen: 10000x99999 = 999990000.
Casi cien millones de comprobaciones cada vez que mueves un objeto. Imaginaros una pelota moviendose por el escenario, peta.

Esto no es optimo para nada. Me gustaría saber si alguien conoce algun algoritmo para esto. Algun genio habra tenido que hacerlo no?

Saludos.

elkaoD

#1 el engine isométrico... es tileado?

"su tamaño (alto ancho largo)"

¿Un objeto ocupa varios tiles?

"Pero no vale cuando la posicion de tus objetos es variable en los tres ejes."

¿Qué quieres decir? La posición de cualquier objeto móvil es variable en los tres ejes.

Las claves para tu respuesta probablemente sean:

  1. Painter's algorithm (la imagen que has puesto, básicamente, pero generalizada para un espacio cúbico).
  2. Dirty regions.
  3. Quadtrees.
  4. Si el sistema es tileado, usar tiles por separado y no un bloque para un objeto que ocupa varios tiles.
EnZo

el engine isométrico... es tileado?

  • No.

¿Un objeto ocupa varios tiles?

  • En el engine puede sí. conkis no.

¿Qué quieres decir? La posición de cualquier objeto móvil es variable en los tres ejes.

  • Me he expresado mal, debido a lo que has comentado justo antes que no es tileado y que puede ocupar varios tiles y no es posible usar un algoritmo de ordenacion de solo tiles.

El problema es que no quiero convertir el engine a un engine de solo tiles (puede ser una locura). Me gustaria implementar algun algoritmo que solucione el problema que tiene el engine en sí.

1 respuesta
elkaoD

#3 entonces olvídate de si es isométrico o no. El hilo que enlazadas solo es relevante para isométrico tileado. Tu problema es igual sea la perspectiva que sea y se soluciona con las técnicas clásicas que comenté antes (painter's algorithm, dirty regions, quadtrees...)

1
r2d2rigo

Digo yo que si estas trabajando en 3D, usa el depth buffer y listo no?

1 1 respuesta
EnZo

Oky, les echaré un ojo a los algoritmos a ver si saco algo en claro.

elkaoD

#5 está trabajando en 2D creo.

Usuarios habituales

  • elkaoD
  • EnZo
  • r2d2rigo