11.03.2014 Aufrufe

Vorlesungsskript Computergraphik II - IWR

Vorlesungsskript Computergraphik II - IWR

Vorlesungsskript Computergraphik II - IWR

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!