Wat is een OpenGL® -schaduw?
Een Open Graphics Library® (OpenGL®) Shadow is een visuele benadering in een driedimensionale (3D) OpenGL®-scène van hoe een schaduw in het echte leven zou worden gegoten onder vergelijkbare verlichtingsomstandigheden. Shadows zijn een complexe visuele functie om te implementeren in OpenGL®, grotendeels omdat er geen aangeboren ondersteuning is voor het gieten van schaduwen in een scène. Er zijn in plaats daarvan een verscheidenheid aan technieken die kunnen worden gebruikt om schaduwen uit de objecten en geometrie te maken in een scène met behulp van verschillende tools, zoals de verschillende beschikbare buffers, shaders en, in sommige gevallen, extensies die toegang geven tot speciale functies op bepaalde grafische kaarten. In de meeste gevallen is de kwaliteit, nauwkeurigheid en snelheid van OpenGL® -schaduwweergave direct gerelateerd aan de verwerkingskracht en het geheugen van de grafische hardware die in een computer of apparaat aanwezig is. Enkele van de meer populaire methoden voor het implementeren van een OpenGL® -schaduw omvatten schaduwvolumes, schaduwmapping en ray tracing.
Het creëren van een applicatie die OpenGL® -schaduwondersteuning heeft, vereist wiskundige kennis en een diep begrip van hoe OpenGL® werkt. OpenGL® wordt grotendeels gebruikt om 3D -scènes te maken die dynamisch zijn en in realtime worden weergegeven, dus de algoritmen die worden gebruikt om schaduwen te creëren, moeten niet alleen worden geoptimaliseerd voor snelheid, maar moeten ook zorgvuldig worden gemeten voor hun verbruik van middelen en eventuele verstoringen die kunnen worden veroorzaakt in de grafische pijpleiding die wordt gebruikt voor het renderen. Om deze redenen is de meest basale methode om een schaduw te creëren, Ray Tracing genaamd, vaak onpraktisch voor volledige 3D -scènes, omdat het heel lang kan duren.
Ray traceren volgt in principe een denkbeeldige lijn of straal, van het kijkvlak of de positie van de camera door een scène naar het oppervlak van een object en berekent vervolgens de kleur van het oppervlak op basis van de positie van een of meer lichtbronnen en andere factoren. Tijdens het proces van rasterisatie, waar de3D-scène wordt aangetrokken door een tweedimensionaal (2D) oppervlak, zodat het kan worden weergegeven, het proces van straaltracing moet worden uitgevoerd op elke pixel die wordt getekend en, vooral met texturen of andere oppervlakte-eigenschappen, misschien meerdere keren moet beoordelen. Dit betekent realtime ray tracing, hoewel het nauwkeurig schaduwen zou weergeven, is meestal niet praktisch.
Een andere methode die kan worden gebruikt om een OpenGL® -schaduw te maken, staat bekend als schaduwmapping. Deze methode gebruikt de diepte- of stencilbuffer om een scène uit de hoek van de lichtbron weer te geven als een reeks afstanden van de lichtbron tot de oppervlakken van verschillende objecten in de scène. De scène wordt vervolgens een tweede keer weergegeven vanuit de juiste kijkhoek en controleert of elke pixel binnen een bepaald afstandsbereik binnen de buffer valt, wat aangeeft of de pixel wordt aangestoken of overschaduwd. Het gebruik van schaduwmapping kan geheugenintensief zijn en met scènes met meer dan één lichtbron, kan m betreffenAking meerdere kaarten vanuit meerdere hoeken.
Schaduwvolumes zijn een manier om een OpenGL® -schaduw te maken die nauwkeuriger is dan sommige andere methoden, maar het biedt zijn eigen problemen. Een schaduwvolume is in wezen een onzichtbaar stuk geometrie in een scène die zich uitzet van het verlichte oppervlak van een object weg van de lichtbron. Dit volume kan worden gecontroleerd tegen andere objecten om te zien of ze in de schaduw van het oppervlak vallen waaruit het volume is voortgekomen. Deze procedure kan zeer complex zijn en uiteindelijk visuele artefacten creëren wanneer geoptimaliseerd voor snelheid.