Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Mai 14, 2024 20:45

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Nov 18, 2013 18:28 
Offline
DGL Member

Registriert: So Nov 17, 2013 17:17
Beiträge: 6
Programmiersprache: Java, etwas C++
Hallo Community,

zum Thema Shader hätte ich eine kurze Verständnisfrage:
Der Vertex-Shader ersetzt ja die Modelview und die Projection Matrizen. Nun habe ich den Eindruck, dass der Fragment-Shader nicht wirklich etwas ersetzt, sondern "eingeschoben" wird. Und genau da bin ich mir über die Stelle nicht ganz im Klaren. Dass es nach der Rasterisierung sein muss ist klar, aber ich bin mir unsicher, ob der Fragment Shader vor oder nach dem Tiefentest stattfindet. Ich meine, beide Möglichkeiten mal gelesen zu haben.. oderbin ich da auf dem Irrweg?
Also es geht mir jetzt nur um die genaue Vorstellung von der Pipeline.

Vielen Dank schonmal,
Mark


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Nov 18, 2013 18:32 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
Da Du scheinbar C++ verstehst, lege ich Dir mal dieses schicke Buch nahe:

http://www.arcsynthesis.org/gltut/


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Nov 18, 2013 18:35 
Offline
DGL Member

Registriert: So Nov 17, 2013 17:17
Beiträge: 6
Programmiersprache: Java, etwas C++
Danke Dir! Schau ich mir dirket mal an :)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Nov 18, 2013 19:15 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 588
Programmiersprache: C++
MarkusPh hat geschrieben:
Der Vertex-Shader ersetzt ja die Modelview und die Projection Matrizen.
Nein. Der Vertexshader benutzt sie - oder auch nicht. Shader ersetzen Teile der Fixed-Function-Pipeline. Bei letzterer wurden die Vertices immer mit den von dir genannten Matrizen transformiert. Den Vertexshader kann man so programmieren, dass er genau das Gleiche tut. In dem Fall übergibt man die Matrizen als uniform-Variable. (Bei älteren GLSL-Versionen sind schon Variablen für die Matrizen vordeklariert.) Man hat aber die Freiheit, den Vertexshader etwas ganz anderes machen zu lassen - gerade das ist ja der Vorteil von Shadern.

MarkusPh hat geschrieben:
Nun habe ich den Eindruck, dass der Fragment-Shader nicht wirklich etwas ersetzt
Da täuscht dich dein Eindruck. Der Fragmentshader legt z.B. fest, wie viel Texturfetches pro Fragment gemacht werden und wie die Resultate miteinander kombiniert werden. In der festen Funktionspipeline hat man solche Sachen mit API-Aufrufen seitens der CPU eingestellt (siehe Tutorial_MultiTexturing). Der Fragmentshader kann auch Nebel- oder Lichteffekte berechnen - der Programmierer ist da relativ frei.

Um den Fragmentshader nochmal genau einzuordnen: Der Rasterizer berechnet aus jeweils 3 Vertices (Resultate des Vertexshaders), die ein Dreieck beschreiben, die Fragmente/Pixel die in dem Dreieck liegen. Für jeden dieser Fragmente startet er einmal den Fragmentshader, welcher dann die Farbe des Fragments berechnet.

MarkusPh hat geschrieben:
ich bin mir unsicher, ob der Fragment Shader vor oder nach dem Tiefentest stattfindet.
Es gibt beides. Im Normalfall wird der Tiefentest stattfinden, bevor der Fragmentshader ausgeführt wird. Denn je weniger Instanzen des Shaders gestartet werden müssen, desto schneller. Es gibt allerdings auch Fragmentshader, die den Tiefenwert noch verändern. Das muss der Grafiktreiber erkennen, sodass er den Tiefentest erst ausführt, wenn der Z-Wert des Fragments endgültig feststeht.

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Nov 18, 2013 19:31 
Offline
DGL Member

Registriert: So Nov 17, 2013 17:17
Beiträge: 6
Programmiersprache: Java, etwas C++
Vielen Dank für die Antwort!!
Stimmt, im Bezug auf den Vertex-Shader hab ich das falsch formuliert: Um die Pipeline mit ihren minimalen Aufgaben nachzubauen benutzt man die Matrizen im Shader, sie werden nicht ersetzt. Sorry!

Das Gefühl, dass der Fragment-Shader nichts wirklich "ersetzt" kam bei mir durch Tutorial, in denen ein minimaler Fragmentshader lediglich die Farbe weiterreicht.

Super, dass es tatsächlich beides gibt (vor oder nach dem Tiefentest) hilft mir sehr weiter :)

Danke Dir sehr!!


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 14 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.026s | 17 Queries | GZIP : On ]