Eine der aufwendigsten Aufgaben bei 3D Programierung in C++ C sind Schatten in OpenGL und DirectX!Schatten (Shadow) werden oft bei der Entwicklung mit Schattierung (Shading) verwechselt, obwohl Sie zusammen für den Eindruck der 3D Landschaft verantwortlich sind. Ist die Schattierung jedoch deutlich einfacher als komplexe Schatten-Berechnung und die Entscheidung, ob Mapping oder Echtzeit Schatten-Berechnung, sowie die Frage wann macht was Sinn! Hier in diesem FAQ werde ich Informationen zum Thema 3D Schatten zusammenfassen und erweitern! Inhalt: 1.) ... Der Schatten und Schattierung Unterschied Shadow vs Shadow!
|
(Bild-1) Schatten vs Schattierung |
2.) Beispiel 1 Schattierung mit getestetem Quell-Code!
Das Beispiel Links im Bild: ► OpenGL 2.1 - GLSL shadow cube mapping
Das Schatten-Beispiel Rechts: ►► OpenGL 2.1 - Fast realistic soft penumbra shadows
Ein Weiteres vom gleichen Autor: ►► Software shadow mapping << Recht interessant da Software ;-)
Und: Terrain, BSP-Baum, Frustum-Culling, Sortierung, Shadow-Mapping
Info:
Alle drei Projekte habe ich getestet, man kann es mit jedem Visual Studio 2008, 2017, ... compilieren (erstellen), ja sogar mit dem alten VC 6.0. Das "fast realistic .. " stürzt ab, im Quellcode "Pause = true;" setzen! Die Quellcodes sind ganz unten auf der jeweiligen Seite downloadbar!
Alle drei Projekte habe ich getestet, man kann es mit jedem Visual Studio 2008, 2017, ... compilieren (erstellen), ja sogar mit dem alten VC 6.0. Das "fast realistic .. " stürzt ab, im Quellcode "Pause = true;" setzen! Die Quellcodes sind ganz unten auf der jeweiligen Seite downloadbar!
(Bild-2) 3D C++ C Schatten in OpenGL! |
3.) Das klassische Shadow Beispiel von OpenGL!
1. Drehwürfel mit dynamischen Schatten (läuft auch im Farbindexmodus!).
Seite ►►OpenGL - Examples Quellcode: ► scube.c
2. Das Klassische, springender Dino mit Schatten als Beispiel
Seite: ►... opengl.org ...archives ... examples/examples.html Quellcode: ►► dinoshade.c
3. Ein weiteres mit *.obj Dateien und Schatten! Weiche Schatten in Echtzeit. Drücken mit der 'h' Taste, es erscheint ein Hilfemenü. Ziehen Sie die mittlere Maustaste, um die Szene zu drehen.
Download: ► shadow.zip Seite: ... www.opengl.org/archives/resources/code/samples/more_samples/
(Bild-3) Klassisches Schatten Beispiele mit OpenGL! |
X.) Wozu diese Seite und weitere Links und Infos zu Schatten und Schattierung!
Die Seite wird regelmäßig erweitert! Es gibt im Internet viele, die hier ausgewählten sind aber geeignet um es zu verstehen und haben wenig Ballast! Es ist zumeist so, dass man etliche MB von Quellcode runterlädt und es ist schlecht geeignet um den Sinn, die Funktionsweise, ... zu verstehen!
►► OpenGL - Warum Schatten?
►► OpenGL - Was sind Shader?
►► .. learnopengl.com/Advanced-Lighting/Shadows/Shadow-Mapping
►► ... Super Mario 64 << paar Effekte und viel Quellcode als ein Beispiel bedingt nutzbar!
Wird auch erweitert!
Random number generator:
►► https://www.shadertoy.com/view/tsf3Dn
►► https://www.shadertoy.com/view/4slGD4
►► https://www.shadertoy.com/view/4ttSWf!
►► https://wiki.delphigl.com/index.php/Shadersammlung!
(Bild-4) Shader in OpenGL GLS |
Eine beliebte Methode zum Generieren einer benutzerdefinierten Textur für eine Höhenkarte besteht darin, Teile anderer "Quell" -Texturen so zu kombinieren, dass die resultierende Textur direkt den Merkmalen der Höhenkarte zugeordnet wird. Zum Beispiel könnte eine Schneetextur für die Gipfel von Bergen verwendet werden, eine Felsstruktur für Höhen, die nicht mit Schnee bedeckt sind, eine Grasstruktur für Gebiete unterhalb der Berge, eine Sandstruktur für Gebiete mit niedrigerem Strand und eine Wasserstruktur für die tiefsten Punkte auf der Karte. In diesem Artikel werden zwei Möglichkeiten zum Kombinieren von Texturen, Schneiden und Mischen betrachtet. Schneiden Sie Abschnitte von Texturen ab und nähen Sie sie zusammen, um eine neue Textur zu erhalten. Das Mischen, eine Verbesserung des Schneidens, mischt die Texturen zusammen, indem die Farbwerte der Abschnitte basierend auf den Höhenkartendaten gewichtet werden.
http://jeff.bagu.org/articles/ptg4heightmaps.html#
Auch interesant:
https://entwickler.de/online/development/opengl-landschaftsgestaltung-mit-height-maps-co-114982.html
Und:
http://shdr.bkcore.com
(Bild-5) 3D C++ C Schatten in OpenGL und DirectX! |
4.) Hier noch ein Programm mit Quelcode!
Dieses Programm zeigt eine einfache Szene, die von einem einzigen Licht beleuchtet wird. Die Szene wird zunächst aus der Sicht des Lichts gerendert und die Tiefenwerte in eine Textur geladen. Diese Textur wird dann aus der Sicht des Auges auf die Szene projiziert, und ein Vergleich mit der Entfernung vom Licht wird durchgeführt. Dies bestimmt abgeschattete Bereiche.
Diese Demo implementiert 8-Bit-„Dual Texture“-Shadow-Mapping und eine 16-Bit-Version mit Registerkombinatoren. 24-Bit-Hardware-Shadow-Mapping wird ebenfalls demonstriert.
►►► http://www.paulsprojects.net/opengl/shadowmap/shadowmap.html!
NVIDIA
►► https://developer.nvidia.com/sites/all/modules/custom/gpugems/books/GPUGems/gpugems_ch12.html
►► https://developer.nvidia.com/sites/all/modules/custom/gpugems/books/GPUGems/gpugems_ch09.html
Infos:
Schatten-Volumen sind nicht für alle Szenen ideal. Die Technik beinhaltet die Konstruktion eines 3D-Volumens, das alle von einem Objekt geworfenen Schatten umschließt. Dieses Volumen ist aus dem Netz des Schatten Werfers konstruiert; Einige Schatten-Werfer haben jedoch kein Netz, das ihre Form genau darstellt. Beispiele hierfür sind eine Werbetafel, ein Partikel System oder ein mit einer Alpha-Matte Texturiertes Netz (z. B. ein Baumblatt). Diese erzeugen Schatten basierend auf ihren tatsächlichen Maschen, die nicht mit dem tatsächlichen Erscheinungsbild der Objekte übereinstimmen. Beispielsweise wirft eine Rauchwolke auf einer Werbetafel einen rechteckigen Schatten.
(Bild-6) Schatten in OpenGL im SoftwareOK-3D Projekt |
FAQ 31: Aktualisiert am: 9 April 2022 20:50