Skybox: Unterschied zwischen den Versionen
(→Konzept) |
(→Konzept) |
||
Zeile 10: | Zeile 10: | ||
Wenn man nun die Skybox zuerst zeichnet und anschließend den [[Tiefenpuffer|Depthbuffer]] löscht, erreicht man, dass die Skybox anschließend immer an den Stellen verdeckt wird, wo sich noch andere [[Fragment|Fragmente]] der Szene befinden. Dies ist logisch, da gegenüber den Fragmenten der Skybox, die bereits im Framebuffer stehen, alle anderen Fragmente den [[Tiefentest]] bestehen. | Wenn man nun die Skybox zuerst zeichnet und anschließend den [[Tiefenpuffer|Depthbuffer]] löscht, erreicht man, dass die Skybox anschließend immer an den Stellen verdeckt wird, wo sich noch andere [[Fragment|Fragmente]] der Szene befinden. Dies ist logisch, da gegenüber den Fragmenten der Skybox, die bereits im Framebuffer stehen, alle anderen Fragmente den [[Tiefentest]] bestehen. | ||
− | Die sechs Texturen können alternativ auch in einer [[ | + | Die sechs Texturen können alternativ auch in einer [[Cubemap]] gespeichert werden und dann nur die Flächen, die speziell als Himmel markiert sind, mit dieser [[Cubemap]] gezeichnet werden. Falls die SkyBox immer nur ausschnittweise zu sehen ist, kann dadurch das Rendern vereinfacht werden und das Löschen des [[Tiefenpuffer|Depthbuffer]] entfällt. |
Eine Skybox erhält noch wesentlich mehr Realismus, wenn man sie durch dynamische Effekte, wie z.B. Wolken, die sich bewegen oder eine Sonne, die auf- und untergeht, erweitert. | Eine Skybox erhält noch wesentlich mehr Realismus, wenn man sie durch dynamische Effekte, wie z.B. Wolken, die sich bewegen oder eine Sonne, die auf- und untergeht, erweitert. |
Version vom 3. September 2004, 15:57 Uhr
Inhaltsverzeichnis
Konzept
Das Wort Sky kommt aus dem Englischen und bedeutet Himmel. Skyboxen werden verwendet, um die Umgebung in 3D-Szenen darzustellen. Dazu zählen z.B. Landschaften im Hintergrund sowie Sonne, Himmel und Wolken. Da diese Orte nur als Kulisse dienen und für den Programmablauf meist ohne Bedeutung sind, verwendet man für deren Darstellung einfache Texturen.
Sobald man sich in einer Szene jedoch frei bewegen kann, entstehen mehrere Probleme.
- Zum einen müssen die Texturen so an einander gefügt werden, dass man den Trick nicht durchschaut und erkennt, dass es sich lediglich um Texturen handelt,
- zum anderen muss sich die Textur stets in gleicher Entfernung vom Beobachter befinden, damit man sich ihr nicht nähern kann.
- Obendrein darf die Textur jedoch andere Szenenteile, die erreichbar sind, nicht verdecken.
Im Prinzip ist das Problem recht leicht zu lösen.
Für die Darstellung der Umgebung nutzt man einen einfachen Würfel (=Skybox), dessen 6 Seiten mit jeweils einer Textur versehen werden, wobei jede Seite des Würfels einen Umgebungsausschnitt mit einem Projektivwinkel von 90°C zeigt, um so quasi ein Panorame der Umgebung zu bilden. Auf die Oberseite projiziert man den Himmel und an die Unterseite den Boden. Die 4 anderen Seiten stehen für die jeweiligen Himmelsrichtungen.
Wenn man nun die Skybox zuerst zeichnet und anschließend den Depthbuffer löscht, erreicht man, dass die Skybox anschließend immer an den Stellen verdeckt wird, wo sich noch andere Fragmente der Szene befinden. Dies ist logisch, da gegenüber den Fragmenten der Skybox, die bereits im Framebuffer stehen, alle anderen Fragmente den Tiefentest bestehen.
Die sechs Texturen können alternativ auch in einer Cubemap gespeichert werden und dann nur die Flächen, die speziell als Himmel markiert sind, mit dieser Cubemap gezeichnet werden. Falls die SkyBox immer nur ausschnittweise zu sehen ist, kann dadurch das Rendern vereinfacht werden und das Löschen des Depthbuffer entfällt.
Eine Skybox erhält noch wesentlich mehr Realismus, wenn man sie durch dynamische Effekte, wie z.B. Wolken, die sich bewegen oder eine Sonne, die auf- und untergeht, erweitert.
Skyboxen können mit verschiedenen Programmen wie z.B. [[1]] erzeugt werden.
Beispiel
Obiges Beispiel zeigt alle sechs Seiten die für eine statische Skybox benötigt werden, inklusive ihrer entsprechenden Koordinatenachsen.
Siehe auch