DGL
https://delphigl.com/forum/

Zuordnung der Shader zu Objekten
https://delphigl.com/forum/viewtopic.php?f=20&t=3534
Seite 1 von 1

Autor:  Karl [ Di Nov 30, 2004 18:50 ]
Betreff des Beitrags:  Zuordnung der Shader zu Objekten

Habe eine ganz allgemeine Verständnisfrage diesmal zu Shadern.

Habe mir mal das Einführungstutorial zu GLSlang von Sascha Willems angeschaut. Ist auch für mich als Einsteiger relativ verständlich,
aber jetzt mal eine ganz allgemeine Frage.

Dazu folgendes Bsp.
Ich habe eine Ebene mit 2 Kugeln oder Würfeln oder was auch immer, eine links, eine rechts. Diese zeichne ich doch noch ganz normal
über die Standard OpenGlfunktionen. (Gl_Quad, GL_Triangle etc) oder?
Das linke Objekt soll mit einem Shader versehen werden, der dem Objekt eine rauhe, matte Oberfläche zuordnet, das rechte Objekt
soll so aussehen, als ob es aus Wasser wäre (Wie auch immer die Shader dafür aussehen würden!!)
Die Ebene soll so belassen werden wie OpenGl sie standardmässig rendert.

Frage: wie teile ich dem oder den Shadern mit, für welche Objekte sie zuständig sind? Oder liege ich schon vom Grundgedanken her falsch,
das ich Objekte überhaupt noch mit der fixen Pipeline rendern kann?

Autor:  Sascha Willems [ Di Nov 30, 2004 18:53 ]
Betreff des Beitrags: 

OpenGL ist eine Statemachine, weshalb es mit Shadern genauso ist wie mit Texturen oder Farben oder sonstigen States : Ein Shader wird solange genutzt, bis ein anderer Shader aktiviert wird oder der Shader deaktiviert werden.

Autor:  Raphael O. [ Di Nov 30, 2004 18:55 ]
Betreff des Beitrags: 

nochmal am beispiel klargemacht, wie das ganze aussehen würde (Pseudocode)

renderschleife anfang

Shader1 aktivieren =rauher matter shader

kugel 1 rendern

shader 1 deaktivieren
shader 2 aktivieren = wassershader

kugel2 rendern

shader 2 deaktivieren

Rest normal zeichnen

Autor:  Sascha Willems [ Di Nov 30, 2004 18:57 ]
Betreff des Beitrags: 

Die Sache von Fiji ist leider nicht ganz korrekt. Statemaschine bedeutet dass man Objekte nicht erst deaktivieren muss bevor andere aktiviert werden, sondern es wird immer nur gewechselt. Das "Deaktivieren" der Shader fällt also weg.

Autor:  Raphael O. [ Di Nov 30, 2004 19:00 ]
Betreff des Beitrags: 

:oops: ;)

Autor:  Karl [ Di Nov 30, 2004 19:29 ]
Betreff des Beitrags: 

Danke schon mal für die Antworten :D

Ok, das mit der Statemachine ist klar.

Wenn ich jetzt also meine Szenen mit den Kugeln anzeigen lassen möchte, müsste ich zuerst den Shader laden (Rauh, matt), dann die Kugel zeichnen (Per Standard-Pipeline), dann einen anderen Shader laden (Wasser) und dann die zweite Kugel zeichnen (auch per Standard GL-Pipeline), dann den Shader deaktivieren und dann den Boden zeichnen?

Autor:  La Boda [ Di Nov 30, 2004 19:48 ]
Betreff des Beitrags: 

Jepp.
(Fast) genau das hat Fiji gemeint 8)

Autor:  Gast [ Di Nov 30, 2004 20:11 ]
Betreff des Beitrags: 

Ok, das ist dann schon mal verstanden. Abschliessend dann aber noch mal eine Frage.

Angenommen, ich hätte meine Kugeln so gerendert wie ich sie mir vorstelle (rauh u. matt, Wasser), möchte dann
aber noch die komplette Szene mit einen Blur-effekt versehen.

Wie müsste man dazu vorgehen ? Die Szene ist ja im Prinzip schon fertig gerendert, müsste man einen "Blur-Shader" laden und
alle Objekte nochmal rendern ? Oder müsste der Shader für jedes Objekt um den "Blur-Shader" erweitert werden und damit jedes
Objekt separat "Verblurrt" (Sorry, ein anderer Ausdruck fällt mir nicht ein) werden?

Autor:  Sascha Willems [ Di Nov 30, 2004 20:52 ]
Betreff des Beitrags: 

Blur ist ein Vollbildeffekt, den man nicht direkt auf Objekte anwenden kann. Für sowas muss man die fertige Szene in eine Textur kopieren (am besten direkt in einen P-Buffer rendern), auf diese Texturen den Shader anwenden, und die Textur dann am Ende bildschirmfüllend (Ortho-Modus) rendern.

Autor:  Karl [ Di Nov 30, 2004 21:01 ]
Betreff des Beitrags: 

Alles klar !

Werde, bevor ich hier weiter Fragen über Fragen stelle, erstmal ein paar Gehversuche mit Shadern starten.

Danke schon mal für alle Antworten... :)

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/