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?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
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.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
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.
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?
Registriert: Mi Jul 17, 2002 12:07 Beiträge: 976 Wohnort: Tübingen
Jepp.
(Fast) genau das hat Fiji gemeint
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
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?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
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.
Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.