Vorlesungsskript Computergraphik II - IWR
Vorlesungsskript Computergraphik II - IWR
Vorlesungsskript Computergraphik II - IWR
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
2.3. C FOR GRAPHICS 37<br />
}<br />
// Erzeugung der 2D-Skalierungsmatrix:<br />
float2x2 scale_matrix = float2x2(scale_factor, 0.0, 0.0, scale_factor);<br />
float sin_rot, cos_rot;<br />
sincos(rotation, sin_rot, cos_rot);<br />
float2x2 rotation_matrix = float2x2(cos_rot, -sin_rot, sin_rot, cos_rot);<br />
// Transfomieren der Vertices mit Hilfe der Skalierungsmatrix:<br />
out_position = float4(mul(scale_matrix, mul(rotation_matrix, position.xy)), 0, 1);<br />
Beispiel 2.8 Ebenfalls zum vorhergehenden Beispiel passend ist hier ein ganz einfaches Cg-Fragmentprogramm<br />
aufgeführt.<br />
/*<br />
Simple fragment shader<br />
by Daniel Jungblut, <strong>IWR</strong> Heidelberg, February 2008.<br />
*/<br />
void simple_fragment_shader(out float4 out_color : COLOR, uniform float3 color) {<br />
}<br />
out_color = float4(color, 1.0);<br />
2.3.9 Parameter, Texturen und mathematische Ausdrücke<br />
Mit dem Qualifier uniform werden Parameter eines externen Programms an das Cg-Programm<br />
übergeben. Wenn eine Variable NICHT initialisiert wurde, kann das in der Entry function geschehen.<br />
Hier können auch mit dem Qualifier const nicht veränderbare Konstanten gesetzt werden.<br />
const float pi = 3.14159;<br />
// NICHT veraenderbar!!!<br />
pi = 4.0; // NICHT erlaubt!<br />
float a = pi++; // NICHT erlaubt!<br />
Texture sampler werden uniform übergeben, d.h. sie treten als Teil einer Eingabe an den Fragmentprozessor<br />
auf.<br />
uniform sampler2D decal<br />
// Teil einer IN-Struktur<br />
Um auf eine Textur zuzugreifen, gibt es Standard Cg Funktionen, die den Namen der uniform übergebenen<br />
Textur mit den Texturkoordinaten versieht und als Farbe zurückgibt.