Integration von 3D-Visualisierungstechniken in 2D-Grafiksystemen
Integration von 3D-Visualisierungstechniken in 2D-Grafiksystemen
Integration von 3D-Visualisierungstechniken in 2D-Grafiksystemen
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