05.10.2013 Aufrufe

Integration von 3D-Visualisierungstechniken in 2D-Grafiksystemen

Integration von 3D-Visualisierungstechniken in 2D-Grafiksystemen

Integration von 3D-Visualisierungstechniken in 2D-Grafiksystemen

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Kapitel 3. Realisierung<br />

3.2.2.2. Render<strong>in</strong>g mit Framebu er Objekten<br />

Um das Render<strong>in</strong>g <strong>von</strong> dem verwendeten OpenGL-Zeichenbereichs unabhängig zu<br />

machen, und hiermit sowohl O screen Render<strong>in</strong>g als auch Render<strong>in</strong>g <strong>in</strong> existierenden<br />

Fenstern zu ermöglichen, arbeiten die im folgenden Abschnitt beschriebenen Methoden<br />

zur Rasterisierung auf Framebu er Objekten. Dies hat im Falle e<strong>in</strong>es bereits<br />

existierenden OpenGL-Kontextes die Vorteile, dass der Standard-Framebu er nicht<br />

manipuliert wird und der verwendete Framebu er so stets e<strong>in</strong>e feste Größe hat. Weiterführende<br />

Informationen zur Erstellung und Verwendung <strong>von</strong> Framebu er Objekten<br />

s<strong>in</strong>d <strong>in</strong> [15, Abschnitt 3.1.2] zu f<strong>in</strong>den.<br />

3.2.2.3. Erstellung <strong>von</strong> Rastergrafiken mit OpenGL<br />

OpenGL ist <strong>von</strong> Konzepten wie e<strong>in</strong>er Szene unabhängig. Im Gegensatz zu Raytracern<br />

wie POV-Ray stehen bei OpenGL ke<strong>in</strong>e „Lichtstrahlen“ im Vordergrund, sondern die<br />

e<strong>in</strong>zelnen geometrischen Primitiven. Vere<strong>in</strong>facht gesagt, wird für jedes Dreieck bestimmt,<br />

welche Pixel es im Bild e<strong>in</strong>nimmt, und diese werden, wenn sie nicht bereits<br />

durch näher an der Kamera liegende Primitiven gesetzt wurden, den Eigenschaften<br />

des Dreiecks gemäß e<strong>in</strong>gefärbt. Die Interpretation dieser Dreiecke als Oberflächen<br />

dreidimensionaler Körper ist dem Nutzer <strong>von</strong> OpenGL überlassen. Dieser wird dennoch<br />

dabei unterstützt, Gruppen <strong>von</strong> Dreiecken als zusammenhängende Körper zu<br />

betrachten, da es Funktionen gibt, welche auf mehreren Dreiecken arbeiten (z. B.<br />

transformieren oder zeichnen). Diese werden dazu verwendet, die e<strong>in</strong>zelnen Körper<br />

der Szene zu beschreiben und zu zeichnen.<br />

Wie e<strong>in</strong>leitend beschrieben, gibt es zwei Varianten der OpenGL-Rasterisierungs-<br />

Pipel<strong>in</strong>e. Im Folgenden wird beschrieben, wie die Shader-basierte Pipel<strong>in</strong>e (siehe Abbildung<br />

3.5) genutzt wurde, um e<strong>in</strong>e Rastergrafik zu erzeugen. Die realisierte Funktionalität<br />

ist mit der Fixed-Function-Pipel<strong>in</strong>e ebenfalls umsetzbar und wurde aus<br />

Gründen der Abwärtskompatibilität auch als Teil <strong>von</strong> GR3 implementiert.<br />

Die mit den Funktionen der Szenenverwaltung erstellten Dreiecksgitter werden <strong>in</strong><br />

OpenGL als Vertex Bu er Objekte behandelt. Dies s<strong>in</strong>d Bereiche des Grafikkartenspeichers,<br />

<strong>in</strong> welche die Daten der e<strong>in</strong>zelnen Vertices geschrieben werden. Für jeden<br />

Vertex müssen dessen Position, Oberflächennormale und Farbe gespeichert werden.<br />

Sie werden als float gespeichert, sodass e<strong>in</strong> Vertex <strong>in</strong>sgesamt 36 Byte Speicher benötigt.<br />

Die Vertices e<strong>in</strong>es solchen Vertex Bu er Objektes werden durch e<strong>in</strong>en Aufruf der<br />

Funktion glDrawArrays zur E<strong>in</strong>gabe der Pipel<strong>in</strong>e. Dort werden sie (unter anderem)<br />

durch den Vertex-Shader bearbeitet, und die e<strong>in</strong>zelnen Pixel können dann im<br />

Fragment-Shader e<strong>in</strong>gefärbt werden.<br />

Bei der Berechnung der Farbe e<strong>in</strong>es jeden Pixels wird da<strong>von</strong> ausgegangen, dass die<br />

Oberfläche ideal di us ist, das heißt, dass sie das e<strong>in</strong>fallende Licht <strong>in</strong> alle Richtungen<br />

gleichmäßig streut. Für solche Oberflächen gilt das Lambert’sche Gesetz, welches die<br />

Intensität des reflektierten Lichts abhängig vom W<strong>in</strong>kel zwischen den e<strong>in</strong>fallenden<br />

Lichtstrahlen und der Oberflächennormalen beschreibt (s. Abb. 3.6). Für diesen W<strong>in</strong>-<br />

18

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!