Ich weiß, dass diese Frage ein bisschen einfach zu beantworten klingt, aber sie macht mich verrückt. Es gibt zu viele mögliche Situationen, die ein guter Alpha-Mischmechanismus bewältigen sollte, und für jeden Algorithmus, den ich mir vorstellen kann, fehlt etwas.
Dies sind die Methoden, über die ich bisher nachgedacht habe:
Als erstes dachte ich über das Sortieren von Objekten nach Tiefe nach. Dieses schlägt einfach fehl, weil Objekte keine einfachen Formen sind, sondern Kurven haben und sich ineinander schleifen können. Ich kann also nicht immer sagen, welches näher an der Kamera ist.
Dann habe ich darüber nachgedacht, Dreiecke zu sortieren, aber dieses könnte auch fehlschlagen. Ich bin mir nicht sicher, wie ich es implementieren soll. Es gibt einen seltenen Fall, der erneut ein Problem verursachen könnte, bei dem zwei Dreiecke sich gegenseitig passieren. Wieder kann niemand sagen, welcher näher ist.
Das nächste war die Verwendung von Tiefenpuffer. Zumindest der Hauptgrund, warum wir Tiefenpuffer haben, sind die Probleme beim Sortieren, die ich erwähnt habe, aber jetzt bekommen wir ein anderes Problem. Da Objekte transparent sein können, ist in einem einzelnen Pixel möglicherweise mehr als ein Objekt sichtbar. Für welches Objekt soll ich also die Pixeltiefe speichern?
Ich dachte dann, ich kann vielleicht nur die vorderste Objekttiefe speichern und damit bestimmen, wie ich die nächsten Zeichenaufrufe an diesem Pixel mischen soll. Aber auch hier gab es ein Problem. Denken Sie an zwei halbtransparente Ebenen mit einer festen Ebene in der Mitte. Ich wollte die feste Ebene am Ende rendern, man kann die am weitesten entfernte Ebene sehen. Beachten Sie, dass ich alle zwei Ebenen zusammenführen wollte, bis nur noch eine Farbe für dieses Pixel übrig ist. Natürlich kann ich aus den gleichen Gründen, die ich oben erklärt habe, auch Sortiermethoden verwenden.
Schließlich kann ich mir nur vorstellen, dass alle Objekte in verschiedene Renderziele gerendert werden können. Anschließend werden diese Ebenen sortiert und die endgültige Ausgabe angezeigt. Aber diesmal weiß ich nicht, wie ich diesen Algorithmus implementieren kann.