Vor einiger Zeit habe ich gefragt, wie man feststellt, wann ein Gesicht ein anderes überlappt. Der Rat war, einen Z-Puffer zu verwenden.
Ich kann jedoch keinen Z-Buffer in meinem aktuellen Projekt verwenden und möchte daher den Painter-Algorithmus verwenden. Ich habe allerdings keine Ahnung, wann sich eine Fläche hinter oder vor einer anderen befindet. Ich habe zahlreiche Methoden ausprobiert, aber alle scheitern in Randfällen oder sogar in allgemeinen Fällen.
Dies ist eine Liste der Sortiermethoden, die ich bisher ausprobiert habe:
- Abstand zum Mittelpunkt jedes Gesichts
- Durchschnittlicher Abstand zu jedem Scheitelpunkt jeder Fläche
- Durchschnittlicher z-Wert jedes Scheitelpunkts
- Höchster z-Wert der Eckpunkte jeder Fläche und zuerst zeichnen
- Niedrigster z-Wert der Eckpunkte jeder Fläche und zuletzt gezeichnete
Das Problem ist, dass ein Gesicht eine geringere Entfernung hat, aber immer noch weiter entfernt ist. Alle diese Methoden scheinen unzuverlässig.
Bearbeiten: Im folgenden Bild wird beispielsweise die Oberfläche mit dem blauen Punkt als Mittelpunkt über die Oberfläche mit dem roten Punkt als Mittelpunkt gezeichnet, da der blaue Punkt näher ist. Dies liegt jedoch daran, dass die Oberfläche des roten Punkts größer und der Mittelpunkt weiter entfernt ist. Die Oberfläche mit dem roten Punkt sollte über die blaue gemalt werden, da sie näher ist , während der Mittelpunktsabstand das Gegenteil besagt.
Was genau wird im Algorithmus des Malers verwendet, um die Reihenfolge zu bestimmen, in der Objekte gezeichnet werden sollen?