Frage

Ich experimentiere mit Shader mit der Verarbeitung 2.0. Als einfacher Ausstattung in Verständnis von Point Shader Etwas besser habe ich ein System implementiert, wonach in einer Sprite-Klasse:

    .
  1. Ich stellte eine SpritSheSheet als einheitlicher Sampler2D im Fragment-Shader ein. 2048x 2048 (12 x 12 Frames von 128 Pixel-Quadrat)
  2. Ich erstelle einen Punkt.
  3. Ich setze UV-Koordinaten in der Scheitel-Shader für den Punkt.
  4. Ich verreche die UV-Koordinaten in dem Scheitelpunkt-Shader, indem eine Ganzzahl als einheitliche Variable eingeleitet wird, um "Frames" in der SpritSheet
  5. auszuwählen
  6. Ich aktualisiere die Ganzzahl (mit MODULUS to loop and) inkrementieren der UV-Versatz alle 5 Frames in der Anwendung.
  7. Dies bedeutet, dass ich grundlegende Animationssequenzen aus dem Schecks-Shader erledigen kann. Ich habe keine Ahnung, ob das wünschenswert ist, aber ich vermute, dass es besser werden würde, als ein neues Uniform SampleLer2D in den Fragment-Shader zu setzen, wenn ich Frames ändern möchte.

    Meine Frage ist - wie kann ich diesen Shater über mehrere Instanzen verwenden? Wenn ich zwei der Sprites auf dem Bildschirm auf dem Bildschirm mit jeweils mit unterschiedlichen Werten (dh verschiedene Frames der Animation spielen) möchte, wie wird dies ohne jeweils einen eigenen PointShader und damit eine eigene Kopie des Uniform SampleLer2D im Speicher erreicht?

    Ich hoffe, Sie können helfen.

War es hilfreich?

Lösung

Ja, dieser Ansatz ist viel besser, dann neue Texturen in jedem Rahmen einstellen.

Um mehrere Sprites zu zeichnen, verwenden Sie einfach das gleiche Programm und zeichnen Sie die Objekte nacheinander mit unterschiedlichen Uniformen:

1: Gluseprogramm (YourProgramm);

2: deSet Texture und UV für das erste Objekt

3: ..draw erster objekt

4: ..set neue Textur (oder die gleiche Textur behalten, sind die Sprite da) ..Set den UVs für das zweite Objekt

5: ..draw zweitobjekt und so weiter

edit: Das Programm ist nicht an die von Ihnen gestellten Uniformen gebunden, Sie können dann immer ändern und Anruf erneut anrufen.

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