Download - Benjamin Granzow Portfolio
Download - Benjamin Granzow Portfolio
Download - Benjamin Granzow Portfolio
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
2.5. GPU PROGRAMMIERUNG 18<br />
anschließend in Bildschirmkoordinaten (Projectionmatrix) umgerechnet. Im<br />
Verlauf des Shaders muss dabei gl Position mit den neuen transformierten<br />
Vertex-Attributen gefüllt werden. Das Vertexshader-Programm wird für jeden<br />
Vertex einzeln aufgerufen. Im Listing 2.1 ist ein simples Beispiel für ein<br />
Vertexshader Programm aufgeführt.<br />
2.5.2 Fragmentshader<br />
Der Fragmentshader wird von jedem Fragment einzeln durchlaufen. Dieser<br />
bekommt das Fragment, mit den interpolierten Vertex-Attributen, und<br />
weitere beliebige Werte durch die Varyings. Durch diese Informationen wird<br />
der endgültige Farbwert jedes Fragmentes berechnet. Dafür können beliebige<br />
Berechnungen angewendet oder Texturen ausgelesen und weiterverarbeitet<br />
werden. Auch Post-Processing-Effects wie Bloom, Blur oder Beleuchtung<br />
werden hier errechnet. Auch ist es möglich, gezielt Fragments zu verwerfen<br />
um Löcher in Objekten zu realisieren. Im Verlauf des Shaders muss dabei<br />
gl FragColor die endgültige Fragmentfarbe zugewiesen werden.<br />
Ein simples Beispiel für einen Fragment Shader ist in Listing 2.2 aufgeführt.<br />
varying vec2 textCoord ;<br />
uniform sampler2D t e x t u r e ;<br />
void main ( void )<br />
{<br />
// Lesen der Fragmentfarbe an der P o s i t i o n der Texturkoordinate<br />
g l F r a g C o l o r = texture2D ( texture , textCoord ) ;<br />
}<br />
Listing 2.2: Minimum Fragment Shader in GLSL<br />
Die OpenGL ES Pipeline ist auf den Vertex- und Fragmentshader beschränkt<br />
und diese Shadertypen sind auch zwingend erforderlich. Wenn diese nicht<br />
implementiert werden, ist es nicht möglich das Shaderprogramm zu kompilieren<br />
und auf die Grafikkarte zu übertragen. So etwas wie Standardimplementationen,<br />
welche bei nicht vorhanden sein verwendet werden, sind nicht<br />
vorhanden. Auf der Standard OpenGL Pipeline stehen noch zwei weitere<br />
Shader zu Verfügung. Dabei handelt es sich um den Tesselationshader und<br />
den Geometryshader und diese dienen dazu, die geometrischen Primitiven<br />
zu manipulieren und zu verfeinern. Diese Shadertypen sind dort optional<br />
und können weggelassen werden. Detailliertere Informationen zum Thema<br />
OpenGL ES können dem Buch OpenGL ES 2.0 Programming Guide[8] entnommen<br />
werden.