Qualche tempo fa ho chiesto come determinare quando una faccia si sovrappone a un'altra. Il consiglio era di usare un buffer Z.
Tuttavia, non posso usare un buffer Z nel mio progetto attuale e quindi vorrei usare l'algoritmo di Painter. Tuttavia, non ho idea di quando una superficie sia dietro o davanti a un'altra. Ho provato numerosi metodi, ma tutti falliscono nei casi limite, o falliscono anche nei casi generali.
Questo è un elenco di metodi di ordinamento che ho provato finora:
- Distanza dal punto medio di ciascuna faccia
- Distanza media da ciascun vertice di ciascuna faccia
- Valore z medio di ciascun vertice
- Il più alto valore z dei vertici di ogni faccia e disegnali per primi
- Il valore z più basso dei vertici di ciascuna faccia e disegna quelli ultimi
Il problema è che una faccia potrebbe avere una distanza più vicina ma è ancora più lontana. Tutti questi metodi sembrano inaffidabili.
Modifica: ad esempio, nell'immagine seguente la superficie con il punto blu come punto medio viene dipinta sulla superficie con il punto rosso come punto medio, poiché il punto blu è più vicino. Tuttavia, questo perché la superficie del punto rosso è più grande e il punto medio è più lontano. La superficie con il punto rosso dovrebbe essere dipinta su quella blu, perché è più vicina , mentre la distanza del punto medio dice il contrario.
Cosa viene utilizzato esattamente nell'algoritmo di Painter per determinare l'ordine in cui gli oggetti devono essere disegnati?