Hace un tiempo pregunté cómo determinar cuándo una cara se superpone a otra. El consejo era usar un Z-buffer.
Sin embargo, no puedo usar un búfer Z en mi proyecto actual y, por lo tanto, me gustaría usar el algoritmo del pintor. Sin embargo, no tengo ni idea de cuándo una superficie está detrás o delante de otra. He probado numerosos métodos, pero todos fallan en casos extremos, o fallan incluso en casos generales.
Esta es una lista de métodos de clasificación que he probado hasta ahora:
- Distancia al punto medio de cada cara
- Distancia promedio a cada vértice de cada cara
- Valor z promedio de cada vértice
- Complice el valor z de los vértices de cada cara y dibuje los primeros
- El valor z más bajo de los vértices de cada cara y dibuja los últimos
El problema es que una cara puede tener una distancia más cercana pero aún está más lejos. Todos estos métodos parecen poco confiables.
Editar: por ejemplo, en la siguiente imagen, la superficie con el punto azul como punto medio se pinta sobre la superficie con el punto rojo como punto medio, porque el punto azul está más cerca. Sin embargo, esto se debe a que la superficie del punto rojo es más grande y el punto medio está más lejos. La superficie con el punto rojo debe pintarse sobre el azul, porque está más cerca , mientras que la distancia del punto medio dice lo contrario.
¿Qué se usa exactamente en el algoritmo del pintor para determinar el orden en que deben dibujarse los objetos?