Wie zeichne ich tausende Sprites mit unterschiedlicher Transparenz?

8

Hallo Ich benutze Firemonkey wegen seiner plattformübergreifenden Fähigkeiten. Ich möchte ein Partikelsystem rendern. Jetzt verwende ich ein TMesh, das gut genug funktioniert, um die Partikel schnell anzuzeigen. Jedes Partikel wird in dem Gitter über zwei texturierte Dreiecke dargestellt. Mit verschiedenen Texturkoordinaten kann ich viele verschiedene Partikeltypen mit dem gleichen Mesh anzeigen. Das Problem ist, dass jedes Partikel seine eigene Transparenz / Opazität haben kann. Mit meinem derzeitigen Ansatz kann ich die Transparenz nicht für jedes Dreieck (oder sogar für jeden Knoten) einzeln einstellen. Was kann ich tun?

Ich habe festgestellt, dass es in TMesh.Data.VertexBuffer einige andere Eigenschaften gibt, wie Diffuse oder andere Textsätze (TexCoord1-3), aber diese Eigenschaften werden in TMesh nicht verwendet (nicht einmal initialisiert). Es scheint auch nicht einfach zu sein, dieses Verhalten durch Erben von TMesh zu ändern. Es scheint, dass man von einem Steuerelement der unteren Ebene erben muss, um den VertextBuffer mit mehr Eigenschaften zu initialisieren. Bevor ich das versuche, möchte ich fragen, ob damit die Transparenz eines Dreiecks kontrolliert werden könnte. Z.B. kann ich eine transparente Farbe (Diffuse) oder eine transparente Textur (TextCoor1) verwenden? Oder gibt es eine bessere Möglichkeit, die Partikel in Firemonkey zu zeichnen?

    
Steffen Binas 18.03.2012, 10:18
quelle

1 Antwort

0

Ich gebe zu, dass ich nicht viel über dieses spezielle Framework weiß, aber Sie sollten nicht in der Lage sein, die Transparenz über Eckpunkte in einem 3D-Modell zu ändern. Die Punkte sind normalerweise x, y, z-Koordinaten. Die Vertexpunkte würden sich nun darauf auswirken, wie die Sprites beleuchtet werden, wenn Sie ein Beleuchtungssystem verwenden. Sie können die Vertex-Informationen auch verwenden, um verschiedene Transparenzeffekte anzuwenden.

Jetzt gibt es wahrscheinlich ein Dutzend verschiedene Möglichkeiten, dies zu tun. Normalerweise haben Sie eine Textur mit verschiedenen Graden von Alpha-Werten, die zur Laufzeit gesetzt werden können. Grafik-APIs haben normalerweise eine Filterfunktion, die schnell Werte auf Sprites / Texturen anwenden kann, und eine gute verwendet Ihren Grafikchip, falls verfügbar.

Wenn du einen Effekt verwenden kannst, ist es normalerweise besser, da der nukleare Weg darin besteht, eine Menge verschiedener Kopien eines Sprites zu machen und dann Effekte einzeln auf sie anzuwenden. Wenn Sie Gouraud Shading verwenden, wird es einfacher, da Gouraud Code verwendet, um Texturinformationen einzugeben.

Nun, verwenden Sie Lichtpartikel? Einige Grafik-APIs haben tatsächlich Code, der Lichtpartikel erzeugt.

Edit: Ich erinnere mich nur an Vertex Shaders, die könnten.

    
Joe Plante 30.08.2012, 14:05
quelle

Tags und Links