Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.039 Beiträge
 
Delphi 12 Athens
 
#2

AW: GLScene: Problem mit Alpha bei einem TGLPolygon

  Alt 25. Okt 2012, 09:31
Mit der Transparenz bei OpenGL ist das so eine Sache. Bei einem Objekt mit Transparenz wird nämlich der eigene Farbwert mit dem vorhandenen Farbwert gemischt. Damit bekommt aber die Reihenfolge der Objekte beim Zeichnen eine besondere Bedeutung.

Beim Zeichnen bekommt jedes Pixel ja auch noch einen Z-Wert mit. Wird dann ein Pixel darübe gezeichnet, geschieht dies nur, wenn der Z-Wert kleiner (also näher zur Kamera) ist, als der aktuelle Z-Wert. Bei einem Transparenten Pixel wird wie gesagt die Farbe gemischt, der Z-Wert kommt aber dann von dem transparenten Pixel.

Unter der Annahme, daß das transparente Objekt vor dem opaqen liegt, gibt es jetzt zwei Möglichkeiten:

1. Das opaque Pixel wird vor dem transparenten gezeichnet. Das Ergebnis ist wie gewünscht.
2. Das transparente Pixel wird zuerst gezeichnet. Dann wird das opaque gar nicht gezeichnet, weil sein Z-Wert hinter dem transparenten Pixel liegt.

Es gibt in TGLScene ein Property ObjectsSorting, das man auf osRenderBlendedLast stellen kann. Hiermit werden die transparenten Objekte tiefensortiert nach den opaquen gezeichnet. Leider funktioniert das nur objektweise. In deinem Fall "umschließt" das Polygon offensichtlich andere Objekte (es liegt sowohl davor als auch dahinter) und damit kann keine sinnvolle Sortierung erfolgen.

Leider ist auch ein Splitten solcher Objekte in mehrere kleinere nicht immer erfolgreich, da die Tiefensortierung halt sehr stark von der Blickrichtung abhängt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat