Vorlesungsskript Computergraphik II - IWR
Vorlesungsskript Computergraphik II - IWR
Vorlesungsskript Computergraphik II - IWR
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
2.3. C FOR GRAPHICS 31<br />
Abbildung 2.13. Zwei Partikelsysteme mit Point sprites, die eine Flamme und einen Wasserstrahl mit entsprechend<br />
unterschiedlichem Gravitationsverhalten darstellen. Bild von Daniel Jungblut.<br />
in der Hochsprache C/C++ nicht der Fall ist. Cg dagegen kennt die Datentypen float2, float3,<br />
float4 beziehungsweise entsprechende Vektoren, die mit den Standardnamen anderer Datentypen<br />
und den Ziffern 2, 3 und 4 gebildet werden. Sie sind NICHT äquivalent mit einem Array derselben<br />
Länge in C/C++, da die Vektoren als sogenannte Packed arrays gespeichert werden.<br />
float x[4] ≠ float4 x<br />
Vektoren sind KEINE Keywords der Programmiersprache, könnten also als Identifier verwendet werden.<br />
Man sollte es aber vermeiden, um Verwirrungen vorzubeugen.<br />
Bemerkung 2.3 Wenn zwei Input-Vektoren als packed arrays gespeichert sind, können typische vektorwertige<br />
Operationen (skalare Multiplikation, Addition, Negation, Skalarprodukt, Kreuzprodukt,<br />
Vertauschen von Indizes) in einer einzigen Instruktion berechnet werden. Packed arrays helfen dem<br />
Cg-Compiler, die schnellen Vektoroperationen der programmierbaren GPUs auszunutzen. Die GPU<br />
ist ein Vektorrechner.<br />
Außerdem sollte man beachten, dass man auf die einzelnen Einträge eines Vektors sehr effizient mit<br />
der Ziffer des entsprechenden Index zugreift. Dagegen ist ein Zugriff über eine Referenz, die erst<br />
ausgewertet werden muss, ineffizient oder sogar unmöglich.<br />
float4 x = {1.0, 0.0, 1.0, 1.0};<br />
// Initialisieren wie in C