2016-11-18 3 views
0

Ich habe angefangen, mich heute mit Shadern zu beschäftigen und jetzt stecke ich fest. Ich möchte einen Shader auf bestimmte Akteure (Bilder) in einer Szene2d Bühne anwenden. Ist es überhaupt möglich? Ich habe nur eine Draw-Methode für die ganze Szene, aber nicht für einzelne Schauspieler oder Schauspieler-Gruppen.Set Shader für einzelne Darsteller

Außerhalb einer scene2d Bühne würde ich nur so etwas tun:

batch.setShader(shader); 
batch.begin(); 
batch.draw(Image); 
batch.end(); 
batch.setShader(null); 
batch.begin(); 

Wie dies in einer scene2d Umgebung zu erreichen?

+0

Ich bin mir nicht sicher, ob ich verstehen Du hast Recht oder nicht, aber du könntest einfach etwas wie 'stage.draw()' zwischen den 'setShader()' Aufrufen machen – Eames

+0

Yap, aber das ist dann die ganze Bühne, kein einziger Schauspieler – Draz

Antwort

1

können Sie den Shader innerhalb der Methode eines Schauspieler Unentschieden ändern und es dann wieder ändern (die Batch automatisch Spülung behandelt, wenn der Shader geändert wird):

public void draw (Batch batch, float parentAlpha){ 
    batch.setShader(customShader); 
    batch.draw(...); 
    batch.setShader(null); 
} 

Denken Sie daran, dass jedes Mal, wenn Sie dies tun, , wird der Stapel gespült. Wenn Sie ein paar Dutzend Schauspieler haben mit dem benutzerdefinierten Shader zu ziehen, sollten Sie sie wahrscheinlich in einer Gruppe setzen, dass der Shader ändert, so der Ansatz nur einmal für die Gruppe gespült wird:

//Custom Group: 
public void draw (Batch batch, float parentAlpha){ 
    batch.setShader(customShader); 
    super.draw(batch, parentAlpha); 
    batch.setShader(null); 
} 
+0

Wie änderst du die Zeichenmethode? ? – Eames

+0

Nicht sicher, was du meinst. Meine obigen Beispiele wären Ihre eigenen benutzerdefinierten Unterklassen von Actor und Group. – Tenfour04

+0

Oh okay, das war es, was ich dachte, ich war mir nicht sicher, ob es ein gültiger Weg war – Eames

Verwandte Themen