Frage

Zum Beispiel ...

Wenn ich eine Anwendung entwickle, für die mehr als eine Textur erforderlich ist (im Grunde genommen eindeutige Sprites), muss ich context3D.createProgram(); aufrufen und einen neuen Program3D ( mit einem VertexShaderAssembler und einem FragmentShaderAssembler ) zusammenstellen) für jede einzelne Textur, die ich in der Anwendung verwenden möchte?

Wie funktioniert ein Program3D normalerweise in einer Engine?Führt ein Programm das Ganze aus oder verwendet es ein Programm pro Texturen , Modelle , Karten ?

Und kann ich zu Recht davon ausgehen, dass Sie den Program3D nur einmal während der Initialisierungszeit (Event.ADDED_TO_STAGE) und nicht während jedes Frames (Event.ENTER_FRAME) erstellen müssen?

War es hilfreich?

Lösung

Für ein Programm (Shader) können Sie mehrere Texturen haben.Normalerweise schreiben Sie ein Programm für jeden Shader, den Sie haben. Zum Beispiel habe ich in meinem Spiel einen Shader (Programm) für die Geländebeleuchtung, Texturierung und Färbung.Ich habe einen anderen Shader (Programm) für das Wasser.

Die Programme werden also einmal erstellt, aber ich sage context3d, welches Programm verwendet werden soll, bevor die Szene gezeichnet wird.Auf diese Weise wird alles gezeichnet, was ich mit dem aktuellen Programm zeichnen möchte.

Anwendungsbeispiel:

context3d.setProgram(WaterShader);
water.drawTriangles();

context3d.setProgram(TerrainShader)
terrain.drawTriangles();

Ich zeichne zuerst das Wasser und dann das Gelände mit jeweils einem anderen Shader. Mein TerrainShader verfügt über mehrere Texturen, z.Sand-, Fels- und Schmutztexturen.Der Shader entscheidet, welche Textur zu einem bestimmten Zeitpunkt verwendet werden soll.Z.B.Wenn die Höhe des Scheitelpunkts <10 ist, verwenden Sie die Sandtextur.

Erstellen Sie die Programme also einmal und verwenden Sie sie bei Bedarf.

Ich hoffe, das hilft Ihnen auf die richtige Weise.

Andere Tipps

Sie benötigen nicht für jede Textur ein neues Program3D.Der Renderer verwendet den letzten Programmsatz, wenn Sie drawTriangles () aufrufen.Wenn Sie bestimmte Texturen unterschiedlich behandeln müssen, sodass Sie einen anderen Fragment-Shader benötigen, benötigen Sie mehr als ein Program3D-Objekt. In seltenen Fällen benötigen Sie jedoch für jedes Objekt und jede Textur einen anderen Shader.

Nachdem ich keinen Motor geschrieben habe, kann ich Ihnen nicht sagen, wie dies normalerweise gemacht wird.Ich würde denken, Sie hätten verschiedene Program3D-Objekte für verschiedene Klassen von Modellen, Umgebungskarten usw. Wahrscheinlich nicht eines pro Entität.Sie sind auf ca. 4000 Program3D-Objekte beschränkt.

Ja, Sie sollten Ihre Program3D-Objekte im Voraus erstellen und initialisieren.Während des Renderns rufen Sie Context3D.setProgram () auf, um das aktive Programm anzugeben.Dieses Programm wird zum Rendern verwendet, bis Sie es ändern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top