Há um tempo atrás, perguntei como determinar quando um rosto se sobrepõe a outro. O conselho era usar um buffer Z.
No entanto, não posso usar um buffer Z no meu projeto atual e, portanto, gostaria de usar o algoritmo do Painter. Não tenho nenhuma boa idéia de quando uma superfície está atrás ou na frente de outra. Eu tentei vários métodos, mas todos falham em casos extremos, ou mesmo em casos gerais.
Esta é uma lista dos métodos de classificação que eu tentei até agora:
- Distância ao ponto médio de cada face
- Distância média a cada vértice de cada face
- Valor médio de z de cada vértice
- O valor z mais alto dos vértices de cada face e desenha os primeiros
- O valor z mais baixo dos vértices de cada face e desenha os últimos
O problema é que um rosto pode ter uma distância mais próxima, mas ainda mais distante. Todos esses métodos parecem não confiáveis.
Editar: Por exemplo, na imagem a seguir, a superfície com o ponto azul como ponto médio é pintada sobre a superfície com o ponto vermelho como ponto médio, porque o ponto azul está mais próximo. No entanto, isso ocorre porque a superfície do ponto vermelho é maior e o ponto médio está mais distante. A superfície com o ponto vermelho deve ser pintada sobre o azul, porque está mais próxima , enquanto a distância do ponto médio indica o contrário.
O que exatamente é usado no algoritmo do Painter para determinar a ordem em que os objetos devem ser desenhados?