<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://wiki.delphigl.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mars</id>
		<title>DGL Wiki - Benutzerbeiträge [de]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.delphigl.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mars"/>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php/Spezial:Beitr%C3%A4ge/Mars"/>
		<updated>2026-05-30T23:34:43Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.27.4</generator>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Scanlinerenderer&amp;diff=12498</id>
		<title>Scanlinerenderer</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Scanlinerenderer&amp;diff=12498"/>
				<updated>2004-10-21T09:49:32Z</updated>
		
		<summary type="html">&lt;p&gt;Mars: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Unter &amp;quot;Scanline rendern&amp;quot; versteht man im Allgemeinen die Methode, Polygone in horizontale Linien aufzuteilen, die dann besonders effektiv (sprich schnell) gezeichnet werden können.&lt;br /&gt;
Scanlines ergeben sich ganz automatisch aus der Organisation des Videospeichers, den man sich als zweidimensionales Feld vorstellen kann, bei dem horizontale Pixel genau hintereinander liegen - wenn man also horizontal benachbarte Pixel zeichnet, so ist keine weitere Offsetberechnung nötig, und man kann direkt mit wiederholten Maschinenbefehlen (auf Intel Architektur z.B. mit rep Präfix) darauf zugreifen.&lt;br /&gt;
Dass der Videospeicher so aufgebaut ist, ergibt sich übrigens wiederum daraus, dass es früher nur Kathodenstrahlröhren als Bildschirme gab, bei denen der Elektronenstrahl durch Magnetfelder zeilenweise horizontal über die Lochmaske (oder ganz früher die Lumineszenzschicht) gesteuert wurde, d.h. es war wichtiger schnell auf horizontal benachbarte Bilddaten zugreifen zu können.&lt;br /&gt;
&lt;br /&gt;
Auch wenn inzwischen Softwarelösungen zum Rendern ziemlich in den Hintergrund getreten sind, gelten für 3D-Hardware doch die selben Prinzipien, die ansonsten programmgesteuert umgesetzt wurden - d.h. eigentlich alle modernen Grafikkarten können ebenfalls als Scanlinerenderer betrachtet werden, da Polygone immer noch in Zeilen aufgeteilt und von oben nach unten in den Videospeicher gezeichnet werden.&lt;br /&gt;
&lt;br /&gt;
Alternativen zum Scanlinerendern sind beispielsweise: echtes Vektorrendern (wird nicht mehr eingesetzt: mit dieser Methode steuerten manche Computer direkt einen Elektronenstrahl, der dann irgendwas auf der Kathodenstrahlröhre darstellte, es gab also überhaupt keine Pixel) und Raytracing, bei dem es völlig egal ist, wie die Bildpunkte durchlaufen werden, da jeder Bildpunkt für sich berechnet wird - und Raytracing meist ohnehin nicht in Echtzeit abläuft.&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Mars|Mars]] 07:49, 21. Okt 2004 (UTC)&lt;/div&gt;</summary>
		<author><name>Mars</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Volumetrische_Stencilschatten&amp;diff=2670</id>
		<title>Volumetrische Stencilschatten</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Volumetrische_Stencilschatten&amp;diff=2670"/>
				<updated>2004-10-21T08:41:49Z</updated>
		
		<summary type="html">&lt;p&gt;Mars: /* zFail */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konzept ==&lt;br /&gt;
&lt;br /&gt;
Bei dieser Technik nutzt man den (seit ~2000 von fast allen Grafikkarten angebotenen) [[Schablonenpuffer|Stencilpuffer]] um dort die im Schatten liegenden Bereiche der Szene abzulegen. Später werden dann mit einem passenden Stencilvergleich die Schatten dargestellt.&lt;br /&gt;
&lt;br /&gt;
Dazu wird für jedes Objekt ausgehend von seiner [[Silhouette]] (es entsteht immer dort eine Silhouetten-Kante, wo ein dem Licht abgewandtes und ein dem Licht zugewandtes Dreieck sich treffen) durch extrudieren ihrer Eckpunkte (im Idealfall in die Unendlichkeit, am Einfachsten lösbar über die W-Koordinate) ein Volumen erstellt das den Bereich des Objektes darstellt den es schattiert.&lt;br /&gt;
&lt;br /&gt;
== Geschichte ==&lt;br /&gt;
&lt;br /&gt;
1977 - Erfunden von Crow : Software-Renderer&amp;lt;br&amp;gt;&lt;br /&gt;
1984 - Brotman und Badler : Software-Tiefenpuffer und viele Punktlichter für weiche Schatten&amp;lt;br&amp;gt;&lt;br /&gt;
1985 - Fuchs und Co. : Erste Hardwareimplementation und Volumentechnik statt Raytracing&amp;lt;br&amp;gt;&lt;br /&gt;
1986 - Bergeron : Behandlung offener Modelle, Nicht-Planare Polygone&amp;lt;br&amp;gt;&lt;br /&gt;
1988 - Forunier &amp;amp; Fussell : Theorie zum Zählen der Schattenvolumen in einem Puffer&amp;lt;br&amp;gt;&lt;br /&gt;
1991 - Heidmann : Implementation in IRIS GL über Stencilpuffer&amp;lt;br&amp;gt;&lt;br /&gt;
1992 - Akeley &amp;amp; Foren : Der für IRIS GL entwickelte Stencilpuffer wird patentiert und in OpenGL 1.0 implementiert&amp;lt;br&amp;gt;&lt;br /&gt;
1996 - Deifenbach : Multi-Pass Shattenvolumen&amp;lt;br&amp;gt;&lt;br /&gt;
1999 - Dietrich : ZFail-Methode vorgestellt&amp;lt;br&amp;gt;&lt;br /&gt;
1999 - Kilgard : Invertierter Algorithmus für planare Ausschnitte&amp;lt;br&amp;gt;&lt;br /&gt;
2000 - Carmack : Erste detaillierte Diskussion zur Gleichheit von ZPass und ZFail&amp;lt;br&amp;gt;&lt;br /&gt;
2001 - Kilgard : ZPass mit Capping vorgestellt&amp;lt;br&amp;gt;&lt;br /&gt;
2002 - Everitt &amp;amp; Kilgard : Mehrere Techniken für eine robuste Lösung&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Teilweise entnommen aus dem Dokument ''&amp;quot;Optimized Stencil&lt;br /&gt;
Shadow Volumes&amp;quot;'' von Cass Everitt &amp;amp; Mark J. Kilgard)&lt;br /&gt;
&lt;br /&gt;
== Zukunft == &lt;br /&gt;
&lt;br /&gt;
Zumindest für die in der Spieleindustrie treibenden ''&amp;quot;Kraft&amp;quot;'' in Sachen OpenGL, John Carmack ([http://www.idsoftware.com/ id Software]), gehört die Zukunft klar den Schatten Volumen. Zumal die zwei frappierendsten aktuellen Nachteile (Ermitteln der [[Silhouette]] und Extrudieren eben dieser für das Volumen, sowie die hohe Anforderung an die Füllrate) dank schneller werdender Grafikkarten und CPUs immer weiter in den Hintergrund rücken. So kann man inzwischen dank [[Vertex Programm|Vertex Programmen]] alle Eckpunkte der Silhouette einfach auf der GPU extruhieren.&lt;br /&gt;
Auch die Tatsache dass diese Technik nur sehr scharfkantige Schatten wirf lässt sich via [[Jittering]] (mehrfachem, versetzem Rendern der Schattenvolumen mit unterschiedlicher Helligkeit) spätestens dann realisieren wenn Grafikkarten genug Füllrate anbieten, und eben genau diese steigt von Generation zu Generation recht stetig an.&lt;br /&gt;
&lt;br /&gt;
== Grundlegende Funktionsweise ==&lt;br /&gt;
&lt;br /&gt;
Um eine Szene mit volumetrischen Stencilschatten zu rendern sieht der Renderablauf im Normalfall wie folgt aus :&lt;br /&gt;
# Szene nur mit ambientem Lichtanteil in den Farbpuffer rendern&lt;br /&gt;
# [[Silhouette]] zwischen Objekten und Lichtquellen errechnen&lt;br /&gt;
# Silhouetten extrudieren (und je nach Technik noch Deckel für das Volumen erstellen)&lt;br /&gt;
# Stenciltest aktivieren und erstellte Schattenvolumen dort hinein rendern (mit unterschiedlichen Stenciloperationen für Vorder- und Rückseite)&lt;br /&gt;
# Szene mit diffusem Lichtanteil rendern (da Schatten im Stencilpuffer liegen wird die Szene jetzt schattiert)&lt;br /&gt;
&lt;br /&gt;
== Methoden ==&lt;br /&gt;
&lt;br /&gt;
=== zPass ===&lt;br /&gt;
Bei dieser (zuerst entwickelten) Methode inkrementieren nach vorne zeigende Dreiecke den Wert im Stencilpuffer, wenn diese den Test passieren; und nach hinten zeigende Dreiecke dekrementieren diesen Wert.&lt;br /&gt;
Nachteil dieser Methode ist jedoch die Tatsache das es zu Fehlern beim Zählen der Schattenwerte im Stencilpuffer kommt, sobald der Betrachter in ein Schattenvolumen eintritt. Um dies zu lösen gibt es jedoch die zFail-Methode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 glCullFace(GL_FRONT);&lt;br /&gt;
 glStencilOp(GL_KEEP, GL_KEEP, GL_INCR_WRAP);&lt;br /&gt;
 RenderShadowVolumes;&lt;br /&gt;
&lt;br /&gt;
 glCullFace(GL_BACK);&lt;br /&gt;
 glStencilOp(GL_KEEP, GL_KEEP, GL_DECR_WRAP);&lt;br /&gt;
 RenderShadowVolumes;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== zFail ===&lt;br /&gt;
Die von John Carmack im Jahre 2000 &amp;quot;erfundene&amp;quot; Methode zählt die Schattenfragmente etwas anders : Für nach vorne zeigende Dreiecke wird der Wert im Stencilpuffer inkrementiert, wenn diese den Test '''nicht''' bestehen (daher der Name); und dekrementiert für nach hinten zeigende Dreiecke. Weiterhin muss man bei dieser Methode (damit die Fragmente korrekt gezählt werden) ein geschlossenes Schattenvolumen erstellen, das neben der extrudierten (meist in die Unendlichkeit) Silhouette des schattenwerfenden Objektes sowohl einen vorderen Deckel (''Front-Cap'') als auch einen abschliessenden (''Back-Cap'') hat.&lt;br /&gt;
Der große Vorteil (auf den man in den seltensten Fällen verzichten) kann ist hier die Tatsache das zFail auch dann korrekte Schatten darstellt wenn der Betrachter in das Volumen eindringt. Nachteilig ist aber das man bedingt durch Deckel und Boden für die Schattenvolumen mehr Berechnungen und Pixeltests durchführen muss. Im Normalfall findet man deshalb eine Kombination aus beiden Techniken in einer Anwendung (zPass generell, wenn Betrachter in einem Volumen ist, dann zFail).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
glCullFace(GL_FRONT);&lt;br /&gt;
glStencilOp(GL_KEEP, GL_INCR_WRAP, GL_KEEP);&lt;br /&gt;
RenderShadowVolumes;&lt;br /&gt;
&lt;br /&gt;
glCullFace(GL_BACK);&lt;br /&gt;
glStencilOp(GL_KEEP, GL_DECR_WRAP, GL_KEEP);&lt;br /&gt;
RenderShadowVolumes;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vor- und Nachteile ==&lt;br /&gt;
&lt;br /&gt;
'''Positiv :'''&lt;br /&gt;
* Sehr hohe Details (kein [[Aliasing]])&lt;br /&gt;
* Selbstschattierung für schattenwerfende Objekte&lt;br /&gt;
 &lt;br /&gt;
'''Negativ :'''&lt;br /&gt;
* Benötigt Kenntnis über die zugrundeliegende Geometrie (für die Schattensilhouette)  &lt;br /&gt;
* [[Silhouette]] muss auf der CPU errechnet werden (-&amp;gt;CPU-Lastig)&lt;br /&gt;
* Verbraucht sehr viel Füllrate&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
[[Bild:shadowvolume_scene.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Zu sehen ist hier eine Szene die mittels volumetrischer Stencilschatten schattiert wurde. Die roten Umrandungen stellen die Silhouette der Szene ggü. der Lichtquelle dar, während die blauen Linien die Schattenvolumen darstellen (extruhiert in die Unendlichkeit).&lt;br /&gt;
&lt;br /&gt;
== Ressourcen ==&lt;br /&gt;
*[http://www.gamasutra.com/features/20021011/lengyel_01.htm &amp;quot;The Mechanics of Robust Stencil Shadows -  Eric Lengyel&amp;quot;]&lt;br /&gt;
*[http://www.gamedev.net/reference/articles/article1873.asp &amp;quot;The Theory of Stencil Shadow Volumes - Hun Yen Kwoon&amp;quot;]&lt;br /&gt;
*[http://developer.nvidia.com/attach/6832 &amp;quot;John Carmack zum Thema Shadow Volumes&amp;quot;]&lt;br /&gt;
*[http://developer.nvidia.com/object/fast_shadow_volumes.html Fast, Practical, and Robust Shadow Volumes (NVidia)]&lt;br /&gt;
*[http://developer.nvidia.com/object/robust_shadow_volumes.html Practical and Robust Shadow Volumes (NVidia)]&lt;/div&gt;</summary>
		<author><name>Mars</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Volumetrische_Stencilschatten&amp;diff=2668</id>
		<title>Volumetrische Stencilschatten</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Volumetrische_Stencilschatten&amp;diff=2668"/>
				<updated>2004-10-21T08:40:20Z</updated>
		
		<summary type="html">&lt;p&gt;Mars: /* Grundlegende Funktionsweise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konzept ==&lt;br /&gt;
&lt;br /&gt;
Bei dieser Technik nutzt man den (seit ~2000 von fast allen Grafikkarten angebotenen) [[Schablonenpuffer|Stencilpuffer]] um dort die im Schatten liegenden Bereiche der Szene abzulegen. Später werden dann mit einem passenden Stencilvergleich die Schatten dargestellt.&lt;br /&gt;
&lt;br /&gt;
Dazu wird für jedes Objekt ausgehend von seiner [[Silhouette]] (es entsteht immer dort eine Silhouetten-Kante, wo ein dem Licht abgewandtes und ein dem Licht zugewandtes Dreieck sich treffen) durch extrudieren ihrer Eckpunkte (im Idealfall in die Unendlichkeit, am Einfachsten lösbar über die W-Koordinate) ein Volumen erstellt das den Bereich des Objektes darstellt den es schattiert.&lt;br /&gt;
&lt;br /&gt;
== Geschichte ==&lt;br /&gt;
&lt;br /&gt;
1977 - Erfunden von Crow : Software-Renderer&amp;lt;br&amp;gt;&lt;br /&gt;
1984 - Brotman und Badler : Software-Tiefenpuffer und viele Punktlichter für weiche Schatten&amp;lt;br&amp;gt;&lt;br /&gt;
1985 - Fuchs und Co. : Erste Hardwareimplementation und Volumentechnik statt Raytracing&amp;lt;br&amp;gt;&lt;br /&gt;
1986 - Bergeron : Behandlung offener Modelle, Nicht-Planare Polygone&amp;lt;br&amp;gt;&lt;br /&gt;
1988 - Forunier &amp;amp; Fussell : Theorie zum Zählen der Schattenvolumen in einem Puffer&amp;lt;br&amp;gt;&lt;br /&gt;
1991 - Heidmann : Implementation in IRIS GL über Stencilpuffer&amp;lt;br&amp;gt;&lt;br /&gt;
1992 - Akeley &amp;amp; Foren : Der für IRIS GL entwickelte Stencilpuffer wird patentiert und in OpenGL 1.0 implementiert&amp;lt;br&amp;gt;&lt;br /&gt;
1996 - Deifenbach : Multi-Pass Shattenvolumen&amp;lt;br&amp;gt;&lt;br /&gt;
1999 - Dietrich : ZFail-Methode vorgestellt&amp;lt;br&amp;gt;&lt;br /&gt;
1999 - Kilgard : Invertierter Algorithmus für planare Ausschnitte&amp;lt;br&amp;gt;&lt;br /&gt;
2000 - Carmack : Erste detaillierte Diskussion zur Gleichheit von ZPass und ZFail&amp;lt;br&amp;gt;&lt;br /&gt;
2001 - Kilgard : ZPass mit Capping vorgestellt&amp;lt;br&amp;gt;&lt;br /&gt;
2002 - Everitt &amp;amp; Kilgard : Mehrere Techniken für eine robuste Lösung&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Teilweise entnommen aus dem Dokument ''&amp;quot;Optimized Stencil&lt;br /&gt;
Shadow Volumes&amp;quot;'' von Cass Everitt &amp;amp; Mark J. Kilgard)&lt;br /&gt;
&lt;br /&gt;
== Zukunft == &lt;br /&gt;
&lt;br /&gt;
Zumindest für die in der Spieleindustrie treibenden ''&amp;quot;Kraft&amp;quot;'' in Sachen OpenGL, John Carmack ([http://www.idsoftware.com/ id Software]), gehört die Zukunft klar den Schatten Volumen. Zumal die zwei frappierendsten aktuellen Nachteile (Ermitteln der [[Silhouette]] und Extrudieren eben dieser für das Volumen, sowie die hohe Anforderung an die Füllrate) dank schneller werdender Grafikkarten und CPUs immer weiter in den Hintergrund rücken. So kann man inzwischen dank [[Vertex Programm|Vertex Programmen]] alle Eckpunkte der Silhouette einfach auf der GPU extruhieren.&lt;br /&gt;
Auch die Tatsache dass diese Technik nur sehr scharfkantige Schatten wirf lässt sich via [[Jittering]] (mehrfachem, versetzem Rendern der Schattenvolumen mit unterschiedlicher Helligkeit) spätestens dann realisieren wenn Grafikkarten genug Füllrate anbieten, und eben genau diese steigt von Generation zu Generation recht stetig an.&lt;br /&gt;
&lt;br /&gt;
== Grundlegende Funktionsweise ==&lt;br /&gt;
&lt;br /&gt;
Um eine Szene mit volumetrischen Stencilschatten zu rendern sieht der Renderablauf im Normalfall wie folgt aus :&lt;br /&gt;
# Szene nur mit ambientem Lichtanteil in den Farbpuffer rendern&lt;br /&gt;
# [[Silhouette]] zwischen Objekten und Lichtquellen errechnen&lt;br /&gt;
# Silhouetten extrudieren (und je nach Technik noch Deckel für das Volumen erstellen)&lt;br /&gt;
# Stenciltest aktivieren und erstellte Schattenvolumen dort hinein rendern (mit unterschiedlichen Stenciloperationen für Vorder- und Rückseite)&lt;br /&gt;
# Szene mit diffusem Lichtanteil rendern (da Schatten im Stencilpuffer liegen wird die Szene jetzt schattiert)&lt;br /&gt;
&lt;br /&gt;
== Methoden ==&lt;br /&gt;
&lt;br /&gt;
=== zPass ===&lt;br /&gt;
Bei dieser (zuerst entwickelten) Methode inkrementieren nach vorne zeigende Dreiecke den Wert im Stencilpuffer, wenn diese den Test passieren; und nach hinten zeigende Dreiecke dekrementieren diesen Wert.&lt;br /&gt;
Nachteil dieser Methode ist jedoch die Tatsache das es zu Fehlern beim Zählen der Schattenwerte im Stencilpuffer kommt, sobald der Betrachter in ein Schattenvolumen eintritt. Um dies zu lösen gibt es jedoch die zFail-Methode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 glCullFace(GL_FRONT);&lt;br /&gt;
 glStencilOp(GL_KEEP, GL_KEEP, GL_INCR_WRAP);&lt;br /&gt;
 RenderShadowVolumes;&lt;br /&gt;
&lt;br /&gt;
 glCullFace(GL_BACK);&lt;br /&gt;
 glStencilOp(GL_KEEP, GL_KEEP, GL_DECR_WRAP);&lt;br /&gt;
 RenderShadowVolumes;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== zFail ===&lt;br /&gt;
Die von John Carmack im Jahre 2000 &amp;quot;erfundene&amp;quot; Methode zählt die Schattenfragmente etwas anders : Für nach vorne zeigende Dreiecke wird der Wert im Stencilpuffer inkrementiert, wenn diese den Test '''nicht''' bestehen (daher der Name); und dekrementiert für nach hinten zeigende Dreiecke. Weiterhin muss man bei dieser Methode (damit die Fragmente korrekt gezählt werden) ein geschlossenes Schattenvolumen erstellen, das neben der extruhierten (meist in die Unendlichkeit) Silhouette des schattenwerfenden Objektes sowohl einen vorderen Deckel (''Front-Cap'') als auch einen abschliessenden (''Back-Cap'') hat.&lt;br /&gt;
Der große Vorteil (auf den man in den seltensten Fällen verzichten) kann ist hier die Tatsache das zFail auch dann korrekte Schatten darstellt wenn der Betrachter in das Volumen eindringt. Nachteilig ist aber das man bedingt durch Deckel und Boden für die Schattenvolumen mehr Berechnungen und Pixeltests durchführen muss. Im Normalfall findet man deshalb eine Kombination aus beiden Techniken in einer Anwendung (zPass generell, wenn Betrachter in einem Volumen ist, dann zFail).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
glCullFace(GL_FRONT);&lt;br /&gt;
glStencilOp(GL_KEEP, GL_INCR_WRAP, GL_KEEP);&lt;br /&gt;
RenderShadowVolumes;&lt;br /&gt;
&lt;br /&gt;
glCullFace(GL_BACK);&lt;br /&gt;
glStencilOp(GL_KEEP, GL_DECR_WRAP, GL_KEEP);&lt;br /&gt;
RenderShadowVolumes;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vor- und Nachteile ==&lt;br /&gt;
&lt;br /&gt;
'''Positiv :'''&lt;br /&gt;
* Sehr hohe Details (kein [[Aliasing]])&lt;br /&gt;
* Selbstschattierung für schattenwerfende Objekte&lt;br /&gt;
 &lt;br /&gt;
'''Negativ :'''&lt;br /&gt;
* Benötigt Kenntnis über die zugrundeliegende Geometrie (für die Schattensilhouette)  &lt;br /&gt;
* [[Silhouette]] muss auf der CPU errechnet werden (-&amp;gt;CPU-Lastig)&lt;br /&gt;
* Verbraucht sehr viel Füllrate&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
[[Bild:shadowvolume_scene.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Zu sehen ist hier eine Szene die mittels volumetrischer Stencilschatten schattiert wurde. Die roten Umrandungen stellen die Silhouette der Szene ggü. der Lichtquelle dar, während die blauen Linien die Schattenvolumen darstellen (extruhiert in die Unendlichkeit).&lt;br /&gt;
&lt;br /&gt;
== Ressourcen ==&lt;br /&gt;
*[http://www.gamasutra.com/features/20021011/lengyel_01.htm &amp;quot;The Mechanics of Robust Stencil Shadows -  Eric Lengyel&amp;quot;]&lt;br /&gt;
*[http://www.gamedev.net/reference/articles/article1873.asp &amp;quot;The Theory of Stencil Shadow Volumes - Hun Yen Kwoon&amp;quot;]&lt;br /&gt;
*[http://developer.nvidia.com/attach/6832 &amp;quot;John Carmack zum Thema Shadow Volumes&amp;quot;]&lt;br /&gt;
*[http://developer.nvidia.com/object/fast_shadow_volumes.html Fast, Practical, and Robust Shadow Volumes (NVidia)]&lt;br /&gt;
*[http://developer.nvidia.com/object/robust_shadow_volumes.html Practical and Robust Shadow Volumes (NVidia)]&lt;/div&gt;</summary>
		<author><name>Mars</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Volumetrische_Stencilschatten&amp;diff=2667</id>
		<title>Volumetrische Stencilschatten</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Volumetrische_Stencilschatten&amp;diff=2667"/>
				<updated>2004-10-21T08:39:58Z</updated>
		
		<summary type="html">&lt;p&gt;Mars: /* Zukunft */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konzept ==&lt;br /&gt;
&lt;br /&gt;
Bei dieser Technik nutzt man den (seit ~2000 von fast allen Grafikkarten angebotenen) [[Schablonenpuffer|Stencilpuffer]] um dort die im Schatten liegenden Bereiche der Szene abzulegen. Später werden dann mit einem passenden Stencilvergleich die Schatten dargestellt.&lt;br /&gt;
&lt;br /&gt;
Dazu wird für jedes Objekt ausgehend von seiner [[Silhouette]] (es entsteht immer dort eine Silhouetten-Kante, wo ein dem Licht abgewandtes und ein dem Licht zugewandtes Dreieck sich treffen) durch extrudieren ihrer Eckpunkte (im Idealfall in die Unendlichkeit, am Einfachsten lösbar über die W-Koordinate) ein Volumen erstellt das den Bereich des Objektes darstellt den es schattiert.&lt;br /&gt;
&lt;br /&gt;
== Geschichte ==&lt;br /&gt;
&lt;br /&gt;
1977 - Erfunden von Crow : Software-Renderer&amp;lt;br&amp;gt;&lt;br /&gt;
1984 - Brotman und Badler : Software-Tiefenpuffer und viele Punktlichter für weiche Schatten&amp;lt;br&amp;gt;&lt;br /&gt;
1985 - Fuchs und Co. : Erste Hardwareimplementation und Volumentechnik statt Raytracing&amp;lt;br&amp;gt;&lt;br /&gt;
1986 - Bergeron : Behandlung offener Modelle, Nicht-Planare Polygone&amp;lt;br&amp;gt;&lt;br /&gt;
1988 - Forunier &amp;amp; Fussell : Theorie zum Zählen der Schattenvolumen in einem Puffer&amp;lt;br&amp;gt;&lt;br /&gt;
1991 - Heidmann : Implementation in IRIS GL über Stencilpuffer&amp;lt;br&amp;gt;&lt;br /&gt;
1992 - Akeley &amp;amp; Foren : Der für IRIS GL entwickelte Stencilpuffer wird patentiert und in OpenGL 1.0 implementiert&amp;lt;br&amp;gt;&lt;br /&gt;
1996 - Deifenbach : Multi-Pass Shattenvolumen&amp;lt;br&amp;gt;&lt;br /&gt;
1999 - Dietrich : ZFail-Methode vorgestellt&amp;lt;br&amp;gt;&lt;br /&gt;
1999 - Kilgard : Invertierter Algorithmus für planare Ausschnitte&amp;lt;br&amp;gt;&lt;br /&gt;
2000 - Carmack : Erste detaillierte Diskussion zur Gleichheit von ZPass und ZFail&amp;lt;br&amp;gt;&lt;br /&gt;
2001 - Kilgard : ZPass mit Capping vorgestellt&amp;lt;br&amp;gt;&lt;br /&gt;
2002 - Everitt &amp;amp; Kilgard : Mehrere Techniken für eine robuste Lösung&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Teilweise entnommen aus dem Dokument ''&amp;quot;Optimized Stencil&lt;br /&gt;
Shadow Volumes&amp;quot;'' von Cass Everitt &amp;amp; Mark J. Kilgard)&lt;br /&gt;
&lt;br /&gt;
== Zukunft == &lt;br /&gt;
&lt;br /&gt;
Zumindest für die in der Spieleindustrie treibenden ''&amp;quot;Kraft&amp;quot;'' in Sachen OpenGL, John Carmack ([http://www.idsoftware.com/ id Software]), gehört die Zukunft klar den Schatten Volumen. Zumal die zwei frappierendsten aktuellen Nachteile (Ermitteln der [[Silhouette]] und Extrudieren eben dieser für das Volumen, sowie die hohe Anforderung an die Füllrate) dank schneller werdender Grafikkarten und CPUs immer weiter in den Hintergrund rücken. So kann man inzwischen dank [[Vertex Programm|Vertex Programmen]] alle Eckpunkte der Silhouette einfach auf der GPU extruhieren.&lt;br /&gt;
Auch die Tatsache dass diese Technik nur sehr scharfkantige Schatten wirf lässt sich via [[Jittering]] (mehrfachem, versetzem Rendern der Schattenvolumen mit unterschiedlicher Helligkeit) spätestens dann realisieren wenn Grafikkarten genug Füllrate anbieten, und eben genau diese steigt von Generation zu Generation recht stetig an.&lt;br /&gt;
&lt;br /&gt;
== Grundlegende Funktionsweise ==&lt;br /&gt;
&lt;br /&gt;
Um eine Szene mit volumetrischen Stencilschatten zu rendern sieht der Renderablauf im Normalfall wie folgt aus :&lt;br /&gt;
# Szene nur mit ambientem Lichtanteil in den Farbpuffer rendern&lt;br /&gt;
# [[Silhouette]] zwischen Objekten und Lichtquellen errechnen&lt;br /&gt;
# Silhouetten extruhieren (und je nach Technik noch Deckel für das Volumen erstellen)&lt;br /&gt;
# Stenciltest aktivieren und erstellte Schattenvolumen dort hinein rendern (mit unterschiedlichen Stenciloperationen für Vorder- und Rückseite)&lt;br /&gt;
# Szene mit diffusem Lichtanteil rendern (da Schatten im Stencilpuffer liegen wird die Szene jetzt schattiert)&lt;br /&gt;
&lt;br /&gt;
== Methoden ==&lt;br /&gt;
&lt;br /&gt;
=== zPass ===&lt;br /&gt;
Bei dieser (zuerst entwickelten) Methode inkrementieren nach vorne zeigende Dreiecke den Wert im Stencilpuffer, wenn diese den Test passieren; und nach hinten zeigende Dreiecke dekrementieren diesen Wert.&lt;br /&gt;
Nachteil dieser Methode ist jedoch die Tatsache das es zu Fehlern beim Zählen der Schattenwerte im Stencilpuffer kommt, sobald der Betrachter in ein Schattenvolumen eintritt. Um dies zu lösen gibt es jedoch die zFail-Methode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 glCullFace(GL_FRONT);&lt;br /&gt;
 glStencilOp(GL_KEEP, GL_KEEP, GL_INCR_WRAP);&lt;br /&gt;
 RenderShadowVolumes;&lt;br /&gt;
&lt;br /&gt;
 glCullFace(GL_BACK);&lt;br /&gt;
 glStencilOp(GL_KEEP, GL_KEEP, GL_DECR_WRAP);&lt;br /&gt;
 RenderShadowVolumes;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== zFail ===&lt;br /&gt;
Die von John Carmack im Jahre 2000 &amp;quot;erfundene&amp;quot; Methode zählt die Schattenfragmente etwas anders : Für nach vorne zeigende Dreiecke wird der Wert im Stencilpuffer inkrementiert, wenn diese den Test '''nicht''' bestehen (daher der Name); und dekrementiert für nach hinten zeigende Dreiecke. Weiterhin muss man bei dieser Methode (damit die Fragmente korrekt gezählt werden) ein geschlossenes Schattenvolumen erstellen, das neben der extruhierten (meist in die Unendlichkeit) Silhouette des schattenwerfenden Objektes sowohl einen vorderen Deckel (''Front-Cap'') als auch einen abschliessenden (''Back-Cap'') hat.&lt;br /&gt;
Der große Vorteil (auf den man in den seltensten Fällen verzichten) kann ist hier die Tatsache das zFail auch dann korrekte Schatten darstellt wenn der Betrachter in das Volumen eindringt. Nachteilig ist aber das man bedingt durch Deckel und Boden für die Schattenvolumen mehr Berechnungen und Pixeltests durchführen muss. Im Normalfall findet man deshalb eine Kombination aus beiden Techniken in einer Anwendung (zPass generell, wenn Betrachter in einem Volumen ist, dann zFail).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
glCullFace(GL_FRONT);&lt;br /&gt;
glStencilOp(GL_KEEP, GL_INCR_WRAP, GL_KEEP);&lt;br /&gt;
RenderShadowVolumes;&lt;br /&gt;
&lt;br /&gt;
glCullFace(GL_BACK);&lt;br /&gt;
glStencilOp(GL_KEEP, GL_DECR_WRAP, GL_KEEP);&lt;br /&gt;
RenderShadowVolumes;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vor- und Nachteile ==&lt;br /&gt;
&lt;br /&gt;
'''Positiv :'''&lt;br /&gt;
* Sehr hohe Details (kein [[Aliasing]])&lt;br /&gt;
* Selbstschattierung für schattenwerfende Objekte&lt;br /&gt;
 &lt;br /&gt;
'''Negativ :'''&lt;br /&gt;
* Benötigt Kenntnis über die zugrundeliegende Geometrie (für die Schattensilhouette)  &lt;br /&gt;
* [[Silhouette]] muss auf der CPU errechnet werden (-&amp;gt;CPU-Lastig)&lt;br /&gt;
* Verbraucht sehr viel Füllrate&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
[[Bild:shadowvolume_scene.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Zu sehen ist hier eine Szene die mittels volumetrischer Stencilschatten schattiert wurde. Die roten Umrandungen stellen die Silhouette der Szene ggü. der Lichtquelle dar, während die blauen Linien die Schattenvolumen darstellen (extruhiert in die Unendlichkeit).&lt;br /&gt;
&lt;br /&gt;
== Ressourcen ==&lt;br /&gt;
*[http://www.gamasutra.com/features/20021011/lengyel_01.htm &amp;quot;The Mechanics of Robust Stencil Shadows -  Eric Lengyel&amp;quot;]&lt;br /&gt;
*[http://www.gamedev.net/reference/articles/article1873.asp &amp;quot;The Theory of Stencil Shadow Volumes - Hun Yen Kwoon&amp;quot;]&lt;br /&gt;
*[http://developer.nvidia.com/attach/6832 &amp;quot;John Carmack zum Thema Shadow Volumes&amp;quot;]&lt;br /&gt;
*[http://developer.nvidia.com/object/fast_shadow_volumes.html Fast, Practical, and Robust Shadow Volumes (NVidia)]&lt;br /&gt;
*[http://developer.nvidia.com/object/robust_shadow_volumes.html Practical and Robust Shadow Volumes (NVidia)]&lt;/div&gt;</summary>
		<author><name>Mars</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Volumetrische_Stencilschatten&amp;diff=2666</id>
		<title>Volumetrische Stencilschatten</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Volumetrische_Stencilschatten&amp;diff=2666"/>
				<updated>2004-10-21T08:39:23Z</updated>
		
		<summary type="html">&lt;p&gt;Mars: /* Konzept */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konzept ==&lt;br /&gt;
&lt;br /&gt;
Bei dieser Technik nutzt man den (seit ~2000 von fast allen Grafikkarten angebotenen) [[Schablonenpuffer|Stencilpuffer]] um dort die im Schatten liegenden Bereiche der Szene abzulegen. Später werden dann mit einem passenden Stencilvergleich die Schatten dargestellt.&lt;br /&gt;
&lt;br /&gt;
Dazu wird für jedes Objekt ausgehend von seiner [[Silhouette]] (es entsteht immer dort eine Silhouetten-Kante, wo ein dem Licht abgewandtes und ein dem Licht zugewandtes Dreieck sich treffen) durch extrudieren ihrer Eckpunkte (im Idealfall in die Unendlichkeit, am Einfachsten lösbar über die W-Koordinate) ein Volumen erstellt das den Bereich des Objektes darstellt den es schattiert.&lt;br /&gt;
&lt;br /&gt;
== Geschichte ==&lt;br /&gt;
&lt;br /&gt;
1977 - Erfunden von Crow : Software-Renderer&amp;lt;br&amp;gt;&lt;br /&gt;
1984 - Brotman und Badler : Software-Tiefenpuffer und viele Punktlichter für weiche Schatten&amp;lt;br&amp;gt;&lt;br /&gt;
1985 - Fuchs und Co. : Erste Hardwareimplementation und Volumentechnik statt Raytracing&amp;lt;br&amp;gt;&lt;br /&gt;
1986 - Bergeron : Behandlung offener Modelle, Nicht-Planare Polygone&amp;lt;br&amp;gt;&lt;br /&gt;
1988 - Forunier &amp;amp; Fussell : Theorie zum Zählen der Schattenvolumen in einem Puffer&amp;lt;br&amp;gt;&lt;br /&gt;
1991 - Heidmann : Implementation in IRIS GL über Stencilpuffer&amp;lt;br&amp;gt;&lt;br /&gt;
1992 - Akeley &amp;amp; Foren : Der für IRIS GL entwickelte Stencilpuffer wird patentiert und in OpenGL 1.0 implementiert&amp;lt;br&amp;gt;&lt;br /&gt;
1996 - Deifenbach : Multi-Pass Shattenvolumen&amp;lt;br&amp;gt;&lt;br /&gt;
1999 - Dietrich : ZFail-Methode vorgestellt&amp;lt;br&amp;gt;&lt;br /&gt;
1999 - Kilgard : Invertierter Algorithmus für planare Ausschnitte&amp;lt;br&amp;gt;&lt;br /&gt;
2000 - Carmack : Erste detaillierte Diskussion zur Gleichheit von ZPass und ZFail&amp;lt;br&amp;gt;&lt;br /&gt;
2001 - Kilgard : ZPass mit Capping vorgestellt&amp;lt;br&amp;gt;&lt;br /&gt;
2002 - Everitt &amp;amp; Kilgard : Mehrere Techniken für eine robuste Lösung&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Teilweise entnommen aus dem Dokument ''&amp;quot;Optimized Stencil&lt;br /&gt;
Shadow Volumes&amp;quot;'' von Cass Everitt &amp;amp; Mark J. Kilgard)&lt;br /&gt;
&lt;br /&gt;
== Zukunft == &lt;br /&gt;
&lt;br /&gt;
Zumindest für die in der Spieleindustrie treibenden ''&amp;quot;Kraft&amp;quot;'' in Sachen OpenGL, John Carmack ([http://www.idsoftware.com/ id Software]), gehört die Zukunft klar den Schatten Volumen. Zumal die zwei frapierendsten aktuellen Nachteile (Ermitteln der [[Silhouette]] und Extruhieren eben dieser für das Volumen, sowie die hohe Anforderung an die Füllrate) dank schneller werdender Grafikkarten und CPUs immer weiter in den Hintergrund rücken. So kann man inzwischen dank [[Vertex Programm|Vertex Programmen]] alle Eckpunkte der Silhouette einfach auf der GPU extruhieren.&lt;br /&gt;
Auch die Tatsache dass diese Technik nur sehr scharfkantige Schatten wirf lässt sich via [[Jittering]] (mehrfachem, versetzem Rendern der Schattenvolumen mit unterschiedlicher Helligkeit) spätestens dann realisieren wenn Grafikkarten genug Füllrate anbieten, und eben genau diese steigt von Generation zu Generation recht stetig an.&lt;br /&gt;
&lt;br /&gt;
== Grundlegende Funktionsweise ==&lt;br /&gt;
&lt;br /&gt;
Um eine Szene mit volumetrischen Stencilschatten zu rendern sieht der Renderablauf im Normalfall wie folgt aus :&lt;br /&gt;
# Szene nur mit ambientem Lichtanteil in den Farbpuffer rendern&lt;br /&gt;
# [[Silhouette]] zwischen Objekten und Lichtquellen errechnen&lt;br /&gt;
# Silhouetten extruhieren (und je nach Technik noch Deckel für das Volumen erstellen)&lt;br /&gt;
# Stenciltest aktivieren und erstellte Schattenvolumen dort hinein rendern (mit unterschiedlichen Stenciloperationen für Vorder- und Rückseite)&lt;br /&gt;
# Szene mit diffusem Lichtanteil rendern (da Schatten im Stencilpuffer liegen wird die Szene jetzt schattiert)&lt;br /&gt;
&lt;br /&gt;
== Methoden ==&lt;br /&gt;
&lt;br /&gt;
=== zPass ===&lt;br /&gt;
Bei dieser (zuerst entwickelten) Methode inkrementieren nach vorne zeigende Dreiecke den Wert im Stencilpuffer, wenn diese den Test passieren; und nach hinten zeigende Dreiecke dekrementieren diesen Wert.&lt;br /&gt;
Nachteil dieser Methode ist jedoch die Tatsache das es zu Fehlern beim Zählen der Schattenwerte im Stencilpuffer kommt, sobald der Betrachter in ein Schattenvolumen eintritt. Um dies zu lösen gibt es jedoch die zFail-Methode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 glCullFace(GL_FRONT);&lt;br /&gt;
 glStencilOp(GL_KEEP, GL_KEEP, GL_INCR_WRAP);&lt;br /&gt;
 RenderShadowVolumes;&lt;br /&gt;
&lt;br /&gt;
 glCullFace(GL_BACK);&lt;br /&gt;
 glStencilOp(GL_KEEP, GL_KEEP, GL_DECR_WRAP);&lt;br /&gt;
 RenderShadowVolumes;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== zFail ===&lt;br /&gt;
Die von John Carmack im Jahre 2000 &amp;quot;erfundene&amp;quot; Methode zählt die Schattenfragmente etwas anders : Für nach vorne zeigende Dreiecke wird der Wert im Stencilpuffer inkrementiert, wenn diese den Test '''nicht''' bestehen (daher der Name); und dekrementiert für nach hinten zeigende Dreiecke. Weiterhin muss man bei dieser Methode (damit die Fragmente korrekt gezählt werden) ein geschlossenes Schattenvolumen erstellen, das neben der extruhierten (meist in die Unendlichkeit) Silhouette des schattenwerfenden Objektes sowohl einen vorderen Deckel (''Front-Cap'') als auch einen abschliessenden (''Back-Cap'') hat.&lt;br /&gt;
Der große Vorteil (auf den man in den seltensten Fällen verzichten) kann ist hier die Tatsache das zFail auch dann korrekte Schatten darstellt wenn der Betrachter in das Volumen eindringt. Nachteilig ist aber das man bedingt durch Deckel und Boden für die Schattenvolumen mehr Berechnungen und Pixeltests durchführen muss. Im Normalfall findet man deshalb eine Kombination aus beiden Techniken in einer Anwendung (zPass generell, wenn Betrachter in einem Volumen ist, dann zFail).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
glCullFace(GL_FRONT);&lt;br /&gt;
glStencilOp(GL_KEEP, GL_INCR_WRAP, GL_KEEP);&lt;br /&gt;
RenderShadowVolumes;&lt;br /&gt;
&lt;br /&gt;
glCullFace(GL_BACK);&lt;br /&gt;
glStencilOp(GL_KEEP, GL_DECR_WRAP, GL_KEEP);&lt;br /&gt;
RenderShadowVolumes;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vor- und Nachteile ==&lt;br /&gt;
&lt;br /&gt;
'''Positiv :'''&lt;br /&gt;
* Sehr hohe Details (kein [[Aliasing]])&lt;br /&gt;
* Selbstschattierung für schattenwerfende Objekte&lt;br /&gt;
 &lt;br /&gt;
'''Negativ :'''&lt;br /&gt;
* Benötigt Kenntnis über die zugrundeliegende Geometrie (für die Schattensilhouette)  &lt;br /&gt;
* [[Silhouette]] muss auf der CPU errechnet werden (-&amp;gt;CPU-Lastig)&lt;br /&gt;
* Verbraucht sehr viel Füllrate&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
[[Bild:shadowvolume_scene.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Zu sehen ist hier eine Szene die mittels volumetrischer Stencilschatten schattiert wurde. Die roten Umrandungen stellen die Silhouette der Szene ggü. der Lichtquelle dar, während die blauen Linien die Schattenvolumen darstellen (extruhiert in die Unendlichkeit).&lt;br /&gt;
&lt;br /&gt;
== Ressourcen ==&lt;br /&gt;
*[http://www.gamasutra.com/features/20021011/lengyel_01.htm &amp;quot;The Mechanics of Robust Stencil Shadows -  Eric Lengyel&amp;quot;]&lt;br /&gt;
*[http://www.gamedev.net/reference/articles/article1873.asp &amp;quot;The Theory of Stencil Shadow Volumes - Hun Yen Kwoon&amp;quot;]&lt;br /&gt;
*[http://developer.nvidia.com/attach/6832 &amp;quot;John Carmack zum Thema Shadow Volumes&amp;quot;]&lt;br /&gt;
*[http://developer.nvidia.com/object/fast_shadow_volumes.html Fast, Practical, and Robust Shadow Volumes (NVidia)]&lt;br /&gt;
*[http://developer.nvidia.com/object/robust_shadow_volumes.html Practical and Robust Shadow Volumes (NVidia)]&lt;/div&gt;</summary>
		<author><name>Mars</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Polygon&amp;diff=2581</id>
		<title>Polygon</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Polygon&amp;diff=2581"/>
				<updated>2004-10-04T19:33:17Z</updated>
		
		<summary type="html">&lt;p&gt;Mars: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Polygon ist das griechische Wort für &amp;quot;Vieleck&amp;quot;, gemeint ist damit ein Anzahl von Punkten, die durch einen Linienzug geschlossen miteinander verbunden sind. In der Computergrafik sind hauptsächlich gefüllte Polygonzüge von Bedeutung, das heißt, dass nicht nur die Eckpunkte mit Linien verbunden werden, sondern auch der Raum zwischen den Kanten ausgefüllt wird - entweder mit einer Farbe, Farben, die zwischen den Eckpunkten interpoliert werden, Texturen, deren Koordinaten zwischen den Eckpunkten interpoliert werden, oder seit Neuestem mittels Shaderprogrammen, bei denen der Programmierer ganz genau sagen kann, was nun mit jedem Fragment eines Polygons geschehen soll.&lt;br /&gt;
&lt;br /&gt;
Beim aktuellen Stand der Computergrafik werden Polygone mit mehr als drei Eckpunkten typischerweise vor dem Rendern automatisch in Dreiecke zerlegt, weswegen es auch in OpenGL zumeist am günstigsten ist, direkt mit Dreiecken zu arbeiten.&lt;br /&gt;
&lt;br /&gt;
Die Beschränkung auf Dreiecke ergibt sich übrigens aus der Rasterisierung, da drei Punkte im dreidimensionalen Raum immer in einer Ebene liegen, und ein Dreieck auch immer konvex sein muss: bei konkaven Vielecken könnte es geschehen, dass Scanlinerenderer, wie es eigentlich alle Grafikkarten zur Zeit sind, für eine vertikale Position mehr als eine horizontale Linie rendern müssen, was einen erheblichen Mehraufwand an Rechenzeit benötigt.&lt;/div&gt;</summary>
		<author><name>Mars</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Polygon&amp;diff=2571</id>
		<title>Polygon</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Polygon&amp;diff=2571"/>
				<updated>2004-10-04T19:32:55Z</updated>
		
		<summary type="html">&lt;p&gt;Mars: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Polygon ist das griechische Wort für &amp;quot;Vieleck&amp;quot;, gemeint ist damit ein Anzahl von Punkten, die durch einen Linienzug geschlossen miteinander verbunden sind. In der Computergrafik sind hauptsächlich gefüllte Polygonzüge von Bedeutung, das heißt, dass nicht nur die Eckpunkte mit Linien verbunden werden, sondern auch der Raum zwischen Kanten den Kanten ausgefüllt wird - entweder mit einer Farbe, Farben, die zwischen den Eckpunkten interpoliert werden, Texturen, deren Koordinaten zwischen den Eckpunkten interpoliert werden, oder seit Neuestem mittels Shaderprogrammen, bei denen der Programmierer ganz genau sagen kann, was nun mit jedem Fragment eines Polygons geschehen soll.&lt;br /&gt;
&lt;br /&gt;
Beim aktuellen Stand der Computergrafik werden Polygone mit mehr als drei Eckpunkten typischerweise vor dem Rendern automatisch in Dreiecke zerlegt, weswegen es auch in OpenGL zumeist am günstigsten ist, direkt mit Dreiecken zu arbeiten.&lt;br /&gt;
&lt;br /&gt;
Die Beschränkung auf Dreiecke ergibt sich übrigens aus der Rasterisierung, da drei Punkte im dreidimensionalen Raum immer in einer Ebene liegen, und ein Dreieck auch immer konvex sein muss: bei konkaven Vielecken könnte es geschehen, dass Scanlinerenderer, wie es eigentlich alle Grafikkarten zur Zeit sind, für eine vertikale Position mehr als eine horizontale Linie rendern müssen, was einen erheblichen Mehraufwand an Rechenzeit benötigt.&lt;/div&gt;</summary>
		<author><name>Mars</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Polygon&amp;diff=2570</id>
		<title>Polygon</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Polygon&amp;diff=2570"/>
				<updated>2004-10-04T19:25:59Z</updated>
		
		<summary type="html">&lt;p&gt;Mars: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Polygon ist das griechische Wort für &amp;quot;Vieleck&amp;quot;, gemeint ist damit ein Anzahl von Punkten, die durch einen Linienzug geschlossen miteinander verbunden sind. Beim aktuellen Stand der Computergrafik werden Polygone mit mehr als drei Eckpunkten typischerweise vor dem Rendern automatisch in Dreiecke zerlegt, weswegen es auch in OpenGL zumeist am günstigsten ist, direkt mit Dreiecken zu arbeiten.&lt;br /&gt;
&lt;br /&gt;
Die Beschränkung auf Dreiecke ergibt sich übrigens aus der Rasterisierung, da drei Punkte im dreidimensionalen Raum immer in einer Ebene liegen, und ein Dreieck auch immer konvex sein muss: bei konkaven Vielecken könnte es geschehen, dass Scanlinerenderer, wie es eigentlich alle Grafikkarten zur Zeit sind, für eine vertikale Position mehr als eine horizontale Linie rendern müssen, was einen erheblichen Mehraufwand an Rechenzeit benötigt.&lt;/div&gt;</summary>
		<author><name>Mars</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=glLineStipple&amp;diff=2328</id>
		<title>glLineStipple</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=glLineStipple&amp;diff=2328"/>
				<updated>2004-09-08T13:10:55Z</updated>
		
		<summary type="html">&lt;p&gt;Mars: /* Delphi-Spezifikation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Unvollständig}}&lt;br /&gt;
= glLineStipple =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Name ==&lt;br /&gt;
'''glLineStipple''' - Definiert mit welchem Muster eine Linie getüpfelt wird.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Delphi-Spezifikation ==&lt;br /&gt;
&lt;br /&gt;
 procedure '''glLineStipple'''(''factor'' : GLint; ''pattern'' : GLushort);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; rules=&amp;quot;all&amp;quot;&lt;br /&gt;
! ''factor''&lt;br /&gt;
|  Spezifiziert einen Multiplikator für jedes Bit im Tüpfelmuster einer Linie. Wenn der Faktor beispielsweise 3 ist, wird jedes Bit im Muster drei Mal genutzt, bevor das nächste Bit im Muster verwendet wird. Der factor ist festgesetzt zwischen dem Bereich von 1 bis 256 und der Standardwert ist 1'''. If factor is 3, for example, each bit in the pattern is used three times before the next bit in the pattern is used. factor is clamped to the range[1,256] and defaults to 1.'''&lt;br /&gt;
|-&lt;br /&gt;
! ''pattern''&lt;br /&gt;
|  '''Specifies a 16-bit integer whose bit pattern determines which fragments of a line will be drawn when the line is rasterized. Bit zero is used first; the default pattern is all 1's.'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beschreibung == &lt;br /&gt;
'''Line stippling masks out certain fragments produced by rasterization; those fragments will not be drawn. The masking is achieved by using three parameters: the 16-bit line stipple pattern pattern, the repeat count factor, and an integer stipple counter s.&lt;br /&gt;
&lt;br /&gt;
Counter s is reset to zero whenever glBegin is called, and before each line segment of a glBegin(GL_LINES)/glEnd() sequence is generated. It is incremented after each fragment of a unit width aliased line segment is generated, or after each i fragments of an i width line segment are generated. The i fragments associated with count s are masked out if&lt;br /&gt;
&lt;br /&gt;
pattern bit (s / factor) mod 16&lt;br /&gt;
&lt;br /&gt;
is zero, otherwise these fragments are sent to the frame buffer. Bit zero of pattern is the least significant bit.&lt;br /&gt;
&lt;br /&gt;
Antialiased lines are treated as a sequence of 1xwidth rectangles for purposes of stippling. Whether rectangle s is rasterized or not depends on the fragment rule described for aliased lines, counting rectangles rather than groups of fragments.'''&lt;br /&gt;
&lt;br /&gt;
Um Linien tüpfeln zu lassen, benutzt [[glEnable]] und [[glDisable]] mit dem Token GL_LINE_STIPPLE. Wenn dies aktiviert ist, werden die Linien mit dem Muster getüpfelt, dass oben beschrieben wurde. Wenn es deaktiviert ist, werden alle Muster so behandelt als seien sie auf 1 gesetzt. Standardgemäß ist das Tüpfeln von Linien deaktiviert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldungen ==&lt;br /&gt;
GL_INVALID_OPERATION wird generiert wenn glRect innerhalb eines glBegin-glEnd Blocks aufgerufen wird. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==  Zugehörige Wertrückgaben ==&lt;br /&gt;
[[glGet]] mit Token [[glGet#GL_MEIN_TOKEN|GL_MEIN_TOKEN]]&lt;br /&gt;
[[glGet]] mit Token [[glGet#GL_LINE_STIPPLE_PATTERN]]&lt;br /&gt;
[[glGet]] mit Token [[glGet#GL_LINE_STIPPLE_REPEAT]]&lt;br /&gt;
[[glIsEnabled]] mit Token [[glIsEnabled#GL_LINE_STIPPLE]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
[[glLineWidth]], [[glPolygonStipple]]&lt;/div&gt;</summary>
		<author><name>Mars</name></author>	</entry>

	</feed>