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.