<?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=Damadmax</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=Damadmax"/>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php/Spezial:Beitr%C3%A4ge/Damadmax"/>
		<updated>2026-05-30T11:45:37Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.27.4</generator>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Link&amp;diff=25673</id>
		<title>Link</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Link&amp;diff=25673"/>
				<updated>2012-05-01T23:00:40Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: Link zur OpenStreepMap Texturen Sammlung hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
!!!!!!!! NUTZT DIESE TABELLE ALS VORLAGE FÜR WEITERE LINKTABELLEN !!!!!!!&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[Link]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[Link]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Linksammlung soll allgemeine Links zu unterschiedlichen Themen bieten, die mit der Multimediaentwicklung zu tun haben.&lt;br /&gt;
{{Hinweis|Vielleicht ist eine Zusammenführung mit [[Tool]] sinnvoll!}}&lt;br /&gt;
{{Hinweis|Vielleicht ist eine Aufteilung in Unterseiten sinnvoll (möglicherweise mit Kategorien)}}&lt;br /&gt;
&lt;br /&gt;
= Entwicklung mit OpenGL =&lt;br /&gt;
&lt;br /&gt;
== Hardwareinfos ==&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[http://web.archive.org/web/20090417044334/http://delphi3d.net/hardware/listreports.php OpenGL Hardware Registry - Hardwareübersicht]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Eine Datenbank aller Grafikkarten die in der Harware Registry vorhanden sind. Die einzelnen Artikel enthalten Infos darüber, welche Extensions von der Grafikkarte unterstützt werden.&lt;br /&gt;
|-&lt;br /&gt;
|[http://web.archive.org/web/20090506094005/http://delphi3d.net/hardware/ OpenGL Hardware Registry - Extensionübersicht]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Eine Datenbank aller Extensions die in der Harware Registry vorhanden sind. Die einzelnen Artikel enthalten Infos darüber, welche Grafikkarten die entsprechende Extension unterstützen.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tutorials ==&lt;br /&gt;
&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
||[[Tutorial|DGL Wiki - Tutorial]]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
|DelphiGL.com ist Betreiber dieses Wikis und stellt eine Vielzahl Tutorials mit Schwehrpunkt OpenGL zur Verfügung. &lt;br /&gt;
Neben Tutorials für Einsteiger und OpenGL Anfänger gibt es auch fortgeschrittene Themen wie Shader oder Partikelsysteme.Sprache der Wahl ist hier Delphi.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.joachimrohde.com/cms/xoops/modules/articles/index.php?cat_id=1 joachimrohde.com]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
|Auf dieser Seite findet ihr deutsche Übersetzungen der bekannten NeHe Tutorials. Sprache der Wahl ist hier C++.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.cg.tuwien.ac.at/studentwork/VRSem96/OpenGL/ Technische Universität Wien]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
|Diese Seite bietet einen allgemeinen Überblick über die primären Funktionen von OpenGL und richtet sich vor allem an Einsteiger.&lt;br /&gt;
|-&lt;br /&gt;
|[http://nehe.gamedev.net/ Nehe] &lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Die berühmt berüchtigten NeHe Tutorials sind eine umfangreiche Sammlung an Tutorials zum Thema OpenGL. Von Anfängertutorials bis hin zu komplexen Effekten wird alles behandelt. Sprache der Wahl ist hier C++. (Eine Übersetzung der NeHe Tutorials findet ihr bei Joachim Rhode (siehe oben). )&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.sulaco.co.za/tut.htm sulaco.co.za] &lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
| OpenGL Beispiele in Delphi&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenGL Funktionen ==&lt;br /&gt;
&lt;br /&gt;
=== GL ===&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[[:Kategorie:GL|DGL Wiki - Kategorie GL]]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
| Wiki-Kategorie die alle übersetzten OpenGL Befehle enthält.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL.tar.gz OpenGL.org - Original Spezifkationen]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Die Originalspezifikationen der OpenGL 1.0 und OpenGL 1.1 Befehle. (Diese HTML-Dokumente sind nicht Copy&amp;amp;Paste freundlich, da sie vermutlich automatisch aus vorhandenen Dateien (Postscript) erzeugt wurden.)&lt;br /&gt;
|-&lt;br /&gt;
|[http://developer.3dlabs.com/documents/glmanpage_index.htm 3dLabs]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Die Originalspezifikationen der OpenGL 1.0 und OpenGL 1.1 Befehle.&lt;br /&gt;
|-&lt;br /&gt;
|[http://web.archive.org/web/20040616082839/http://www.mevis.de/~uwe/opengl/opengl.html mevis.de]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Sammlung von Englischsprachigen Spezifikationen für GL(bis Version 1.1), GLX und GLU Funktionen.&lt;br /&gt;
|-&lt;br /&gt;
|[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/glfunc01_4f03.asp MSDN von Microsoft]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|OpenGL Dokumentation in der MSDN. Die Erklärung der MSDN sind meist keine reinen Kopien der Originalspezifikationen, sondern enthalten hin und wieder auch zusätzliche Informationen, oder formulieren Texte auf verständlichere Art und Weise.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GLU ===&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[[:Kategorie:GLU|DGL Wiki - Kategorie GLU]]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
| Wiki-Kategorie die alle übersetzten GLU Befehle enthält.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/glu/ OpenGL.org - Original Spezifkationen]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Originalspezifikationen für die GLU Befehle. (Diese HTML-Dokumente sind nicht Copy&amp;amp;Paste freundlich, da sie vermutlich automatisch aus vorhandenen Dateien (Postscript) erzeugt wurden.)&lt;br /&gt;
|-&lt;br /&gt;
|[http://web.archive.org/web/20040616082839/http://www.mevis.de/~uwe/opengl/opengl.html mevis.de mevis.de]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Sammlung von englischsprachigen Spezifikationen für GL(bis Version 1.1), GLX und GLU Funktionen.&lt;br /&gt;
|-&lt;br /&gt;
|[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/glufnc01_0e43.asp MSDN von Microsoft]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|GLU Dokumentation in der MSDN. Die Erklärung der MSDN sind meist keine reinen Kopien der Originalspezifikationen, sondern enthalten hin und wieder auch zusätzliche Informationen, oder formulieren Texte auf verständlichere Art und Weise.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GLX ===&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[[:Kategorie:GLX|DGL Wiki - Kategorie GLX]]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
| Wiki-Kategorie die alle übersetzten GLX Befehle enthält.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/glx/ OpenGL.org - Original  Spezifkationen]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Orgninalspezifikationen der GLX Befehle bei OpenGL.org.&lt;br /&gt;
|-&lt;br /&gt;
|[http://web.archive.org/web/20040616082839/http://www.mevis.de/~uwe/opengl/opengl.html mevis.de mevis.de]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Sammlung von Englischsprachigen Spezifikationen für GL(bis Version 1.1), GLX und GLU Funktionen.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== WGL ===&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[[:Kategorie:WGL|DGL Wiki - Kategorie WGL]]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
|Wiki-Kategorie die alle übersetzten WGL Befehle enthält.&lt;br /&gt;
|-&lt;br /&gt;
|[http://web.archive.org/web/20071218151417/http://developer.3dlabs.com/documents/wglmanpage_index.htm 3dLabs]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Sammlung einiger WGL Befehlsspezifikationen.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GLUT ===&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[http://freeglut.sourceforge.net/docs/api.php The freeglut Projekt]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Englischsprachige Dokumentation zum OpenGL Utility Toolkit kurz GLUT.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SDL ===&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[[:Kategorie:SDL|DGL Wiki - Kategorie SDL]]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
|Übersicht aller auf die SDL bezogenen Artikel hier im Wiki. Darunter befinden sich eine Vielzahl von Übersetzungen der SDL Befehlspezifikationen. Diese können auch in der [[SDL-Funktionsübersicht]] gefunden werden.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.libsdl.org/cgi/docwiki.cgi/SDL_20API libsdl.org]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Das Dokumentationswiki von libSDL.org enthält die komplette Dokumenation zur SDL in englischer Sprache.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.freepascal-meets-sdl.net/ freepascal meets sdl]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
| Eine Webseite die speziell Informationen über die Programmierung von SDL unter Freepascal zur Verfügung stellt.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FAQs ==&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[[FAQ| DGL Wiki - FAQ]]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
|Ein FAQ (Frequently Asked Questions = Häufig gestellte Fragen) zu DelphiGL.com und dem DGL Wiki.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.3dsource.de/faq/index.htm 3dsource.de]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
|Ein FAQ zu Fragen rund um OpenGL.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effekte und Techniken mit OpenGL ==&lt;br /&gt;
&lt;br /&gt;
===Glow===&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.gamasutra.com/view/feature/2107/realtime_glow.php Gamasutra]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Beschreibt, wie man mit Hilfe von Shader(hier DirectX Shader) den Gloweffekt in Realtime umsetzt. Dabei wird erst die Technik dahinter erklärt, und dann wie man sie Schritt für Schritt umsetzt. &lt;br /&gt;
|-&lt;br /&gt;
|[http://web.archive.org/web/20071118043007/http://collective.valve-erc.com/index.php?go=tron1 valve-erc.com]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Schritt für Schritt Anleitung, wie man mit Hilfe von Cg in OpenGL den Glow Effekt realisieren kann &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===HDR===&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[http://web.archive.org/web/20090601052809/http://www.gamedev.net/columns/hardcore/hdrrendering/ gamedev.net]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Hier wird sehr kurz eingeleitet, was HDR Rendering überhaupt ist, dann wird der Aufbau des *.hdr Formats erläutert, und dann geht es schon von 0 auf 100 zum Programmieren. Erklärungen gibt es kaum, dafür werden fertige Shader(für DirectX) geboten. &lt;br /&gt;
|-&lt;br /&gt;
|[http://web.archive.org/web/20090601202039/http://www.gamedev.net/reference/articles/article2208.asp gamedev.net]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Beschreibt auch nur etwas kurz das HDR Verfahren, jedoch mit mehr mathematischen Hintergrund in Sachen Tonemapping. Beispielcode für Tonemapping in C++ liegt bei. &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BSP Bäume===&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[http://web.archive.org/web/20081201115631/http://www.3dtechdev.com/tutorials/leafbsp/3dbsptrees.html 3dtechdev.com]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Das beste Dokument überhaupt, für allem die selber BSP Bäume compilieren möchte. Ist belegt mit sehr viel Grafik. Erst beginnt er das Prinzip allgemein zum umschreiben, dann wird alles genau erläutert, und mit verständlichen Pseudocode untermalt. &lt;br /&gt;
|-&lt;br /&gt;
|[http://web.archive.org/web/20081019041535/http://www.3dtechdev.com/tutorials/illegalgeometry/illegalgeometrytut.html 3dtechdev.com]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Nicht ganz so gut geworden, wie sein erstes Tutorial, aber erklärt auch sehr gut, wie man illegale Geometrie aufspürt und beseitigt. Wieder mit Grafiken und Pseudocodes verständlich belegt. Hiermit kann man seinem Map-Compiler den letzten Schliff verleien. &lt;br /&gt;
|-&lt;br /&gt;
|[http://www.gamedev.net/reference/articles/article981.asp Gamedev]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Von Michael Abrash, dürfte der ''Erfinder'' von Quake sein. Naja, meine Englischkenntnisse reichen hier nicht ganz aus, um den Text zu verstehen. Ist etwas umständlich geschrieben. Dafür mit Grafiken unterlegt. &lt;br /&gt;
|-&lt;br /&gt;
|[http://www.zfx-online.de/Tutorials.php?ID=11 Part 1 - Allgemein]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
|Einzigste deutsche Referenz zu BSP Bäumen, dafür Daumen hoch. Ist aber nicht das Wahre: schlechter C Code, und ich hatte auch nicht den Einduck, das er die Theorie zu diesem Thema bis in die Tiefe verstanden hat(oder er wollte es nicht zu akademisch Erklären oO). Aber ein guter Einstieg in dieses Thema. &lt;br /&gt;
|-&lt;br /&gt;
|[http://www.zfx-online.de/Tutorials.php?ID=13 Part 2 - Kollision und PVS]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://web.archive.org/web/20060516103821/http://www.cs.uwec.edu/~stevende/cs455/programs/GameTutorials%20-%20Quake%203%20BSP%20Format.htm Quake3 *.bsp Format]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Die beste Dokumentation für das BSP Format, die ich gefunden habe, besser als den Quake3 Sourcecode zu durchforsten. Leider etwas magere Eklährung zu wichtigen Themen wie Patches(Curved Surfaces). Ich pers. hatte jetzt 1 1/2 Wochen gebraucht, um das *.bsp Format vollständig zu verstehen. Ist aber anscheinend die beste Format Dokumentation im Netz. &lt;br /&gt;
|-&lt;br /&gt;
|[http://www.flipcode.com/articles/article_q2bsp.shtml Quake2 *.bsp Format]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Kann auch nur soviel sagen, wie beim Link zuvor. Es fehlen hier auch zum Teil Informationen. Man muss halt viel ausprobieren, und sich den Quake 2 Source zu Herzen nehmen, damit man es versteht. &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Himmel &amp;amp; Wolken===&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.gamedev.net/community/forums/topic.asp?topic_id=86024 Gamedev]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Guter Thread mit vielen Anregungen und Links. &lt;br /&gt;
|-&lt;br /&gt;
|[http://www.gamedev.net/community/forums/topic.asp?topic_id=135654 Gamedev]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Hier wird die Diskussion zum obigen Link weitergeführt. &lt;br /&gt;
|-&lt;br /&gt;
|[http://freespace.virgin.net/hugo.elias/models/m_clouds.htm Plasma]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Eine nette Idee um Plasma in Echtzeit zu generieren, und zu verändern. Leider nichts zum Shading. &lt;br /&gt;
|-&lt;br /&gt;
|[http://nis-lab.is.s.u-tokyo.ac.jp/~nis/cdrom/sig00_cloud.pdf 3D Wolken]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Paper über generieren und rendern von 3 dimensionalen Wolken inklusive Schatten und Lichtstrahlen. Ich hab nur den Lichtstahlen-Algorithmus ausprobiert. Saulangsam aber sehr einfach zu implementieren. Einen Blick ist es auf jeden Fall wert. &lt;br /&gt;
|-&lt;br /&gt;
|[http://web.archive.org/web/20031011052035/http://www.geocities.com/ngdash/whitepapers/skydomecolor.html Skydome]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Wenn man mal schnell gute Farben für seinen Skydome braucht... &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Terrain===&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.flipcode.com/articles/article_geomipmaps.shtml FlipCode]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Artikel zu Geomipmaping. Zummindest hab ich es hier zum ersten mal gesehen. Und es funzt ganz gut. &lt;br /&gt;
|-&lt;br /&gt;
|[http://www.vterrain.org Virtual Terrain Project]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Eine Seite mit Links und Artikeln zu allem, was etwas mit Terrainrendering zu tun hat.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Sonstiges===&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[[Materialsammlung]]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
|Sammlung von gängigen Parametern für [[glMaterial]] hier im Wiki.&lt;br /&gt;
|-&lt;br /&gt;
|[http://freespace.virgin.net/hugo.elias/radiosity/radiosity.htm Radiosity]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Erklärt sehr schön die Funktionsweise von Radiosity, liefert Beispielcodes und ist recht gut illustriert.&lt;br /&gt;
|-&lt;br /&gt;
|[http://web.archive.org/web/20050825110920/http://legion.gibbering.net/projectx/paper/shadow%20mapping/ Shadowmapping]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Beschreibt das Trapezoidal Shadow Mapping - Verfahren für gerichte Lichter.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.flipcode.com/articles/article_generatingnames.shtml Namensgenerator]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Per Zufallsgenrator Namen erzeugen, und nie wieder kreativ werden müssen.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.paulsprojects.net/tutorials/simplebump/simplebump.html Bumpmapping]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Bumpmapping auf Lowend-Grakas. Damals war Bumpmapping noch was ganz tolles... &lt;br /&gt;
|-&lt;br /&gt;
|[http://www.paulsprojects.net/opengl/dpreflect/dpreflect.html Dot Product Reflect]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|zwar nur ne Demo, aber wenn man schon immer mal mit EMBM das Wasser aus Morrowind nachproggen wollte... &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Beispiele/Demos mit Quelltext ==&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.delphigl.de DelphiGL.de]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
| Hier finden sich besonders eindrucksvolle Newton Physik Demos. Meißtens sogar mit Quelltext.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.shadow3d.de.vu/ Shadow 3D]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
| Hier finden sich zwei Demos wie man Quake 3 Modelle lädt und eine glSlang Demo&lt;br /&gt;
|-&lt;br /&gt;
|[[Shadersammlung]] im DGL Wiki&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
| Hier findet man freie Shadersourcen.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.humus.name Humus]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
| Diverse eindrucksvolle Demos zu verschiedenen Techniken, häufig mit Quelltext in C (teilweise OpenGL / DirectX)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== weitere Links ==&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[http://www-user.tu-chemnitz.de/~pester/Lehre/CompGeo.pdf CompGeo.pdf]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
| Script &amp;quot;Einführung in die Computergeometrie&amp;quot; von Dr. Pester (TU-Chemnitz). Ideales Nachschlagewerk für die Mathematik die einem bei der Grafikprogrammierung so begegnet.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.robsite.de/ robsite.de]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
| Auf dieser riesigen Seite finden sich auch viele weitere Links über verschiedene Themen der 3D Programmierung.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.3dlinks.com/links.cfm?categoryid=3&amp;amp;subcategoryid=21 3dlinks.com]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
| Diese Seite hat es sich zur Hauptaufgabe gemacht Links auf Seiten mit dem Thema 3D zu sammeln.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.two-kings.de/links.html two-kings.de]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
| Sammlung diverser interessanter Links, vorallem auf Themen im gamedev-Forum verweisend.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.delgine.com Delgine.com]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
| Heimat des freien 3D Modellers &amp;quot;DeleD&amp;quot;, welcher in Delphi programmiert ist. Ihr findet dort auch Modellpackete, Texturpackete, Plugins und Hilfe bei der Programmierung von Delphi und OpenGL.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Spieleentwicklung =&lt;br /&gt;
&lt;br /&gt;
==Allgemein==&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.spieleprogrammierung.net/ Spieleprogrammierung - OpenGL - GLSL - OpenAL - KI - Animation - Spielephysik]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
|Auf dieser Seite findet Ihr Artikel, Tutorials und Programmbeispiele rund um das Thema Spieleprogrammierung. Programmiersprache ist hier C/C++.&lt;br /&gt;
|-&lt;br /&gt;
|[http://graphics-and-physics-framework.spieleprogrammierung.net/ OpenGL Graphics And Physics Framework]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
|Auf dieser Seite findet Ihr ein frei verfügbares OpenGL basiertes Grafik und Physik Framework (LGPL-Lizenz) samt zugehöriger Probammbeispiele. Programmiersprache ist hier C/C++.&lt;br /&gt;
|-&lt;br /&gt;
|[http://audio-framework.spieleprogrammierung.net/ OpenAL Audio Framework]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
|Auf dieser Seite findet Ihr ein frei verfügbares OpenAL Audio Framework (LGPL-Lizenz) samt zugehöriger Probammbeispiele. Unterstützt werden 3D Sounds, EFX (EAX Alternative) Reverb Effekte sowie Audio Streaming (Music and Voices). Programmiersprache ist hier C/C++.&lt;br /&gt;
|-&lt;br /&gt;
|[http://spieleentwicklung-im-web.spieleprogrammierung.net/ Spieleentwicklung im Web]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
|Auf dieser Seite findet Ihr Links (E-Books, Präsentationen, wissenschaftliche Arbeiten und Tutorials) zu verschiedenen Themengebieten der Spieleentwicklung.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Kopierschutz==&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[http://inner-smile.com/nocrack.phtml Inner-Smile.com]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
| Seite mit Gedanken zum Thema &amp;quot;Wie schütze ich meine Programme vor Crackern&amp;quot;. Falls die Seite nicht erreichbar ist hat Google noch ne [http://www.google.com/search?q=cache:hpqPT5G4WB0J:www.inner-smile.com/nocrack.phtml+http://inner-smile.com/nocrack.phtml&amp;amp;hl=de&amp;amp;gl=de&amp;amp;ct=clnk&amp;amp;cd=1 Version im Archiv].&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Künstliche Intelligenz ==&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[http://web.archive.org/web/20080319034335/http://www.kbs.uni-hannover.de/Lehre/KI2/Presentationen/presentation9798/esprit/spieltheorie/spieltheorie.html Uni-Hannover - Spieltheorie]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
|Artikel über die Grundlagen von KI in Spielen.&lt;br /&gt;
|-&lt;br /&gt;
|[http://web.archive.org/web/20080927010337/http://www.robsite.de/tutorials.php?tut=ki Robsite KI-Tutorials]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
| Sammlung von Texten zum Thema KI in Spielen. Beispiele sind meist in C++.&lt;br /&gt;
|-&lt;br /&gt;
|[http://ai-depot.com/ AI-Depot.com]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
| Seite die sich ausschließlich mit KI in Spielen beschäftigt.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.ai-junkie.com/links.html AI-Junkie.com]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Linkseite mit vielen KI relevanten Links. Die Seite AI-Junie selbst behandelt auch viele Themen rund um KI.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.aiwisdom.com/ AIWisdom.com]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Seite die sich mit KIs in Spielen beschäftigt und sich zum Ziel gesetzt hat, alle Artikel zum Thema zu finden und zu Katalogisieren. Es gibt hier auch Artikel über die KIs bestehender Spiele.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.aiguru.com/ AIGuru.com]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Newsseite zum Thema KI, Künstliches Leben, Hiernforschung, Robotik, Nanotechnologie - Halt alles was Spass macht.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.generation5.org/ Generation5.org]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Seite über KI, Robotik, etc. . Leider scheint die Seite Probleme zu haben regelmäßig aktualisiert zu werden. Aber zumindest sollte man einige Artikel finden. Die werden ja nicht schlecht.&lt;br /&gt;
|-&lt;br /&gt;
|[http://web.archive.org/web/20080702005527/http://www.gameai.com/ www.gameai.com]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|''Wurde Januar 2010 als down gemeldet. Weiss irgendwer etwas genaueres?'' Seite zum Thema KI in Spielen. Soll wohl einen gewissen Stellenwert in der AI-Szene haben.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www-i1.informatik.rwth-aachen.de/~algorithmus/algo19.php Algorithmus der Woche - Informatikjahr 2006]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
|Vielleicht schon etwas älter aber doch eine gute Anleitung um eine einfache Schach-KI zu erstellen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Ressourcen =&lt;br /&gt;
In dieser Gruppe finden sich Links um die Ressourcen für Eure Projekte zu erstellen.&lt;br /&gt;
&lt;br /&gt;
== Texturen / 2D-Grafiken ==&lt;br /&gt;
&lt;br /&gt;
'''Legende:'''&lt;br /&gt;
:'''Kostenpflichtige Seiten''' sind mit einem * zu '''kennzeichnen'''&lt;br /&gt;
:GPL: Kompatibel mit der GPL&lt;br /&gt;
:MPL: Kompatibel mit der MPL&lt;br /&gt;
:OSS: Verwendung in OpenSource Software nicht verboten&lt;br /&gt;
:CSS: Verwendung in ClosedSource Software nicht verboten&lt;br /&gt;
:Komm: Verwendung in kommerzieller Software nicht verboten&lt;br /&gt;
&lt;br /&gt;
=== Texturen ===&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;20%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;10%&amp;quot;|Genre&lt;br /&gt;
!width=&amp;quot;10%&amp;quot;|Lizenz&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|GPL&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|MPL&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|OSS&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|CSS&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Komm.&lt;br /&gt;
!width=&amp;quot;35%&amp;quot;|Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.davegh.com/vg/home.htm davegh.com]&lt;br /&gt;
|Fantasy&lt;br /&gt;
|[http://www.davegh.com/vg/termsandconditions.htm Eigene]&lt;br /&gt;
|?&lt;br /&gt;
|?&lt;br /&gt;
|✔&lt;br /&gt;
|✔&lt;br /&gt;
|✘&lt;br /&gt;
|Die Lizenz vererbt sich in die Projekte hinein.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.cgtextures.com/ cgtextures.com]&lt;br /&gt;
|Allgemein&lt;br /&gt;
|[http://www.cgtextures.com/content.php?action=license Eigene]&lt;br /&gt;
|✘&lt;br /&gt;
|✘&lt;br /&gt;
|✘&lt;br /&gt;
|?&lt;br /&gt;
|?&lt;br /&gt;
|Die Lizenz will im wesentlichen verhindern das Texturen in anderen Textursammlungen auftauchen. So wie ich das verstehe ist es kein Problem die Texturen unter einer anderen Lizenz zu veröffentlichen als die eigentliche Software. Die Software kann also sehr wohl OpenSource sein. Im Zweifelsfalls einfach den Support anschreiben, der ist sehr nett.&lt;br /&gt;
|-&lt;br /&gt;
|[https://wiki.openstreetmap.org/wiki/Texture_Library OpenStreetMap Texture Library]&lt;br /&gt;
|Allgemein &lt;br /&gt;
|Public Domain&lt;br /&gt;
|✘&lt;br /&gt;
|✘&lt;br /&gt;
|✘&lt;br /&gt;
|✘&lt;br /&gt;
|✘&lt;br /&gt;
|Die Texturen dienen der Visualisierung der 3D-Gebäude im OpenStreetMap Projekt&lt;br /&gt;
|-&lt;br /&gt;
|url&lt;br /&gt;
|Futuristisch, Mittelalter, etc.&lt;br /&gt;
|CC-BY-SA, etc., gerne auch mit Direktlink auf die Lizenzseite, so vorhanden.&lt;br /&gt;
|✔/✘/?&lt;br /&gt;
|✔/✘/?&lt;br /&gt;
|✔/✘/?&lt;br /&gt;
|✔/✘/?&lt;br /&gt;
|✔/✘/?&lt;br /&gt;
|Alle Bilder sind von Käse&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sonstige 2D-Grafiken ===&lt;br /&gt;
&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;20%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;45%&amp;quot;|Beschreibung&lt;br /&gt;
!width=&amp;quot;10%&amp;quot;|Lizenz&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|GPL&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|MPL&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|OSS&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|CSS&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Komm.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.famfamfam.com/lab/icons/silk/ famfamfam silk]&lt;br /&gt;
|Iconset, welches inzwischen relativ weit verbreitet ist. 700 sauber gezeichnete, erkennbare PNG-Icons in TrueColor. Man kann praktisch jede (Arbeits-)Anwendung mit diesem Set vollständig mit Icons versorgen.&lt;br /&gt;
|[http://creativecommons.org/licenses/by/2.5/ CC-BY 2.5], [http://creativecommons.org/licenses/by/3.0/ CC-BY 3.0]&lt;br /&gt;
|✔&lt;br /&gt;
|✔&lt;br /&gt;
|✔&lt;br /&gt;
|✔&lt;br /&gt;
|✔&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Texturerstellung ===&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[http://3d.diehlsworld.de/textures/index.htm 3d.diehlsworld.de]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
|Auf dieser Seite findet ihr kurze aber inhaltlich reiche Tutorials zu der Frage &amp;quot;Wie erstelle ich XXXXX-Texturen&amp;quot;. Dabei reicht die Palette von Untergrundtexturen wie Gras, Sand , Fels und Wasser (und Kombinationen dieser) bis hin zu Blitzen und Partikeln. Als Programm wird hier Photoshop verwendet.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.gimps.de/gimp/textur-muster/ gimps.de]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
|Schritt für Schritt Anleitungen wie man mit Gimp verschiedene Texturen erstellt.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cbt.k090999.de/gimp.php#texturen k090999.de]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
|Gimptutorials zum Erstellen verschiedene Texturen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Modelle / 3D-Grafiken ==&lt;br /&gt;
&lt;br /&gt;
=== Blender ===&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[http://blendpolis.de/f/viewtopic.php?t=5786 Blendpolis]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
| Ein Thread im Forum von [http://blendpolis.de Blendpolis] in dem '''sehr''' viele Tutorials aufgelistet sind&lt;br /&gt;
|-&lt;br /&gt;
|[http://blendpolis.de/f/article_cat.php?fldAuto=7 Blendpolis]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
| Eigentliche Tutorial Seite von [http://blendpolis.de Blendpolis] die Auswahl ist hier aber nicht so groß&lt;br /&gt;
|-&lt;br /&gt;
|[http://wikivid.com/index.php/Blender Blender at wikivid.com]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
| Linksammlung von Blender Video Tutorials &lt;br /&gt;
|-&lt;br /&gt;
|[http://www.blender.org/education-help/tutorials/getting-started/ blender3d.org]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
| Auch die Heimatseite von Blender bietet viele Tutorials unter anderm auch Video Tuorials&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.Blenderunderground.com Blenderunderground]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
| '''sehr gute''' Video-Tutorials&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sounds ==&lt;br /&gt;
&lt;br /&gt;
===Musik===&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.jamendo.com/ Jamendo.com]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Viele Künstler stellen hier ihre Alben unter einer Creative Commons Lizenz online. Man kann dort die Künstler auch kontaktieren und fragen ob man ihre Musik nutzen kann. Taugt außerdem als Radio! ;)&lt;br /&gt;
|-&lt;br /&gt;
|[http://incompetech.com/m/c/royalty-free/ Incompetech.com]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Viele sehr schön gemacht instrumentale Musik aus allen möglichen Genres. Sie ist frei verwenderbar, wenn man den Macher der Musik (Kevin MacLeod) in seinem Programm erwähnt. Aber das hat er auch verdient. Folgende Programme nutzen beispielsweise (auch) Musik von incompetech.com:&lt;br /&gt;
* OpenParty&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Soundeffekte===&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.freesound.org/ freesound.org]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|Diverse Sounds unter [http://www.creativecommons.org/ CreativeCommons] Lizenzen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Soundprogramme===&lt;br /&gt;
{| width = &amp;quot;100%&amp;quot; {{Prettytable_B1}}&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;|Link&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;|Sprache&lt;br /&gt;
!width=&amp;quot;70%&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|[http://audacity.sourceforge.net/?lang=de Sourceforgeseite von Audacity]&lt;br /&gt;
|{{Deutsch}}&lt;br /&gt;
|Ein einfaches, freies Programm um Sounddateien zu bearbeiten. Man kann es auch nutzen um Soundeffekte neu zu erstellen, indem man z.B. ein Geräusch mit dem Mikrofon aufnimmt und einige Effekt anwendet, um es passender und nicht mehr aufgenommen klingen zu lassen.&lt;br /&gt;
|-&lt;br /&gt;
|[http://lmms.sourceforge.net/ LMMS]&lt;br /&gt;
|{{Englisch}}&lt;br /&gt;
|LMMS (Linux MultiMedia Studio) ist ein OpenSource+Freeware Composer-Programm ähnlich zum bekannteren aber auch teuren CuBase(r). Trotz des Namens auch für Windows erhältlich.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Zweifach_Parametrisierte_Geometrie&amp;diff=24969</id>
		<title>Zweifach Parametrisierte Geometrie</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Zweifach_Parametrisierte_Geometrie&amp;diff=24969"/>
				<updated>2010-10-02T12:43:30Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: Tippfehler im Quelltext korrigiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Parametrisierte Geometrie ==&lt;br /&gt;
Viele mathematische, geometrische Objekte lassen sich leicht über eine Anzahl Parameter beschreiben, so dass man sie sehr leicht in Polygone oder sonstige Flächenstücke zerlegen kann. Für gewöhnlich ist im 3-dimensionalen Raum das Objekt durch 2 Parameter beschrieben, man hat also eine Funktion &amp;amp;phi; auf 2 Intervallen I1=[a1,e1], I2=[a2,e2] im 3D-Raum:&lt;br /&gt;
 &amp;amp;phi;: I1xI2 -&amp;gt; R&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;&lt;br /&gt;
Setzt man also in &amp;amp;phi; werte aus I1xI2 ein, so bekommt man einen Punkt auf der Oberfläche des Objektes zurück. Geht man nun systematisch diskrete Punkte auf der Oberfläche durch und fasst sie zu Polygonen zusammen, so erhält man das entsprechende Polygonmodell:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure CreateObject(n: Integer; Phi : Parametrisierung; a1, e1, a2, e2 : Double);&lt;br /&gt;
var&lt;br /&gt;
  i,j: Integer;&lt;br /&gt;
  theta1, theta2, omega: Double;&lt;br /&gt;
begin&lt;br /&gt;
  for j:=0 to n do&lt;br /&gt;
  begin&lt;br /&gt;
    theta1 := ((e1-a1) / n)*j + a1;&lt;br /&gt;
    theta2 := ((e1-a1) / n)*(j+1) + a1;&lt;br /&gt;
  &lt;br /&gt;
    glBegin(GL_QUAD_STRIP);&lt;br /&gt;
      for i:=0 to n do&lt;br /&gt;
      begin&lt;br /&gt;
        omega:= ((e2-a2)/n)*i + a2;&lt;br /&gt;
  &lt;br /&gt;
        glTexCoord2f(i/n,j/n);&lt;br /&gt;
        glVertex3f(Phi(theta1, omega));&lt;br /&gt;
 &lt;br /&gt;
        glTexCoord2f(i/n,2*j/n);&lt;br /&gt;
        glVertex3f(Phi(theta2, omega));&lt;br /&gt;
      end;&lt;br /&gt;
    glEnd;&lt;br /&gt;
  end;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
==== Kugel ====&lt;br /&gt;
 I1 := [0,&amp;amp;pi;], I2 := [-&amp;amp;pi;, &amp;amp;pi;]&lt;br /&gt;
 (theta, omega) -&amp;gt; &amp;amp;phi;(theta, omega) := &lt;br /&gt;
                   (sin(theta)*cos(omega); sin(theta)*sin(omega); cos(theta) )&lt;br /&gt;
&lt;br /&gt;
==== Torus ====&lt;br /&gt;
 I1 := I2 := [0,2*&amp;amp;pi;]&lt;br /&gt;
 0 &amp;lt;= r,R &lt;br /&gt;
 (theta, omega) -&amp;gt; &amp;amp;phi;(theta, omega) := &lt;br /&gt;
                   ((R + r*cos(theta))*cos(omega); (R + r*cos(theta))*sin(omega); r*sin(theta))&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Technik_oder_Algorithmus]]&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=shader_blur&amp;diff=22477</id>
		<title>shader blur</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=shader_blur&amp;diff=22477"/>
				<updated>2009-01-19T22:30:23Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: /* Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=blur=&lt;br /&gt;
Zurück zur [[Shadersammlung]]&lt;br /&gt;
{|{{Prettytable_B1}} width=100%&lt;br /&gt;
!width=60%|Beschreibung&lt;br /&gt;
!width=20%|Autor&lt;br /&gt;
!width=20%|Version&lt;br /&gt;
|-&lt;br /&gt;
|dieser Shader dient dazu ein screenaligned Quad geblurred zu rendern.&lt;br /&gt;
|damadmax&lt;br /&gt;
|0.1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bilder==&lt;br /&gt;
{|&lt;br /&gt;
|[[Bild:Beispielbild.jpg|framed|Bildbeschreibung]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Bild:Beispielbild.jpg|framed|Bildbeschreibung]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Text und Bilder folgen''&lt;br /&gt;
&lt;br /&gt;
==Beschreibung==&lt;br /&gt;
Der Shader macht mehrere Lookups auf die übergebene Textur mit einem -in einem Array- definierten Abstand zueinander.&lt;br /&gt;
So kann man auch andere Verteilungen realisieren (z.B. Gauss, Normalverteilung).&lt;br /&gt;
Der daraus berechnete Durchschnitt wird dann als Fragment ausgegeben. &lt;br /&gt;
&lt;br /&gt;
Jetzt könnte man natürlich hingehen und sowohl horizontal als auch vertikal in einem Renderdurchgang realisieren. Allerdings wären dass dann bei einer Größe von 5x5 satte 25 Abfragen insgesamt. Mit zwei Durchläufen, verteilt auf horizontal und vertikal, sind es lediglich 10.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ich habe im nachhinein noch ein paar Verschönerungen am originalen (funktionierenden) Quelltext vorgenommen. Deswegen könnten noch Tipp-/Syntaxfehler vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
==Besondere Vorraussetzungen==&lt;br /&gt;
Ich habe diesen Shader mit dem FBO benutzt, weshalb die Auflösung/Texelgröße ein Seitenverhältnis ungleich 1 hat.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
Vertex Shader&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
  gl_TexCoord[0] = gl_MultiTexCoord0;&lt;br /&gt;
  gl_Position = ftransform();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fragment Shader (vertikal)&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
uniform sampler2D Texture0;&lt;br /&gt;
uniform float strength;&lt;br /&gt;
&lt;br /&gt;
vec2 data[5];&lt;br /&gt;
vec2 texelSize = vec2(1.0) / vec2(640.0, 480.0); // resolution hardcoded&lt;br /&gt;
&lt;br /&gt;
int num = 5;&lt;br /&gt;
&lt;br /&gt;
void main() &lt;br /&gt;
{&lt;br /&gt;
  // vec2 data( offset, weight )&lt;br /&gt;
  data[0] = vec2(-2.0, strength * 0.3);&lt;br /&gt;
  data[1] = vec2(-1.0, strength * 0.6);&lt;br /&gt;
  data[2] = vec2( 0.0, strength);&lt;br /&gt;
  data[3] = vec2( 1.0, strength * 0.6);&lt;br /&gt;
  data[4] = vec2( 2.0, strength * 0.3);&lt;br /&gt;
&lt;br /&gt;
  vec4 blur;&lt;br /&gt;
  vec2 curPos;&lt;br /&gt;
  vec4 curColor;&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; num; i++)&lt;br /&gt;
  {&lt;br /&gt;
    curPos   = vec2( gl_TexCoord[0].x, gl_TexCoord[0].y + data[i].x * texelSize.y );&lt;br /&gt;
    curColor = texture2D( Texture0, curPos ) * data[i].y;&lt;br /&gt;
    blur    += curColor;&lt;br /&gt;
  }&lt;br /&gt;
  blur /= float(num);  // calc average&lt;br /&gt;
  gl_FragColor = blur;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fragment Shader (horizontal)&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
uniform sampler2D Texture0;&lt;br /&gt;
uniform float strength;&lt;br /&gt;
&lt;br /&gt;
vec2 data[5];&lt;br /&gt;
vec2 texelSize = vec2(1.0) / vec2(640.0, 480.0); // resolution hardcoded&lt;br /&gt;
&lt;br /&gt;
int num = 5;&lt;br /&gt;
&lt;br /&gt;
void main() &lt;br /&gt;
{&lt;br /&gt;
  // vec2 data( offset, weight )&lt;br /&gt;
  data[0] = vec2(-2.0, strength * 0.3);&lt;br /&gt;
  data[1] = vec2(-1.0, strength * 0.6);&lt;br /&gt;
  data[2] = vec2( 0.0, strength);&lt;br /&gt;
  data[3] = vec2( 1.0, strength * 0.6);&lt;br /&gt;
  data[4] = vec2( 2.0, strength * 0.3);&lt;br /&gt;
&lt;br /&gt;
  vec4 blur;&lt;br /&gt;
  vec2 curPos;&lt;br /&gt;
  vec4 curColor;&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; num; i++)&lt;br /&gt;
  {&lt;br /&gt;
    curPos   = vec2( gl_TexCoord[0].x + data[i].x * texelSize.x, gl_TexCoord[0].y );&lt;br /&gt;
    curColor = texture2D( Texture0, curPos ) * data[i].y;&lt;br /&gt;
    blur    += curColor;&lt;br /&gt;
  }&lt;br /&gt;
  blur /= float(num);  // calc average&lt;br /&gt;
  gl_FragColor = blur;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=shader_blur&amp;diff=22476</id>
		<title>shader blur</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=shader_blur&amp;diff=22476"/>
				<updated>2009-01-19T21:48:26Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: /* Besondere Vorraussetzungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=blur=&lt;br /&gt;
Zurück zur [[Shadersammlung]]&lt;br /&gt;
{|{{Prettytable_B1}} width=100%&lt;br /&gt;
!width=60%|Beschreibung&lt;br /&gt;
!width=20%|Autor&lt;br /&gt;
!width=20%|Version&lt;br /&gt;
|-&lt;br /&gt;
|dieser Shader dient dazu ein screenaligned Quad geblurred zu rendern.&lt;br /&gt;
|damadmax&lt;br /&gt;
|0.1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bilder==&lt;br /&gt;
{|&lt;br /&gt;
|[[Bild:Beispielbild.jpg|framed|Bildbeschreibung]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Bild:Beispielbild.jpg|framed|Bildbeschreibung]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Text und Bilder folgen''&lt;br /&gt;
&lt;br /&gt;
==Beschreibung==&lt;br /&gt;
Der Shader macht mehrere Lookups auf die übergebene Textur mit einem -in einem Array- definierten Abstand zueinander.&lt;br /&gt;
So kann man auch andere Verteilungen realisieren (z.B. Gauss, Normalverteilung).&lt;br /&gt;
Der daraus berechnete Durchschnitt wird dann als Fragment ausgegeben. &lt;br /&gt;
&lt;br /&gt;
Jetzt könnte man natürlich hingehen und sowohl horizontal als auch vertikal in einem Renderdurchgang realisieren. Allerdings wären dass dann bei einer Größe von 5x5 satte 25 Abfragen insgesamt. Mit zwei Durchläufen, verteilt auf horizontal und vertikal, sind es lediglich 10.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ich habe im nachhinein noch ein paar Verschönerungen am originalen (funktionierenden) Quelltext vorgenommen. Deswegen könnten noch Tipp-/Syntaxfehler vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
==Besondere Vorraussetzungen==&lt;br /&gt;
Ich habe diesen Shader mit dem FBO benutzt, weshalb die Auflösung/Texelgröße ein Seitenverhältnis ungleich 1 hat.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
Vertex Shader&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
  gl_TexCoord[0] = gl_MultiTexCoord0;&lt;br /&gt;
  gl_Position = ftransform();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fragment Shader (vertikal)&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
uniform sampler2D Texture0;&lt;br /&gt;
uniform float strength;&lt;br /&gt;
&lt;br /&gt;
vec2 data[5];&lt;br /&gt;
vec2 texelSize = vec2(1.0) / vec2(640.0, 480.0); // resolution hardcoded&lt;br /&gt;
&lt;br /&gt;
int num = 5;&lt;br /&gt;
&lt;br /&gt;
void main() &lt;br /&gt;
{&lt;br /&gt;
  // vec2 data( offset, weight )&lt;br /&gt;
  data[0] = vec2(-2.0, strength * 0.3);&lt;br /&gt;
  data[1] = vec2(-1.0, strength * 0.6);&lt;br /&gt;
  data[2] = vec2( 0.0, strength);&lt;br /&gt;
  data[3] = vec2( 1.0, strength * 0.6);&lt;br /&gt;
  data[4] = vec2( 2.0, strength * 0.3);&lt;br /&gt;
&lt;br /&gt;
  vec4 blur;&lt;br /&gt;
  vec2 curPos;&lt;br /&gt;
  vec4 curColor;&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; num; i++)&lt;br /&gt;
  {&lt;br /&gt;
    curPos   = vec2( gl_TexCoord[0].y + data[i].x * texelSize.y );&lt;br /&gt;
    curColor = texture2D( Texture0, curPos ) * data[i].y;&lt;br /&gt;
    blur    += curColor;&lt;br /&gt;
  }&lt;br /&gt;
  blur /= float(num);  // calc average&lt;br /&gt;
  gl_FragColor = blur;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fragment Shader (horizontal)&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
uniform sampler2D Texture0;&lt;br /&gt;
uniform float strength;&lt;br /&gt;
&lt;br /&gt;
vec2 data[5];&lt;br /&gt;
vec2 texelSize = vec2(1.0) / vec2(640.0, 480.0); // resolution hardcoded&lt;br /&gt;
&lt;br /&gt;
int num = 5;&lt;br /&gt;
&lt;br /&gt;
void main() &lt;br /&gt;
{&lt;br /&gt;
  // vec2 data( offset, weight )&lt;br /&gt;
  data[0] = vec2(-2.0, strength * 0.3);&lt;br /&gt;
  data[1] = vec2(-1.0, strength * 0.6);&lt;br /&gt;
  data[2] = vec2( 0.0, strength);&lt;br /&gt;
  data[3] = vec2( 1.0, strength * 0.6);&lt;br /&gt;
  data[4] = vec2( 2.0, strength * 0.3);&lt;br /&gt;
&lt;br /&gt;
  vec4 blur;&lt;br /&gt;
  vec2 curPos;&lt;br /&gt;
  vec4 curColor;&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; num; i++)&lt;br /&gt;
  {&lt;br /&gt;
    curPos   = vec2( gl_TexCoord[0].x + data[i].x * texelSize.x );&lt;br /&gt;
    curColor = texture2D( Texture0, curPos ) * data[i].y;&lt;br /&gt;
    blur    += curColor;&lt;br /&gt;
  }&lt;br /&gt;
  blur /= float(num);  // calc average&lt;br /&gt;
  gl_FragColor = blur;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=shader_blur&amp;diff=22475</id>
		<title>shader blur</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=shader_blur&amp;diff=22475"/>
				<updated>2009-01-19T21:47:40Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: /* Beschreibung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=blur=&lt;br /&gt;
Zurück zur [[Shadersammlung]]&lt;br /&gt;
{|{{Prettytable_B1}} width=100%&lt;br /&gt;
!width=60%|Beschreibung&lt;br /&gt;
!width=20%|Autor&lt;br /&gt;
!width=20%|Version&lt;br /&gt;
|-&lt;br /&gt;
|dieser Shader dient dazu ein screenaligned Quad geblurred zu rendern.&lt;br /&gt;
|damadmax&lt;br /&gt;
|0.1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bilder==&lt;br /&gt;
{|&lt;br /&gt;
|[[Bild:Beispielbild.jpg|framed|Bildbeschreibung]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Bild:Beispielbild.jpg|framed|Bildbeschreibung]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Text und Bilder folgen''&lt;br /&gt;
&lt;br /&gt;
==Beschreibung==&lt;br /&gt;
Der Shader macht mehrere Lookups auf die übergebene Textur mit einem -in einem Array- definierten Abstand zueinander.&lt;br /&gt;
So kann man auch andere Verteilungen realisieren (z.B. Gauss, Normalverteilung).&lt;br /&gt;
Der daraus berechnete Durchschnitt wird dann als Fragment ausgegeben. &lt;br /&gt;
&lt;br /&gt;
Jetzt könnte man natürlich hingehen und sowohl horizontal als auch vertikal in einem Renderdurchgang realisieren. Allerdings wären dass dann bei einer Größe von 5x5 satte 25 Abfragen insgesamt. Mit zwei Durchläufen, verteilt auf horizontal und vertikal, sind es lediglich 10.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ich habe im nachhinein noch ein paar Verschönerungen am originalen (funktionierenden) Quelltext vorgenommen. Deswegen könnten noch Tipp-/Syntaxfehler vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
==Besondere Vorraussetzungen==&lt;br /&gt;
Ich habe diesen Shader mit dem FBO benutzt, weshalb die Auflösung/Texelgröße ein ungleiches Seitenverhältnis hat.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
Vertex Shader&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
  gl_TexCoord[0] = gl_MultiTexCoord0;&lt;br /&gt;
  gl_Position = ftransform();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fragment Shader (vertikal)&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
uniform sampler2D Texture0;&lt;br /&gt;
uniform float strength;&lt;br /&gt;
&lt;br /&gt;
vec2 data[5];&lt;br /&gt;
vec2 texelSize = vec2(1.0) / vec2(640.0, 480.0); // resolution hardcoded&lt;br /&gt;
&lt;br /&gt;
int num = 5;&lt;br /&gt;
&lt;br /&gt;
void main() &lt;br /&gt;
{&lt;br /&gt;
  // vec2 data( offset, weight )&lt;br /&gt;
  data[0] = vec2(-2.0, strength * 0.3);&lt;br /&gt;
  data[1] = vec2(-1.0, strength * 0.6);&lt;br /&gt;
  data[2] = vec2( 0.0, strength);&lt;br /&gt;
  data[3] = vec2( 1.0, strength * 0.6);&lt;br /&gt;
  data[4] = vec2( 2.0, strength * 0.3);&lt;br /&gt;
&lt;br /&gt;
  vec4 blur;&lt;br /&gt;
  vec2 curPos;&lt;br /&gt;
  vec4 curColor;&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; num; i++)&lt;br /&gt;
  {&lt;br /&gt;
    curPos   = vec2( gl_TexCoord[0].y + data[i].x * texelSize.y );&lt;br /&gt;
    curColor = texture2D( Texture0, curPos ) * data[i].y;&lt;br /&gt;
    blur    += curColor;&lt;br /&gt;
  }&lt;br /&gt;
  blur /= float(num);  // calc average&lt;br /&gt;
  gl_FragColor = blur;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fragment Shader (horizontal)&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
uniform sampler2D Texture0;&lt;br /&gt;
uniform float strength;&lt;br /&gt;
&lt;br /&gt;
vec2 data[5];&lt;br /&gt;
vec2 texelSize = vec2(1.0) / vec2(640.0, 480.0); // resolution hardcoded&lt;br /&gt;
&lt;br /&gt;
int num = 5;&lt;br /&gt;
&lt;br /&gt;
void main() &lt;br /&gt;
{&lt;br /&gt;
  // vec2 data( offset, weight )&lt;br /&gt;
  data[0] = vec2(-2.0, strength * 0.3);&lt;br /&gt;
  data[1] = vec2(-1.0, strength * 0.6);&lt;br /&gt;
  data[2] = vec2( 0.0, strength);&lt;br /&gt;
  data[3] = vec2( 1.0, strength * 0.6);&lt;br /&gt;
  data[4] = vec2( 2.0, strength * 0.3);&lt;br /&gt;
&lt;br /&gt;
  vec4 blur;&lt;br /&gt;
  vec2 curPos;&lt;br /&gt;
  vec4 curColor;&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; num; i++)&lt;br /&gt;
  {&lt;br /&gt;
    curPos   = vec2( gl_TexCoord[0].x + data[i].x * texelSize.x );&lt;br /&gt;
    curColor = texture2D( Texture0, curPos ) * data[i].y;&lt;br /&gt;
    blur    += curColor;&lt;br /&gt;
  }&lt;br /&gt;
  blur /= float(num);  // calc average&lt;br /&gt;
  gl_FragColor = blur;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Diskussion:shader_blur&amp;diff=22058</id>
		<title>Diskussion:shader blur</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Diskussion:shader_blur&amp;diff=22058"/>
				<updated>2008-08-12T15:23:32Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: Die Seite wurde neu angelegt: Artikel wird noch bearbeitet. Bitte noch nicht in die Liste aufnehmen. --~~~~&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Artikel wird noch bearbeitet. Bitte noch nicht in die Liste aufnehmen.&lt;br /&gt;
--[[Benutzer:Damadmax|Damadmax]] 15:23, 12. Aug. 2008 (UTC)&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=shader_blur&amp;diff=22057</id>
		<title>shader blur</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=shader_blur&amp;diff=22057"/>
				<updated>2008-08-12T15:10:04Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: Die Seite wurde neu angelegt: =blur= Zurück zur Shadersammlung {|{{Prettytable_B1}} width=100% !width=60%|Beschreibung !width=20%|Autor !width=20%|Version |- |dieser Shader dient dazu ein scree...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=blur=&lt;br /&gt;
Zurück zur [[Shadersammlung]]&lt;br /&gt;
{|{{Prettytable_B1}} width=100%&lt;br /&gt;
!width=60%|Beschreibung&lt;br /&gt;
!width=20%|Autor&lt;br /&gt;
!width=20%|Version&lt;br /&gt;
|-&lt;br /&gt;
|dieser Shader dient dazu ein screenaligned Quad geblurred zu rendern.&lt;br /&gt;
|damadmax&lt;br /&gt;
|0.1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bilder==&lt;br /&gt;
{|&lt;br /&gt;
|[[Bild:Beispielbild.jpg|framed|Bildbeschreibung]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Bild:Beispielbild.jpg|framed|Bildbeschreibung]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Text und Bilder folgen''&lt;br /&gt;
&lt;br /&gt;
==Beschreibung==&lt;br /&gt;
Der Shader macht mehrere Lookups auf die übergebene Textur mit einem -in einem Array- definierten Abstand zueinander.&lt;br /&gt;
So kann man auch andere Verteilungen realisieren (z.B. Gauss).&lt;br /&gt;
Der daraus berechnete Durchschnitt wird dann als Fragment ausgegeben. &lt;br /&gt;
&lt;br /&gt;
Jetzt könnte man natürlich hingehen und sowohl horizontal als auch vertikal in einem Renderdurchgang realisieren. Allerdings wären dass dann bei einer Größe von 5x5 satte 25 Abfragen insgesamt. Mit zwei Durchläufen, verteilt auf horizontal und vertikal, sind es lediglich 10.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ich habe im nachhinein noch ein paar Verschönerungen am Quelltext vorgenommen. Deswegen könnten noch Tippfehler vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
==Besondere Vorraussetzungen==&lt;br /&gt;
Ich habe diesen Shader mit dem FBO benutzt, weshalb die Auflösung/Texelgröße ein ungleiches Seitenverhältnis hat.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
Vertex Shader&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
  gl_TexCoord[0] = gl_MultiTexCoord0;&lt;br /&gt;
  gl_Position = ftransform();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fragment Shader (vertikal)&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
uniform sampler2D Texture0;&lt;br /&gt;
uniform float strength;&lt;br /&gt;
&lt;br /&gt;
vec2 data[5];&lt;br /&gt;
vec2 texelSize = vec2(1.0) / vec2(640.0, 480.0); // resolution hardcoded&lt;br /&gt;
&lt;br /&gt;
int num = 5;&lt;br /&gt;
&lt;br /&gt;
void main() &lt;br /&gt;
{&lt;br /&gt;
  // vec2 data( offset, weight )&lt;br /&gt;
  data[0] = vec2(-2.0, strength * 0.3);&lt;br /&gt;
  data[1] = vec2(-1.0, strength * 0.6);&lt;br /&gt;
  data[2] = vec2( 0.0, strength);&lt;br /&gt;
  data[3] = vec2( 1.0, strength * 0.6);&lt;br /&gt;
  data[4] = vec2( 2.0, strength * 0.3);&lt;br /&gt;
&lt;br /&gt;
  vec4 blur;&lt;br /&gt;
  vec2 curPos;&lt;br /&gt;
  vec4 curColor;&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; num; i++)&lt;br /&gt;
  {&lt;br /&gt;
    curPos   = vec2( gl_TexCoord[0].y + data[i].x * texelSize.y );&lt;br /&gt;
    curColor = texture2D( Texture0, curPos ) * data[i].y;&lt;br /&gt;
    blur    += curColor;&lt;br /&gt;
  }&lt;br /&gt;
  blur /= float(num);  // calc average&lt;br /&gt;
  gl_FragColor = blur;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fragment Shader (horizontal)&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
uniform sampler2D Texture0;&lt;br /&gt;
uniform float strength;&lt;br /&gt;
&lt;br /&gt;
vec2 data[5];&lt;br /&gt;
vec2 texelSize = vec2(1.0) / vec2(640.0, 480.0); // resolution hardcoded&lt;br /&gt;
&lt;br /&gt;
int num = 5;&lt;br /&gt;
&lt;br /&gt;
void main() &lt;br /&gt;
{&lt;br /&gt;
  // vec2 data( offset, weight )&lt;br /&gt;
  data[0] = vec2(-2.0, strength * 0.3);&lt;br /&gt;
  data[1] = vec2(-1.0, strength * 0.6);&lt;br /&gt;
  data[2] = vec2( 0.0, strength);&lt;br /&gt;
  data[3] = vec2( 1.0, strength * 0.6);&lt;br /&gt;
  data[4] = vec2( 2.0, strength * 0.3);&lt;br /&gt;
&lt;br /&gt;
  vec4 blur;&lt;br /&gt;
  vec2 curPos;&lt;br /&gt;
  vec4 curColor;&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; num; i++)&lt;br /&gt;
  {&lt;br /&gt;
    curPos   = vec2( gl_TexCoord[0].x + data[i].x * texelSize.x );&lt;br /&gt;
    curColor = texture2D( Texture0, curPos ) * data[i].y;&lt;br /&gt;
    blur    += curColor;&lt;br /&gt;
  }&lt;br /&gt;
  blur /= float(num);  // calc average&lt;br /&gt;
  gl_FragColor = blur;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=shader_verysimple&amp;diff=22056</id>
		<title>shader verysimple</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=shader_verysimple&amp;diff=22056"/>
				<updated>2008-08-12T14:14:42Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: /* Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=verysimple=&lt;br /&gt;
Zurück zur [[Shadersammlung]]&lt;br /&gt;
{|{{Prettytable_B1}} width=100%&lt;br /&gt;
!width=60%|Beschreibung&lt;br /&gt;
!width=20%|Autor&lt;br /&gt;
!width=20%|Version&lt;br /&gt;
|-&lt;br /&gt;
|sehr einfacher Shader, welcher eine Textur an Flächen bindet.&lt;br /&gt;
|damadmax&lt;br /&gt;
|0.1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bilder==&lt;br /&gt;
{|&lt;br /&gt;
|[[Bild:Beispielbild.jpg|framed|Bildbeschreibung]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Bild:Beispielbild.jpg|framed|Bildbeschreibung]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Ich bin mir nicht sicher ob ein einfaches texturiertes Quad als bildliches Beispiel ausreicht?.''&lt;br /&gt;
&lt;br /&gt;
==Beschreibung==&lt;br /&gt;
Der Shader ist sehr einfach gehalten. Im Vertex Shader wird lediglich die Standard Transformation durchgeführt und die Texturkoordinate für den Fragment Shader ausgelesen. Der Fragment Shader bannt diesen Texel über einen Lookup in der gebundenden Textur in den Framebuffer.&lt;br /&gt;
&lt;br /&gt;
==Besondere Vorraussetzungen==&lt;br /&gt;
keine&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
Vertex Shader&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
  gl_TexCoord[0] = gl_MultiTexCoord0;&lt;br /&gt;
  gl_Position = ftransform();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fragment Shader&lt;br /&gt;
&amp;lt;cpp&amp;gt;&lt;br /&gt;
uniform sampler2D Texture0;&lt;br /&gt;
&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
  gl_FragColor = texture2D(Texture0, gl_TexCoord[0].xy);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/cpp&amp;gt;&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=shader_verysimple&amp;diff=22042</id>
		<title>shader verysimple</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=shader_verysimple&amp;diff=22042"/>
				<updated>2008-08-10T23:21:50Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: Die Seite wurde neu angelegt: =verysimple= Zurück zur Shadersammlung {|{{Prettytable_B1}} width=100% !width=60%|Beschreibung !width=20%|Autor !width=20%|Version |- |sehr einfacher Shader |damad...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=verysimple=&lt;br /&gt;
Zurück zur [[Shadersammlung]]&lt;br /&gt;
{|{{Prettytable_B1}} width=100%&lt;br /&gt;
!width=60%|Beschreibung&lt;br /&gt;
!width=20%|Autor&lt;br /&gt;
!width=20%|Version&lt;br /&gt;
|-&lt;br /&gt;
|sehr einfacher Shader&lt;br /&gt;
|damadmax&lt;br /&gt;
|0.1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bilder==&lt;br /&gt;
{|&lt;br /&gt;
|[[Bild:Beispielbild.jpg|framed|Bildbeschreibung]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Bild:Beispielbild.jpg|framed|Bildbeschreibung]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Ich bin mir nicht sicher ob ein einfaches texturiertes Quad als bildliches Beispiel ausreicht?.''&lt;br /&gt;
&lt;br /&gt;
==Beschreibung==&lt;br /&gt;
Der Shader ist sehr einfach gehalten. Im Vertex Shader wird lediglich die Standard Transformation durchgeführt und die Texturkoordinate für den Fragment Shader ausgelesen. Der Fragment Shader bannt diesen Texel über einen Lookup in der gebundenden Textur in den Framebuffer.&lt;br /&gt;
&lt;br /&gt;
==Besondere Vorraussetzungen==&lt;br /&gt;
keine&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
  gl_TexCoord[0] = gl_MultiTexCoord0;&lt;br /&gt;
  gl_Position = ftransform();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
uniform sampler2D Texture0;&lt;br /&gt;
&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
  gl_FragColor = texture2D(Texture0, gl_TexCoord[0].xy);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax&amp;diff=21902</id>
		<title>Benutzer:Damadmax</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax&amp;diff=21902"/>
				<updated>2008-06-30T23:49:40Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: /* Klassen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Über mich=&lt;br /&gt;
''BETRETEN DER BAUSTELLE AUF EIGENE GEFAHR!''&lt;br /&gt;
&lt;br /&gt;
=Klassen=&lt;br /&gt;
&lt;br /&gt;
Über die vergangene Zeit sind ein paar Klassen entstanden, die vielleicht für den ein oder anderen nützlich sein könnten.&lt;br /&gt;
&lt;br /&gt;
==Klasse Timing==&lt;br /&gt;
Dies ist die Timing-Klasse wie ich sie in allen meiner Testprogramme und Projekte verwende.&lt;br /&gt;
&amp;lt;pascal&amp;gt;unit DETiming;&lt;br /&gt;
&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  TDETiming = class&lt;br /&gt;
  public&lt;br /&gt;
    constructor Create;&lt;br /&gt;
    destructor Destroy; override;&lt;br /&gt;
    procedure Init;&lt;br /&gt;
    procedure Tick;&lt;br /&gt;
&lt;br /&gt;
  var&lt;br /&gt;
    FrameTime         : single;&lt;br /&gt;
    FramesPerSecond   : single;&lt;br /&gt;
    FrameTimeInMs     : single;&lt;br /&gt;
    TotalFramesDrawn  : int64;&lt;br /&gt;
    CurrentFrames     : integer;&lt;br /&gt;
    TotalTimeRunning  : single;&lt;br /&gt;
&lt;br /&gt;
  private var&lt;br /&gt;
    QPCFreq           : int64;&lt;br /&gt;
    QPCLast           : int64;&lt;br /&gt;
    QPCNow            : int64;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
  Windows;&lt;br /&gt;
&lt;br /&gt;
constructor TDETiming.Create;&lt;br /&gt;
begin&lt;br /&gt;
  inherited Create;&lt;br /&gt;
  Init;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
destructor TDETiming.Destroy;&lt;br /&gt;
begin&lt;br /&gt;
  inherited Destroy;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TDETiming.Init;&lt;br /&gt;
begin&lt;br /&gt;
  QueryPerformanceCounter(QPCLast);&lt;br /&gt;
  QueryPerformanceFrequency(QPCFreq);&lt;br /&gt;
  CurrentFrames    := 0;&lt;br /&gt;
  TotalFramesDrawn := 0;&lt;br /&gt;
  TotalTimeRunning := 0;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TDETiming.Tick;&lt;br /&gt;
begin&lt;br /&gt;
  QueryPerformanceCounter(QPCNow);                     // PerfCounter abfragen&lt;br /&gt;
  TotalFramesDrawn := TotalFramesDrawn + 1;            // Selbsterklaerend :)&lt;br /&gt;
  FrameTimeInMS    := (QPCNow - QPCLast) / QPCFreq;    // Zeit in Millisekunden pro Frame; fuer Timebased Movement&lt;br /&gt;
  FrameTime        := FrameTimeInMS * 1000.0;          // Zeit in Sekunden&lt;br /&gt;
  TotalTimeRunning := TotalTimeRunning + FrameTime;    // Laufzeit in Sekunden&lt;br /&gt;
  FramesPerSecond  := 1.0 / FrameTimeInMs;             // Frames pro Sekunde&lt;br /&gt;
  QPCLast          := QPCNow;                          // PerfCounter speichern&lt;br /&gt;
end;&amp;lt;/pascal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Klasse Profiler==&lt;br /&gt;
Den Profiler benutze ich um festzustellen wieviel Zeit in welchem Programmteil vergeht.&lt;br /&gt;
Nach jedem Programmabschnitt der untersucht werden soll die Funktion Add mit einem fortlaufenden Wert (0, 1, 2, ...) aufrufen.&lt;br /&gt;
Die Funktion AsString liefert die Werte in Prozent.&lt;br /&gt;
&amp;lt;pascal&amp;gt;&lt;br /&gt;
unit DEProfiler;&lt;br /&gt;
&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  TDEProfiler = class&lt;br /&gt;
  public&lt;br /&gt;
    constructor Create; overload;&lt;br /&gt;
    constructor Create(AMeasureCount:word); overload;&lt;br /&gt;
    destructor Destroy; override;&lt;br /&gt;
    procedure Add(AIndex:word);&lt;br /&gt;
    function GetSum: int64;&lt;br /&gt;
    function GetValue(AIndex:word): int64;&lt;br /&gt;
    function AsString : String;                          // Hilfsfunktion fuer Logausgabe   (in %)&lt;br /&gt;
    procedure Reset;&lt;br /&gt;
&lt;br /&gt;
  private&lt;br /&gt;
    FLastAddTime     : int64;&lt;br /&gt;
    FSum             : int64;&lt;br /&gt;
    FMeasuredValues  : Array of int64;&lt;br /&gt;
    FSize            : word;&lt;br /&gt;
&lt;br /&gt;
    procedure Init(ASize:word);&lt;br /&gt;
    procedure ResetValues;&lt;br /&gt;
    function CheckRange(AIndex:word): Boolean;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
  Windows,&lt;br /&gt;
  SysUtils;&lt;br /&gt;
  &lt;br /&gt;
constructor TDEProfiler.Create;&lt;br /&gt;
begin&lt;br /&gt;
  inherited Create;&lt;br /&gt;
  Init(8);                 // Standardmaessig 8 Eintraege&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
constructor TDEProfiler.Create(AMeasureCount:word);&lt;br /&gt;
begin&lt;br /&gt;
  inherited Create;&lt;br /&gt;
  Init(AMeasureCount);      // Benutzerdefinierte Anzahl Eintraege&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
destructor TDEProfiler.Destroy;&lt;br /&gt;
begin&lt;br /&gt;
  inherited Destroy;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TDEProfiler.Add(AIndex:word);&lt;br /&gt;
var&lt;br /&gt;
  ActTime : int64;&lt;br /&gt;
  Diff : int64;&lt;br /&gt;
begin&lt;br /&gt;
  QueryPerformanceCounter( ActTime );&lt;br /&gt;
  Diff := ActTime - FLastAddTime;&lt;br /&gt;
  FMeasuredValues[AIndex] := FMeasuredValues[AIndex] + Diff;&lt;br /&gt;
  FSum := FSum + Diff;&lt;br /&gt;
  FLastAddTime := ActTime;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function TDEProfiler.GetSum: int64;&lt;br /&gt;
begin&lt;br /&gt;
  Result := FSum;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function TDEProfiler.GetValue(AIndex:word): int64;&lt;br /&gt;
begin&lt;br /&gt;
  if CheckRange(AIndex) then&lt;br /&gt;
    Result := FMeasuredValues[AIndex]&lt;br /&gt;
  else&lt;br /&gt;
    Result := 0;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TDEProfiler.Reset;&lt;br /&gt;
begin&lt;br /&gt;
  ResetValues;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function TDEProfiler.AsString: String;&lt;br /&gt;
var&lt;br /&gt;
  i : word;&lt;br /&gt;
begin&lt;br /&gt;
  for i := Low(FMeasuredValues) to High(FMeasuredValues) do begin&lt;br /&gt;
    Result := Result + format(' / %d: %f', [ i, 100 / FSum * FMeasuredValues[i] ]);&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TDEProfiler.Init(ASize:word);&lt;br /&gt;
begin&lt;br /&gt;
  FSize := ASize;&lt;br /&gt;
  SetLength(FMeasuredValues, FSize);&lt;br /&gt;
  QueryPerformanceCounter( FLastAddTime );&lt;br /&gt;
  ResetValues;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TDEProfiler.ResetValues;&lt;br /&gt;
var&lt;br /&gt;
  i : word;&lt;br /&gt;
begin&lt;br /&gt;
  for i := Low(FMeasuredValues) to High(FMeasuredValues) do begin&lt;br /&gt;
    FMeasuredValues[i] := 0;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function TDEProfiler.CheckRange(AIndex:word): Boolean;&lt;br /&gt;
begin&lt;br /&gt;
  Result := (Low(FMeasuredValues) &amp;lt;= AIndex) and (High(FMeasuredValues) &amp;gt;= AIndex);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/pascal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Testanwendungen=&lt;br /&gt;
Die ich in den vergangenen Monaten geschrieben habe.&lt;br /&gt;
==Landschaft==&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax&amp;diff=21901</id>
		<title>Benutzer:Damadmax</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax&amp;diff=21901"/>
				<updated>2008-06-30T23:38:39Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: /* Timing Klasse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Über mich=&lt;br /&gt;
''BETRETEN DER BAUSTELLE AUF EIGENE GEFAHR!''&lt;br /&gt;
&lt;br /&gt;
=Klassen=&lt;br /&gt;
&lt;br /&gt;
Über die vergangene Zeit sind ein paar Klassen entstanden, die vielleicht für den ein oder anderen nützlich sein könnten.&lt;br /&gt;
&lt;br /&gt;
Dies ist die Timing-Klasse wie ich sie in allen meiner Testprogramme und Projekte verwende.&lt;br /&gt;
&lt;br /&gt;
==Klasse Timing==&lt;br /&gt;
&amp;lt;pascal&amp;gt;unit DETiming;&lt;br /&gt;
&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  TDETiming = class&lt;br /&gt;
  public&lt;br /&gt;
    constructor Create;&lt;br /&gt;
    destructor Destroy; override;&lt;br /&gt;
    procedure Init;&lt;br /&gt;
    procedure Tick;&lt;br /&gt;
&lt;br /&gt;
  var&lt;br /&gt;
    FrameTime         : single;&lt;br /&gt;
    FramesPerSecond   : single;&lt;br /&gt;
    FrameTimeInMs     : single;&lt;br /&gt;
    TotalFramesDrawn  : int64;&lt;br /&gt;
    CurrentFrames     : integer;&lt;br /&gt;
    TotalTimeRunning  : single;&lt;br /&gt;
&lt;br /&gt;
  private var&lt;br /&gt;
    QPCFreq           : int64;&lt;br /&gt;
    QPCLast           : int64;&lt;br /&gt;
    QPCNow            : int64;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
  Windows;&lt;br /&gt;
&lt;br /&gt;
constructor TDETiming.Create;&lt;br /&gt;
begin&lt;br /&gt;
  inherited Create;&lt;br /&gt;
  Init;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
destructor TDETiming.Destroy;&lt;br /&gt;
begin&lt;br /&gt;
  inherited Destroy;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TDETiming.Init;&lt;br /&gt;
begin&lt;br /&gt;
  QueryPerformanceCounter(QPCLast);&lt;br /&gt;
  QueryPerformanceFrequency(QPCFreq);&lt;br /&gt;
  CurrentFrames    := 0;&lt;br /&gt;
  TotalFramesDrawn := 0;&lt;br /&gt;
  TotalTimeRunning := 0;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TDETiming.Tick;&lt;br /&gt;
begin&lt;br /&gt;
  QueryPerformanceCounter(QPCNow);                     // PerfCounter abfragen&lt;br /&gt;
  TotalFramesDrawn := TotalFramesDrawn + 1;            // Selbsterklaerend :)&lt;br /&gt;
  FrameTimeInMS    := (QPCNow - QPCLast) / QPCFreq;    // Zeit in Millisekunden pro Frame; fuer Timebased Movement&lt;br /&gt;
  FrameTime        := FrameTimeInMS * 1000.0;          // Zeit in Sekunden&lt;br /&gt;
  TotalTimeRunning := TotalTimeRunning + FrameTime;    // Laufzeit in Sekunden&lt;br /&gt;
  FramesPerSecond  := 1.0 / FrameTimeInMs;             // Frames pro Sekunde&lt;br /&gt;
  QPCLast          := QPCNow;                          // PerfCounter speichern&lt;br /&gt;
end;&amp;lt;/pascal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Klasse Profiler==&lt;br /&gt;
&amp;lt;pascal&amp;gt;&lt;br /&gt;
unit DEProfiler;&lt;br /&gt;
&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  TDEProfiler = class&lt;br /&gt;
  public&lt;br /&gt;
    constructor Create;overload;&lt;br /&gt;
    constructor Create(AMeasureCount:word);overload;&lt;br /&gt;
    procedure Add(AIndex:word);&lt;br /&gt;
    function GetSum: int64;&lt;br /&gt;
    function GetValue(AIndex:word): int64;&lt;br /&gt;
    function AsString : String;                          // Hilfsfunktion fuer Logausgabe   (in %)&lt;br /&gt;
    destructor Destroy; override;&lt;br /&gt;
&lt;br /&gt;
  private&lt;br /&gt;
    FLastAddTime     : int64;&lt;br /&gt;
    FSum             : int64;&lt;br /&gt;
    FMeasuredValues  : Array of int64;&lt;br /&gt;
    FSize            : word;&lt;br /&gt;
&lt;br /&gt;
    procedure Init(ASize:word);&lt;br /&gt;
    function CheckRange(AIndex:word): Boolean;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
  Windows;&lt;br /&gt;
  &lt;br /&gt;
constructor TDEProfiler.Create;&lt;br /&gt;
begin&lt;br /&gt;
  inherited Create;&lt;br /&gt;
  Init(32);                 // Standardmaessig 32 Eintraege&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
constructor TDEProfiler.Create(AMeasureCount:word);&lt;br /&gt;
begin&lt;br /&gt;
  inherited Create;&lt;br /&gt;
  Init(AMeasureCount);      // Benutzerdefinierte Anzahl Eintraege&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TDEProfiler.Init(ASize:word);&lt;br /&gt;
begin&lt;br /&gt;
  FSize := ASize;&lt;br /&gt;
  SetLength(FMeasuredValues, FSize);&lt;br /&gt;
  QueryPerformanceCounter( FLastAddTime );&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TDEProfiler.Add(AIndex:word);&lt;br /&gt;
var&lt;br /&gt;
  ActTime : int64;&lt;br /&gt;
  Diff : int64;&lt;br /&gt;
begin&lt;br /&gt;
  QueryPerformanceCounter( ActTime );&lt;br /&gt;
  Diff := ActTime - FLastAddTime;&lt;br /&gt;
  FMeasuredValues[AIndex] := FMeasuredValues[AIndex] + Diff;&lt;br /&gt;
  FSum := FSum + Diff;&lt;br /&gt;
  FLastAddTime := ActTime;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function TDEProfiler.GetSum: int64;&lt;br /&gt;
begin&lt;br /&gt;
  Result := FSum;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function TDEProfiler.GetValue(AIndex:word): int64;&lt;br /&gt;
begin&lt;br /&gt;
  if CheckRange(AIndex) then&lt;br /&gt;
    Result := FMeasuredValues[AIndex]&lt;br /&gt;
  else&lt;br /&gt;
    Result := 0;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function TDEProfiler.CheckRange(AIndex:word): Boolean;&lt;br /&gt;
begin&lt;br /&gt;
  Result := (Low(FMeasuredValues) &amp;lt;= AIndex) and (High(FMeasuredValues) &amp;gt;= AIndex);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function TDEProfiler.AsString: String;&lt;br /&gt;
var&lt;br /&gt;
  i : integer;&lt;br /&gt;
begin&lt;br /&gt;
  for i := Low(FMeasuredValues) to High(FMeasuredValues) do begin&lt;br /&gt;
    Result := Result + format(' / %d: %f', [ i, 100 / FSum * FMeasuredValues[i] ]);&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
destructor TDEProfiler.Destroy;&lt;br /&gt;
begin&lt;br /&gt;
  inherited Destroy;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/pascal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Testanwendungen=&lt;br /&gt;
Die ich in den vergangenen Monaten geschrieben habe.&lt;br /&gt;
==Landschaft==&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax&amp;diff=21900</id>
		<title>Benutzer:Damadmax</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax&amp;diff=21900"/>
				<updated>2008-06-30T23:38:23Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: /* Klassen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Über mich=&lt;br /&gt;
''BETRETEN DER BAUSTELLE AUF EIGENE GEFAHR!''&lt;br /&gt;
&lt;br /&gt;
=Klassen=&lt;br /&gt;
&lt;br /&gt;
Über die vergangene Zeit sind ein paar Klassen entstanden, die vielleicht für den ein oder anderen nützlich sein könnten.&lt;br /&gt;
&lt;br /&gt;
Dies ist die Timing-Klasse wie ich sie in allen meiner Testprogramme und Projekte verwende.&lt;br /&gt;
&lt;br /&gt;
==Timing Klasse==&lt;br /&gt;
&amp;lt;pascal&amp;gt;unit DETiming;&lt;br /&gt;
&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  TDETiming = class&lt;br /&gt;
  public&lt;br /&gt;
    constructor Create;&lt;br /&gt;
    destructor Destroy; override;&lt;br /&gt;
    procedure Init;&lt;br /&gt;
    procedure Tick;&lt;br /&gt;
&lt;br /&gt;
  var&lt;br /&gt;
    FrameTime         : single;&lt;br /&gt;
    FramesPerSecond   : single;&lt;br /&gt;
    FrameTimeInMs     : single;&lt;br /&gt;
    TotalFramesDrawn  : int64;&lt;br /&gt;
    CurrentFrames     : integer;&lt;br /&gt;
    TotalTimeRunning  : single;&lt;br /&gt;
&lt;br /&gt;
  private var&lt;br /&gt;
    QPCFreq           : int64;&lt;br /&gt;
    QPCLast           : int64;&lt;br /&gt;
    QPCNow            : int64;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
  Windows;&lt;br /&gt;
&lt;br /&gt;
constructor TDETiming.Create;&lt;br /&gt;
begin&lt;br /&gt;
  inherited Create;&lt;br /&gt;
  Init;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
destructor TDETiming.Destroy;&lt;br /&gt;
begin&lt;br /&gt;
  inherited Destroy;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TDETiming.Init;&lt;br /&gt;
begin&lt;br /&gt;
  QueryPerformanceCounter(QPCLast);&lt;br /&gt;
  QueryPerformanceFrequency(QPCFreq);&lt;br /&gt;
  CurrentFrames    := 0;&lt;br /&gt;
  TotalFramesDrawn := 0;&lt;br /&gt;
  TotalTimeRunning := 0;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TDETiming.Tick;&lt;br /&gt;
begin&lt;br /&gt;
  QueryPerformanceCounter(QPCNow);                     // PerfCounter abfragen&lt;br /&gt;
  TotalFramesDrawn := TotalFramesDrawn + 1;            // Selbsterklaerend :)&lt;br /&gt;
  FrameTimeInMS    := (QPCNow - QPCLast) / QPCFreq;    // Zeit in Millisekunden pro Frame; fuer Timebased Movement&lt;br /&gt;
  FrameTime        := FrameTimeInMS * 1000.0;          // Zeit in Sekunden&lt;br /&gt;
  TotalTimeRunning := TotalTimeRunning + FrameTime;    // Laufzeit in Sekunden&lt;br /&gt;
  FramesPerSecond  := 1.0 / FrameTimeInMs;             // Frames pro Sekunde&lt;br /&gt;
  QPCLast          := QPCNow;                          // PerfCounter speichern&lt;br /&gt;
end;&amp;lt;/pascal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Klasse Profiler==&lt;br /&gt;
&amp;lt;pascal&amp;gt;&lt;br /&gt;
unit DEProfiler;&lt;br /&gt;
&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  TDEProfiler = class&lt;br /&gt;
  public&lt;br /&gt;
    constructor Create;overload;&lt;br /&gt;
    constructor Create(AMeasureCount:word);overload;&lt;br /&gt;
    procedure Add(AIndex:word);&lt;br /&gt;
    function GetSum: int64;&lt;br /&gt;
    function GetValue(AIndex:word): int64;&lt;br /&gt;
    function AsString : String;                          // Hilfsfunktion fuer Logausgabe   (in %)&lt;br /&gt;
    destructor Destroy; override;&lt;br /&gt;
&lt;br /&gt;
  private&lt;br /&gt;
    FLastAddTime     : int64;&lt;br /&gt;
    FSum             : int64;&lt;br /&gt;
    FMeasuredValues  : Array of int64;&lt;br /&gt;
    FSize            : word;&lt;br /&gt;
&lt;br /&gt;
    procedure Init(ASize:word);&lt;br /&gt;
    function CheckRange(AIndex:word): Boolean;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
  Windows;&lt;br /&gt;
  &lt;br /&gt;
constructor TDEProfiler.Create;&lt;br /&gt;
begin&lt;br /&gt;
  inherited Create;&lt;br /&gt;
  Init(32);                 // Standardmaessig 32 Eintraege&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
constructor TDEProfiler.Create(AMeasureCount:word);&lt;br /&gt;
begin&lt;br /&gt;
  inherited Create;&lt;br /&gt;
  Init(AMeasureCount);      // Benutzerdefinierte Anzahl Eintraege&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TDEProfiler.Init(ASize:word);&lt;br /&gt;
begin&lt;br /&gt;
  FSize := ASize;&lt;br /&gt;
  SetLength(FMeasuredValues, FSize);&lt;br /&gt;
  QueryPerformanceCounter( FLastAddTime );&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TDEProfiler.Add(AIndex:word);&lt;br /&gt;
var&lt;br /&gt;
  ActTime : int64;&lt;br /&gt;
  Diff : int64;&lt;br /&gt;
begin&lt;br /&gt;
  QueryPerformanceCounter( ActTime );&lt;br /&gt;
  Diff := ActTime - FLastAddTime;&lt;br /&gt;
  FMeasuredValues[AIndex] := FMeasuredValues[AIndex] + Diff;&lt;br /&gt;
  FSum := FSum + Diff;&lt;br /&gt;
  FLastAddTime := ActTime;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function TDEProfiler.GetSum: int64;&lt;br /&gt;
begin&lt;br /&gt;
  Result := FSum;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function TDEProfiler.GetValue(AIndex:word): int64;&lt;br /&gt;
begin&lt;br /&gt;
  if CheckRange(AIndex) then&lt;br /&gt;
    Result := FMeasuredValues[AIndex]&lt;br /&gt;
  else&lt;br /&gt;
    Result := 0;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function TDEProfiler.CheckRange(AIndex:word): Boolean;&lt;br /&gt;
begin&lt;br /&gt;
  Result := (Low(FMeasuredValues) &amp;lt;= AIndex) and (High(FMeasuredValues) &amp;gt;= AIndex);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function TDEProfiler.AsString: String;&lt;br /&gt;
var&lt;br /&gt;
  i : integer;&lt;br /&gt;
begin&lt;br /&gt;
  for i := Low(FMeasuredValues) to High(FMeasuredValues) do begin&lt;br /&gt;
    Result := Result + format(' / %d: %f', [ i, 100 / FSum * FMeasuredValues[i] ]);&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
destructor TDEProfiler.Destroy;&lt;br /&gt;
begin&lt;br /&gt;
  inherited Destroy;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/pascal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Testanwendungen=&lt;br /&gt;
Die ich in den vergangenen Monaten geschrieben habe.&lt;br /&gt;
==Landschaft==&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax&amp;diff=21899</id>
		<title>Benutzer:Damadmax</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax&amp;diff=21899"/>
				<updated>2008-06-30T23:36:32Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: /* Klassen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Über mich=&lt;br /&gt;
''BETRETEN DER BAUSTELLE AUF EIGENE GEFAHR!''&lt;br /&gt;
&lt;br /&gt;
=Klassen=&lt;br /&gt;
&lt;br /&gt;
Über die vergangene Zeit sind ein paar Klassen entstanden, die vielleicht für den ein oder anderen nützlich sein könnten.&lt;br /&gt;
&lt;br /&gt;
Dies ist die Timing-Klasse wie ich sie in allen meiner Testprogramme und Projekte verwende.&lt;br /&gt;
&lt;br /&gt;
==Timing Klasse==&lt;br /&gt;
&amp;lt;pascal&amp;gt;unit DETiming;&lt;br /&gt;
&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  TDETiming = class&lt;br /&gt;
  public&lt;br /&gt;
    constructor Create;&lt;br /&gt;
    destructor Destroy; override;&lt;br /&gt;
    procedure Init;&lt;br /&gt;
    procedure Tick;&lt;br /&gt;
&lt;br /&gt;
  var&lt;br /&gt;
    FrameTime         : single;&lt;br /&gt;
    FramesPerSecond   : single;&lt;br /&gt;
    FrameTimeInMs     : single;&lt;br /&gt;
    TotalFramesDrawn  : int64;&lt;br /&gt;
    CurrentFrames     : integer;&lt;br /&gt;
    TotalTimeRunning  : single;&lt;br /&gt;
&lt;br /&gt;
  private var&lt;br /&gt;
    QPCFreq           : int64;&lt;br /&gt;
    QPCLast           : int64;&lt;br /&gt;
    QPCNow            : int64;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
  Windows;&lt;br /&gt;
&lt;br /&gt;
constructor TDETiming.Create;&lt;br /&gt;
begin&lt;br /&gt;
  inherited Create;&lt;br /&gt;
  Init;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
destructor TDETiming.Destroy;&lt;br /&gt;
begin&lt;br /&gt;
  inherited Destroy;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TDETiming.Init;&lt;br /&gt;
begin&lt;br /&gt;
  QueryPerformanceCounter(QPCLast);&lt;br /&gt;
  QueryPerformanceFrequency(QPCFreq);&lt;br /&gt;
  CurrentFrames    := 0;&lt;br /&gt;
  TotalFramesDrawn := 0;&lt;br /&gt;
  TotalTimeRunning := 0;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TDETiming.Tick;&lt;br /&gt;
begin&lt;br /&gt;
  QueryPerformanceCounter(QPCNow);                     // PerfCounter abfragen&lt;br /&gt;
  TotalFramesDrawn := TotalFramesDrawn + 1;            // Selbsterklaerend :)&lt;br /&gt;
  FrameTimeInMS    := (QPCNow - QPCLast) / QPCFreq;    // Zeit in Millisekunden pro Frame; fuer Timebased Movement&lt;br /&gt;
  FrameTime        := FrameTimeInMS * 1000.0;          // Zeit in Sekunden&lt;br /&gt;
  TotalTimeRunning := TotalTimeRunning + FrameTime;    // Laufzeit in Sekunden&lt;br /&gt;
  FramesPerSecond  := 1.0 / FrameTimeInMs;             // Frames pro Sekunde&lt;br /&gt;
  QPCLast          := QPCNow;                          // PerfCounter speichern&lt;br /&gt;
end;&amp;lt;/pascal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Testanwendungen=&lt;br /&gt;
Die ich in den vergangenen Monaten geschrieben habe.&lt;br /&gt;
==Landschaft==&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax&amp;diff=21898</id>
		<title>Benutzer:Damadmax</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax&amp;diff=21898"/>
				<updated>2008-06-30T23:32:18Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Über mich=&lt;br /&gt;
''BETRETEN DER BAUSTELLE AUF EIGENE GEFAHR!''&lt;br /&gt;
&lt;br /&gt;
=Klassen=&lt;br /&gt;
&lt;br /&gt;
Über die vergangene Zeit sind ein paar Klassen entstanden, die vielleicht für den ein oder anderen nützlich sein könnten.&lt;br /&gt;
&lt;br /&gt;
Dies ist die Timing-Klasse wie ich sie in allen meiner Testprogramme und Projekte verwende.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pascal&amp;gt;unit DETiming;&lt;br /&gt;
&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  TDETiming = class&lt;br /&gt;
  public&lt;br /&gt;
    constructor Create;&lt;br /&gt;
    destructor Destroy; override;&lt;br /&gt;
    procedure Init;&lt;br /&gt;
    procedure Tick;&lt;br /&gt;
&lt;br /&gt;
  var&lt;br /&gt;
    FrameTime         : single;&lt;br /&gt;
    FramesPerSecond   : single;&lt;br /&gt;
    FrameTimeInMs     : single;&lt;br /&gt;
    TotalFramesDrawn  : int64;&lt;br /&gt;
    CurrentFrames     : integer;&lt;br /&gt;
    TotalTimeRunning  : single;&lt;br /&gt;
&lt;br /&gt;
  private var&lt;br /&gt;
    QPCFreq           : int64;&lt;br /&gt;
    QPCLast           : int64;&lt;br /&gt;
    QPCNow            : int64;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
  Windows;&lt;br /&gt;
&lt;br /&gt;
constructor TDETiming.Create;&lt;br /&gt;
begin&lt;br /&gt;
  inherited Create;&lt;br /&gt;
  Init;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
destructor TDETiming.Destroy;&lt;br /&gt;
begin&lt;br /&gt;
  inherited Destroy;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TDETiming.Init;&lt;br /&gt;
begin&lt;br /&gt;
  QueryPerformanceCounter(QPCLast);&lt;br /&gt;
  QueryPerformanceFrequency(QPCFreq);&lt;br /&gt;
  CurrentFrames    := 0;&lt;br /&gt;
  TotalFramesDrawn := 0;&lt;br /&gt;
  TotalTimeRunning := 0;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TDETiming.Tick;&lt;br /&gt;
begin&lt;br /&gt;
  QueryPerformanceCounter(QPCNow);                     // PerfCounter abfragen&lt;br /&gt;
  TotalFramesDrawn := TotalFramesDrawn + 1;            // Selbsterklaerend :)&lt;br /&gt;
  FrameTimeInMS    := (QPCNow - QPCLast) / QPCFreq;    // Zeit in Millisekunden pro Frame; fuer Timebased Movement&lt;br /&gt;
  FrameTime        := FrameTimeInMS * 1000.0;          // Zeit in Sekunden&lt;br /&gt;
  TotalTimeRunning := TotalTimeRunning + FrameTime;    // Laufzeit in Sekunden&lt;br /&gt;
  FramesPerSecond  := 1.0 / FrameTimeInMs;             // Frames pro Sekunde&lt;br /&gt;
  QPCLast          := QPCNow;                          // PerfCounter speichern&lt;br /&gt;
end;&amp;lt;/pascal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Testanwendungen=&lt;br /&gt;
Die ich in den vergangenen Monaten geschrieben habe.&lt;br /&gt;
==Landschaft==&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=glGet&amp;diff=21355</id>
		<title>glGet</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=glGet&amp;diff=21355"/>
				<updated>2008-04-04T14:40:59Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: /* GL_FOG_HINT */ Tippfehler&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Funktionsname =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
&lt;br /&gt;
'''glGet''' - glGet liefert einen oder mehrere Werte eines ausgewählten Parameters zurück&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Delphi-Spezifikation ==&lt;br /&gt;
&lt;br /&gt;
 procedure '''glGetBooleanv'''('''pname''': TGLenum; '''params''': PGLboolean);&lt;br /&gt;
 procedure '''glGetDoublev'''('''pname''': TGLenum; '''params''': PGLdouble);&lt;br /&gt;
 procedure '''glGetFloatv'''('''pname''': TGLenum; '''params''': PGLfloat);&lt;br /&gt;
 procedure '''glGetIntegerv'''('''pname''': TGLenum; '''params''': PGLint);&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=1&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;''pname''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Legt fest von welchem Parameter der Wert zurückgeliefert werden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
In nachfolgender Liste werden die akzeptierten Werte aufgelistet.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;''params''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Enthält den Rückgabewert der gefordert wurde.&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;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beschreibung ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende Werte werden für den Parameter ''pname'' akzeptiert:&lt;br /&gt;
&lt;br /&gt;
===A===&lt;br /&gt;
====GL_ACCUM_ALPHA_BITS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert die Anzahl der Bits zurück, die einem Pixel des [[accumulation buffer]]s für seinen '''Alpha'''-Anteil zur Verfügung steht. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====GL_ACCUM_BLUE_BITS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert die Anzahl der Bits zurück, die einem Pixel des [[accumulation buffer]]s für seinen '''Blau'''-Anteil zur Verfügung steht. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====GL_ACCUM_CLEAR_VALUE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert die '''4''' Farbwerte(Rot,Grün,Blau,Alpha) zurück aus dennen sich die Löschfarbe für den [[accumulation buffer]] zusammensetzt.(Kann mit [[glClearAccum]] gesetzt werden)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====GL_ACCUM_GREEN_BITS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert die Anzahl der Bits zurück, die einem Pixel des [[accumulation buffer]]s für seinen '''Grün'''-Anteil zur Verfügung steht. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====GL_ACCUM_RED_BITS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert die Anzahl der Bits zurück, die einem Pixel des [[accumulation buffer]]s für seinen '''Rot'''-Anteil zur Verfügung steht. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====GL_ALPHA_BIAS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert den Alpha BIAS Faktor welcher bei Pixel Transfer genutz wird. Siehe [[glPixelTransfer]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====GL_ALPHA_BITS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert die Anzahl der Bits zurück, die einem Pixel des [[Farbpuffer]]s für seinen '''Alpha'''-Anteil zur Verfügung steht.&lt;br /&gt;
&lt;br /&gt;
====GL_ALPHA_SCALE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert den Salierungs Wert für Alpha beim Pixel Transfer an&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====GL_ALPHA_TEST====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen einzelnen Booleanwert der angibt, ob die Überprüfung des Alphas durch [[glEnable]] aktiviert wurde oder nicht. Siehe [[glPixelTransfer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====GL_ALPHA_TEST_FUNC====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert den symbolischen Namen der Alphatest-Funktion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====GL_ALPHA_TEST_REF====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert den Wert zurück der mit [[glAlphaFunc]] im Parameter ''ref'' eingestellt wurde. Wird ein integer abgefragt, wird der Rückgabewert direkt von der internen Fließkomma Representation auf das Intervall [-1.0..1.0] abgebildet. Dies geschieht so, dass der kleinstmögliche Wert = -1.0 und der größtmögliche Wert = 1.0 wird.&lt;br /&gt;
&lt;br /&gt;
====GL_ATTRIB_STACK_DEPTH====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen Wert zurück, die Tiefe des Attributstacks. Wenn dieser leer ist wird null zurückgegeben. (siehe [[glPushAttrib]])&lt;br /&gt;
&lt;br /&gt;
====GL_AUTO_NORMAL====&lt;br /&gt;
&lt;br /&gt;
:''params'' gibt als einzelnen booleanschen Wert an, ob die 2D-Oberflächenevaluation automatische Oberflächennormalen generiert. Siehe [[glMap2]].&lt;br /&gt;
&lt;br /&gt;
====GL_AUX_BUFFERS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen Wert zurück, die Anzahl der Hilfsfarbpuffer.&lt;br /&gt;
&lt;br /&gt;
===B===&lt;br /&gt;
&lt;br /&gt;
====GL_BLEND====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen Booleanwert zurück, der angibt ob [[Blending]] aktiviert ist. (siehe auch [[glBlendFunc]])&lt;br /&gt;
&lt;br /&gt;
====GL_BLEND_COLOR====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert viert Werte zurück. Den roten, grünen, blauen und alpha-Anteil der aktuellen Blendfarbe zurück. Siehe [[glBlendColor]].&lt;br /&gt;
&lt;br /&gt;
====GL_BLEND_DST====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Wert die symbolische Konstante zurück, die die Ziel-Blendfunktion identifiziert. Siehe [[glBlendFunc]].&lt;br /&gt;
&lt;br /&gt;
====GL_BLEND_DST_ALPHA====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Wert die symbolische Konstante zurück, die die Ziel-Blendfunktion für den Alphawert identifiziert. Siehe [[glBlendFuncSeparate]].&lt;br /&gt;
&lt;br /&gt;
====GL_BLEND_DST_RGB====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Wert die symbolische Konstante zurück, die die Ziel-Blendfunktion für Rot, Grün und Blau identifiziert. Siehe [[glBlendFuncSeparate]].&lt;br /&gt;
&lt;br /&gt;
====GL_BLEND_EQUATION====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Wert die symbolische Konstante zurück, die die Blending-Gleichung angibt. Siehe [[glBlendEquation]].&lt;br /&gt;
&lt;br /&gt;
====GL_BLEND_SRC====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen Wert zurück, den symbolischen Name der Quellblendfunktion. (siehe [[glBlendFunc]])&lt;br /&gt;
&lt;br /&gt;
====GL_BLEND_SRC_ALPHA====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Wert die symbolische Konstante zurück, die die Quell-Blendfunktion für den Alphawert identifiziert. Siehe [[glBlendFuncSeparate]].&lt;br /&gt;
&lt;br /&gt;
====GL_BLEND_SRC_RGB====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Wert die symbolische Konstante zurück, die die Quell-Blendfunktion für Rot, Grün und Blau identifiziert. Siehe [[glBlendFuncSeparate]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====GL_BLUE_BIAS====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert in einem Wert die Verschiebung für den blauen Farbwert während eines Pixeltransfers zurück. Siehe [[glPixelTransfer]].&lt;br /&gt;
&lt;br /&gt;
====GL_BLUE_BITS====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Wert die Anzahl der Bits für den blauen Farbanteil eines Farbpuffer zurück.&lt;br /&gt;
&lt;br /&gt;
====GL_BLUE_SCALE====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert in einem Wert die Skalierung für den blauen Farbwert während eines Pixeltransfers zurück. Siehe [[glPixelTransfer]].&lt;br /&gt;
&lt;br /&gt;
===C===&lt;br /&gt;
&lt;br /&gt;
====GL_CLIP_PLANEi====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen Booleanwert zurück, der angibt ob die spezielle (i-te) Clipping Plane aktiviert ist. (siehe [[glClipPlane]])&lt;br /&gt;
&lt;br /&gt;
====GL_COLOR_ARRAY_SIZE====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Parameter die Anzahl der Komponenten pro Element im Farben-Array zurück. Siehe [[glColorPointer]].&lt;br /&gt;
&lt;br /&gt;
====GL_COLOR_ARRAY_STRIDE====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Parameter den Byteversatz zwischen den aufeinander folgenden Elementen in einem Farben-Array zurück. Siehe [[glColorPointer]].&lt;br /&gt;
&lt;br /&gt;
====GL_COLOR_ARRAY_TYPE====&lt;br /&gt;
&lt;br /&gt;
:''param'' liefert als einzelnen Wert den Datentyp für die Komponenten in einem Farben-Array zurück. Siehe [[glColorPointer]].&lt;br /&gt;
&lt;br /&gt;
====GL_COLOR_CLEAR_VALUE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert vier Werte zurück welche die aktuelle Farbe angeben mit welcher der ColorBuffer geleert wird. (siehe [[glClearColor]])&lt;br /&gt;
&lt;br /&gt;
====GL_COLOR_MATERIAL====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen einzelnen Booleanwert zurück, der angibt ob ein oder mehrere Materialparameter die aktuelle Farbe beeinflussen bzw. aktiv sind. (siehe [[glColorMaterial]])&lt;br /&gt;
&lt;br /&gt;
====GL_COLOR_MATERIAL_FACE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert eine symbolische Konstante die angibt welche Materialien einen Parameter besitzen, der die aktuelle Farbe beeinflusst. (siehe [[glColorMaterial]])&lt;br /&gt;
&lt;br /&gt;
====GL_COLOR_MATERIAL_PARAMETER====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert eine symbolische Konstante die angibt welche Materialparameter die aktuelle Farbe beeinflussen. (siehe [[glColorMaterial]])&lt;br /&gt;
&lt;br /&gt;
====GL_COLOR_WRITEMASK====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert vier Booleanwerte: Die rot, grün, blau und alpha Parameter die angeben, ob die jeweilige Farbkomponente in den Farbpuffer geschrieben werden kann. (siehe [[glColorMask]])&lt;br /&gt;
&lt;br /&gt;
====GL_CULL_FACE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen Booleanwert zurück, der angibt ob [[Backfaceculling|Polygoneculling]] aktiv ist. (siehe [[glCullFace]])&lt;br /&gt;
&lt;br /&gt;
====GL_CULL_FACE_MODE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen Wert zurück, den symbolischen Namen der Flächen, die vom Zeichnen ausgeschlossen werden sollen.&lt;br /&gt;
&lt;br /&gt;
====GL_CURRENT_COLOR====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert vier Werte: Der Rot-, Grün-, Blau-, und Alphafarbanteil der aktuellen Farbe. Werden integer-Werte abgefragt, wird der Rückgabewert direkt von der internen Fließkomma Representation auf das Intervall [-1.0..1.0] abgebildet. Dies geschieht so, dass der kleinstmögliche Wert = -1.0 und der größtmögliche Wert = 1.0 wird. (siehe [[glColor]])&lt;br /&gt;
&lt;br /&gt;
====GL_CURRENT_FOG_COORD====&lt;br /&gt;
: ''params'' liefert einen Wert zurück, die aktuelle Nebelkoordinate. (siehe [[glFogCoord]])&lt;br /&gt;
&lt;br /&gt;
====GL_CURRENT_INDEX====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen Wert zurück, den Index der aktuellen Farbe. (siehe [[glIndex]])&lt;br /&gt;
&lt;br /&gt;
====GL_CURRENT_NORMAL====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert drei Werte zurück, die x, y und z-Koordinate der aktuellen Normale. Werden integer-Werte abgefragt, wird der Rückgabewert direkt von der internen Fließkomma Representation auf das Intervall [-1.0..1.0] abgebildet. Dies geschieht so, dass der kleinstmögliche Wert = -1.0 und der größtmögliche Wert = 1.0 wird.&lt;br /&gt;
&lt;br /&gt;
====GL_CURRENT_PROGRAM====&lt;br /&gt;
: ''params'' liefert das handle eines aktuellen Shaders zurück. Diese Konstante ist erst ab OpenGL 2.0 verfügbar. Die Aufgabe dieser Konstante wurde früher von [[glGetHandleARB]] übernommen.&lt;br /&gt;
&lt;br /&gt;
====GL_CURRENT_RASTER_COLOR====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert vier Werte: Der Rot-, Grün-, Blau-, und Alphafarbanteil der aktuellen Rasterposition. Werden integer-Werte abgefragt, wird der Rückgabewert direkt von der internen Fließkomma Representation auf das Intervall [-1.0..1.0] abgebildet. Dies geschieht so, dass der kleinstmögliche Wert = -1.0 und der größtmögliche Wert = 1.0 wird. (siehe [[glRasterPos]])&lt;br /&gt;
&lt;br /&gt;
====GL_CURRENT_RASTER_DISTANCE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen Wert, die Distanz von der Betrachterposition (dem Auge) zur aktuellen Rasterposition. (siehe [[glRasterPos]])&lt;br /&gt;
&lt;br /&gt;
====GL_CURRENT_RASTER_INDEX====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen Wert, den Farbindex der aktuellen Rasterposition. (siehe [[glRasterpos]])&lt;br /&gt;
&lt;br /&gt;
====GL_CURRENT_RASTER_POSITION====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert vier Werte: Die x, y, z und w Komponenten der aktuellen Rasterposition. x, y und z sind dabei in Fensterkoordinaten, w in Clipkoordinaten angegeben. (siehe [[glRasterpos]]) &lt;br /&gt;
&lt;br /&gt;
====GL_CURRENT_RASTER_TEXTURE_COORDS====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert 4 Werte: Die aktellen s, t, r und q Texturkoordinaten. Siehe [[glTexCoord]].&lt;br /&gt;
&lt;br /&gt;
====GL_CURRENT_RASTER_POSITION_VALID====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen einzelnen Booleanwert der angibt, ob die aktuelle Rasterposition gültig ist. (siehe [[glRasterPos]])&lt;br /&gt;
&lt;br /&gt;
====GL_CURRENT_TEXTURE_COORDS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert vier Werte: Die s, t, r und q Komponente der aktuellen Texturkoordinaten.&lt;br /&gt;
&lt;br /&gt;
===D===&lt;br /&gt;
&lt;br /&gt;
====GL_DEPTH_BIAS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen (Fließkomma)Wert den Tiefenverschiebungsfaktor (Depth Bias) zurück, der beim Pixeltransfer verwendet wird. Siehe [[glPixelTransfer]].&lt;br /&gt;
&lt;br /&gt;
====GL_DEPTH_BITS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen (Ganzzahl)Wert die Anzahl der Bitflächen (Bittiefe) des Tiefenpuffers zurück.&lt;br /&gt;
&lt;br /&gt;
====GL_DEPTH_CLEAR_VALUE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert den Wert zurück, mit dem der Tiefenpuffer gelöscht wird. Falls als Integerwert angefordert, wird die Fließkommarepräsentation linear angepasst, so dass 1 dem größten positiven Ganzzahlwert und -1 dem größten negativen Ganzzahlwert entspricht. Siehe [[glClearDepth]].&lt;br /&gt;
&lt;br /&gt;
====GL_DEPTH_FUNC====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als einzelnen Wert eine symbolische Konstante zurück, die den aktuellen Tiefenvergleich angibt. Siehe [[glDepthFunc]].&lt;br /&gt;
&lt;br /&gt;
====GL_DEPTH_RANGE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert in zwei Werten das nahe und ferne Limit für den Tiefenpuffer zurück. Falls als Integerwert angefordert, wird die Fließkommarepräsentation linear angepasst, so dass 1 dem größten positiven Ganzzahlwert und -1 dem größten negativen Ganzzahlwert entspricht. Siehe [[glDepthRange]].&lt;br /&gt;
&lt;br /&gt;
====GL_DEPTH_SCALE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen Wert, den Tiefenskalierungsfaktor, welcher während des Pixeltransfers benutzt wird. (siehe [[glPixelTransfer]])&lt;br /&gt;
&lt;br /&gt;
====GL_DEPTH_TEST====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen Booleanwert der angibt, ob der Tiefentest für Fragmente durchgeführt wird oder nicht. (siehe [[glDepthFunc]],  [[glDepthRange]] sowie [[Tiefentest]] )&lt;br /&gt;
&lt;br /&gt;
====GL_DEPTH_WRITEMASK====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen Booleanwert der angibt, ob der Tiefenpuffer beschrieben werden kann.&lt;br /&gt;
&lt;br /&gt;
====GL_DITHER====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert zurück, ob das Dithern von Fragmentfarben und -indizes aktiv ist.&lt;br /&gt;
&lt;br /&gt;
====GL_DOUBLEBUFFER====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen Booleanwert zurück der angibt, ob [[Doppelpufferung|Doublebuffering]] unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
====GL_DRAW_BUFFER====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen Wert, eine symbolische Konstante, die angibt, in welchen Buffer gerade gezeichnet wird. (siehe [[glDrawBuffer]])&lt;br /&gt;
&lt;br /&gt;
===E===&lt;br /&gt;
&lt;br /&gt;
====GL_EDGE_FLAG====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt in einem einzelnen boolschen Wert an, ob das aktuelle Kantenflag ''wahr'' oder ''falsch'' ist. Siehe [[glEdgeFlag]].&lt;br /&gt;
&lt;br /&gt;
====GL_EDGE_FLAG_ARRAY_STRIDE====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Parameter den Byteversatz zwischen den aufeinander folgenden Elementen in einem Kantenflag-Array zurück. Siehe [[glEdgeFlagPointer]].&lt;br /&gt;
&lt;br /&gt;
===F===&lt;br /&gt;
&lt;br /&gt;
====GL_FOG====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als einzelnen boolschen Wert an, ob Nebel aktiviert ist. Siehe [[glFog]].&lt;br /&gt;
&lt;br /&gt;
====GL_FOG_COLOR====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert vier Werte zurück, den Rot-, Grün-, Blauanteil des Nebels, sowie den Alphawert. Wenn als Integerwert angefordert, wird der Fließkommabereich von -1..1 auf den gesamten Integerbereich abgebildet. Siehe [[glFog]].&lt;br /&gt;
&lt;br /&gt;
====GL_FOG_DENSITY====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als einzelnen Wert die dichte des Nebels zurück. Siehe [[glFog]].&lt;br /&gt;
&lt;br /&gt;
====GL_FOG_END====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als einzelnen Wert den End-Faktor für die lineare Nebelgleichen an. Siehe [[glFog]].&lt;br /&gt;
&lt;br /&gt;
====GL_FOG_HINT====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als einzelnen Wert eine symbolische Konstante zurück, die den Modus für den Nebelhinweis angibt. Siehe [[glFog]].&lt;br /&gt;
&lt;br /&gt;
====GL_FOG_INDEX====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert den Farbindex des Nebels zurück. Siehe [[glFog]].&lt;br /&gt;
&lt;br /&gt;
====GL_FOG_MODE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als symbolische Konstante wie aktuelle Nebelgleichung zurück. Siehe [[glFog]].&lt;br /&gt;
&lt;br /&gt;
====GL_FOG_START====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als einzelnen Wert den Start-Faktor für die lineare Nebelgleichen an. Siehe [[glFog]]. &lt;br /&gt;
&lt;br /&gt;
====GL_FRONT_FACE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert eine symbolische Konstante, die angibt ob entweder Seiten mit Polygonwicklung im Uhrzeigersinn, oder mit Polygonwicklung gegen den Uhrzeigersinn, Vorderseiten darstellen. Siehe [[glFrontFace]].&lt;br /&gt;
&lt;br /&gt;
===G===&lt;br /&gt;
&lt;br /&gt;
====GL_GENERATE_MIPMAP_HINT====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als symbolische Konstanten den Modus für den Hinweis zur Erstellung von [[MipMaps]] zurück. Siehe [[glHint]].&lt;br /&gt;
&lt;br /&gt;
====GL_GREEN_BIAS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert den Verschiebungsfaktor für Grünwerte während eines Pixeltransfers zurück.&lt;br /&gt;
&lt;br /&gt;
====GL_GREEN_BITS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Zahl der Bitflächen (Bittiefe) für Grün eines Farbpuffers zurück.&lt;br /&gt;
&lt;br /&gt;
====GL_GREEN_SCALE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert den Skalierungsfaktor für Grünwerte zurück, der während des Pixeltransfers angewandt wird. Siehe [[glPixelTransfer]].&lt;br /&gt;
&lt;br /&gt;
===I===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====GL_INDEX_ARRAY_STRIDE====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Parameter den Byteversatz zwischen den aufeinander folgenden Elementen in einem Farbindex-Array zurück. Siehe [[glIndexPointer]].&lt;br /&gt;
&lt;br /&gt;
====GL_INDEX_ARRAY_TYPE====&lt;br /&gt;
&lt;br /&gt;
:''param'' liefert als einzelnen Wert den Datentyp der Komponenten in einem Farbindex-Array zurück. Siehe [[glIndexPointer]].&lt;br /&gt;
&lt;br /&gt;
====GL_INDEX_BITS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Zahl der Bitflächen eines Farbindexpuffers zurück. &lt;br /&gt;
&lt;br /&gt;
====GL_INDEX_CLEAR_VALUE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen Wert zurück, den Index der Farbe mit dem der ColorBuffer geleert wird. Siehe [[glClearIndex]].&lt;br /&gt;
&lt;br /&gt;
====GL_INDEX_MODE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen Booleanwert zurück, der anzeigt ob sich OpenGL im Indexmodus(true) oder RGBA-Modus(false) befindet. &lt;br /&gt;
&lt;br /&gt;
====GL_INDEX_OFFSET====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert den Versatz zurück, der zu Farb- und Stencilindizes während eines Pixeltransfers addiert wird. Siehe [[glPixelTransfer]].&lt;br /&gt;
&lt;br /&gt;
====GL_INDEX_SHIFT====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen einzelnen Wert zurück, um den Farb- und Stencilindizes während eines Pixeltransfers verschoben werden. Siehe [[glPixelTransfer]].&lt;br /&gt;
&lt;br /&gt;
====GL_INDEX_WRITEMASK====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert eine Maske zurück, die angibt welche Bitflächen eines jeden Farbindexpuffers beschrieben werden können. Siehe [[glIndexMask]].&lt;br /&gt;
&lt;br /&gt;
===L===&lt;br /&gt;
&lt;br /&gt;
====GL_LIGHTi====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen Booleanwert zurück, der anzeigt ob das entsprechende (i-te)Licht aktiviert ist oder nicht. Siehe [[glLight]] und [[glLightModel]]. &lt;br /&gt;
&lt;br /&gt;
====GL_LIGHTING====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen Booleanwert zurück, der anzeigt ob die OpenGL Beleuchtung aktiviert ist. Siehe [[glLightModel]].&lt;br /&gt;
&lt;br /&gt;
====GL_LIGHT_MODEL_AMBIENT====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert vier Werte zurück, die Rot-, Grün-, Blau- und Alphakomponente der ambienten Intensität für die komplette Szene. Wenn als Integerwert angefordert, wird der Fließkommabereich von -1..1 auf den gesamten Integerbereich abgebildet. Siehe [[glLightModel]].&lt;br /&gt;
&lt;br /&gt;
====GL_LIGHT_MODEL_COLOR_CONTROL====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert den Farbkontrollwert zurück. Siehe [[glLightModel]].&lt;br /&gt;
&lt;br /&gt;
====GL_LIGHT_MODEL_LOCAL_VIEWER====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als boolenschen Wert an, ob spekulative Reflektionsberechnungen den Betrachter als lokal zur Szene ansehen. Siehe [[glLightModel]].&lt;br /&gt;
&lt;br /&gt;
====GL_LIGHT_MODEL_TWO_SIDE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als boolenschen Wert an, ob für die Beleuchtung von Vorder- und Rückseite eines Polygons unterschiedliche Materialien genutzt werden. Siehe [[glLightModel]].&lt;br /&gt;
&lt;br /&gt;
====GL_LINE_SMOOTH_HINT====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als boolenschen Wert an, ob Kantenglättung für Linien aktiviert ist. Siehe [[glLineWidth]].&lt;br /&gt;
&lt;br /&gt;
====GL_LINE_SMOOTH_HINT====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als symbolische Konstante den Hinweis für die Kantenglättung von Linien zurück. Siehe [[glHint]]. &lt;br /&gt;
&lt;br /&gt;
====GL_LINE_STIPPLE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als boolenschen Wert an, ob Musterung für Linien aktiviert ist. Siehe [[glLineStipple]].&lt;br /&gt;
&lt;br /&gt;
====GL_LINE_STIPPLE_PATTERN====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen 16-Bit Wert das Linienmuster zurück. Siehe [[glLineStipple]].&lt;br /&gt;
&lt;br /&gt;
====GL_LINE_STIPPLE_REPEAT====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert den Faktor für die Musterwiederholung von Linien zurück. Siehe [[glLineStipple]].&lt;br /&gt;
&lt;br /&gt;
====GL_LINE_WIDTH====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die aktuelle Liniendicke zurück. Siehe [[glLineWidth]].&lt;br /&gt;
&lt;br /&gt;
====GL_LINE_WIDTH_GRANULARITY====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert den unterstützten Differenzwert zwischen zwei Linienbreiten zurück. Siehe [[glLineWidth]].&lt;br /&gt;
&lt;br /&gt;
====GL_LINE_WIDTH_RANGE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert zwei Werte zurück. Zuerst die kleinste, und dann die größte unterstützte Dicke für kantengeglättete Linien. Siehe [[glLineWidth]].&lt;br /&gt;
&lt;br /&gt;
====GL_LIST_BASE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert den Versatz zurück, der auf alle Displaylistennamen die an [[glCallLists]] übergeben werden,  addiert wird. Siehe [[glListBase]].&lt;br /&gt;
&lt;br /&gt;
====GL_LIST_INDEX====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert den Namen der momentan in Erstellung befindlichen Displayliste zurück. Wird gerade keine Displayliste erstellt, wird 0 zurückgegeben. Siehe [[glNewList]].&lt;br /&gt;
&lt;br /&gt;
====GL_LIST_MODE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als symbolische Konstante den Erstellungsmodus der gerade in Erstellung befindlichen Displayliste zurück. Siehe [[glNewList]].&lt;br /&gt;
&lt;br /&gt;
====GL_LOGIC_OP====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als boolenschen Wert an, ob Fragmentindizes unter Nutzung eines logischen Operation in den Farbpuffer eingebunden werden. Siehe [[glLogicOp]].&lt;br /&gt;
 &lt;br /&gt;
====GL_LOGIC_OP_MODE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als symbolische Konstante den momentan gewählten Modus für logische Operationen zurück. Siehe [[glLogicOp]].&lt;br /&gt;
&lt;br /&gt;
===M===&lt;br /&gt;
&lt;br /&gt;
====GL_MAP1_COLOR_4====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert zurück ob 1D-Evaluation Farbwerte generiert. Siehe [[glMap1]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP1_GRID_DOMAIN====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert zwei Werte zurück, die Endpunkte der Gitterdomäne der 1D-Map. Siehe [[glMapGrid]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP1_GRID_SEGMENTS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Anzahl der Unterteilungen der Gitterdomäne der 1D-Map zurück. Siehe [[glMapGrid]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP1_INDEX====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert zurück ob 1D-Evaluation Farbindizes generiert. Siehe [[glMap1]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP1_NORMAL====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert zurück ob 1D-Evaluation Normalen generiert. Siehe [[glMap1]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP1_TEXTURE_COORD_1====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert zurück ob 1D-Evaluation 1D-Texturkoordinaten generiert. Siehe [[glMap1]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP1_TEXTURE_COORD_2====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert zurück ob 1D-Evaluation 2D-Texturkoordinaten generiert. Siehe [[glMap1]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP1_TEXTURE_COORD_3====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert zurück ob 1D-Evaluation 3D-Texturkoordinaten generiert. Siehe [[glMap1]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP1_TEXTURE_COORD_4====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert zurück ob 1D-Evaluation 4D-Texturkoordinaten generiert. Siehe [[glMap1]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP1_VERTEX_3====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert zurück ob 1D-Evaluation 3D-Vertexkoordinaten generiert. Siehe [[glMap1]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP1_VERTEX_4====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert zurück ob 1D-Evaluation 4D-Vertexkoordinaten generiert. Siehe [[glMap1]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP2_COLOR_4====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert zurück ob 2D-Evaluation Farbwerte generiert. Siehe [[glMap2]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP2_GRID_DOMAIN====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert vier Werte zurück, die Endpunkte der Gitterdomäne der 2D-Map in i und j Richtung. Siehe [[glMapGrid]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP2_GRID_SEGMENTS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert zwei Werte, die Anzahl der Unterteilungen der Gitterdomäne der 2D-Map zurück in i und j Richtung. Siehe [[glMapGrid]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP2_INDEX====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert zurück ob 2D-Evaluation Farbindizes generiert. Siehe [[glMap2]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP2_NORMAL====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert zurück ob 2D-Evaluation Normalen generiert. Siehe [[glMap2]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP2_TEXTURE_COORD_1====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert zurück ob 2D-Evaluation 1D-Texturkoordinaten generiert. Siehe [[glMap2]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP2_TEXTURE_COORD_2====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert zurück ob 2D-Evaluation 2D-Texturkoordinaten generiert. Siehe [[glMap2]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP2_TEXTURE_COORD_3====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert zurück ob 2D-Evaluation 3D-Texturkoordinaten generiert. Siehe [[glMap2]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP2_TEXTURE_COORD_4====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert zurück ob 2D-Evaluation 4D-Texturkoordinaten generiert. Siehe [[glMap2]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP2_VERTEX_3====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert zurück ob 2D-Evaluation 3D-Vertexkoordinaten generiert. Siehe [[glMap2]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP2_VERTEX_4====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert zurück ob 2D-Evaluation 4D-Vertexkoordinaten generiert. Siehe [[glMap2]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP_COLOR====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert zurück, ob Farbwerte und Farbindizes während des Pixeltransfers durch Taballenzugriffe ersetzt werden. Siehe [[glPixelTransfer]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAP_STENCIL====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert zurück, ob Stencilindizes während des Pixeltransfers durch Taballenzugriffe ersetzt werden. Siehe [[glPixelTransfer]].&lt;br /&gt;
&lt;br /&gt;
====GL_MATRIX_MODE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als symbolische Konsante, welcher Matrizenstapel als aktuelles Ziel für alle Matrixoperationen gesetzt ist. Siehe [[glMatrixMode]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAX_3D_TEXTURE_SIZE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die maximal mögliche Dimension (Breite=Höhe=Tiefe) einer 3D-Textur. Siehe [[glTexImage3D]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAX_ATTRIB_STACK_DEPTH====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert die maximale Tiefe des Attributstapels zurück. Siehe [[glPushAttrib]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAX_CLIP_PLANES====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert die maximale Zahl der selbst-definierbaren Schnittflächen zurück. Siehe [[glClipPlane]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAX_ELEMENTS_INDICES==== &lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die empfohlene maximale Anzahl von Indizes zurück, die von [[glDrawRangeElements]] effektiv verarbeitet werden können.&lt;br /&gt;
&lt;br /&gt;
====GL_MAX_ELEMENTS_VERTICES====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die empfohlene maximale Anzahl von Vertices zurück, die von [[glDrawRangeElements]] effektiv verarbeitet werden können.&lt;br /&gt;
&lt;br /&gt;
====GL_MAX_EVAL_ORDER====&lt;br /&gt;
&lt;br /&gt;
: ''params' liefert die maximale Funktionsordnung zurück, die von 1D- und 2D-Evaluatoren unterstützt wird. Siehe [[glMap1]] und [[glMap2]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAX_LIGHTS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert die Anzahl der maximal unterstützten Lichtquellen zurück. Siehe [[glLight]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAX_LIST_NESTING====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert die maximale Rekursionstiefe innerhalb einer Displayliste zurück. Siehe [[glCallList]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAX_MODELVIEW_STACK_DEPTH====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Anzahl der maximal auf den Stapel legbaren Modelansichtsmatrizen zurück. Siehe [[glPushMatrix]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAX_NAME_STACK_DEPTH====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die maximale Tiefe des Tapels für Selektionsnamen zurück. Siehe [[glPushName]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAX_PIXEL_MAP_TABLE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert die maximale Größe einer [[glPixelMap]] Zugriffstabelle zurück. Siehe [[glPixelMap]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAX_PROJECTION_STACK_DEPTH====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Anzahl der maximal auf den Stapel legbaren Projektionsmatrizen zurück. Siehe [[glPushMatrix]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAX_TEXTURE_SIZE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die maximal mögliche Dimension (Breite=Höhe) einer 1D/2D-Textur. Siehe [[glTexImage2D]] bzw. [[glTexImage1D]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAX_TEXTURE_STACK_DEPTH====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert, die Anzahl der maximal auf den Stapel legbaren Texturenmatrizen, zurück. Siehe [[glPushMatrix]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAX_TEXTURE_UNITS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert, die Anzahl der unterstützen Textureinheiten, zurück. Dieser Wert muss mindestens 1 sein. Siehe [[glActiveTexture]], [[glClientActiveTexture]] und [[glMultiTexCoord]].&lt;br /&gt;
&lt;br /&gt;
====GL_MAX_VIEWPORT_DIMS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert zwei Werte zurück, die maximale Breite und maximale Höhe des Viewports. Siehe [[glViewport]].&lt;br /&gt;
&lt;br /&gt;
====GL_MODELVIEW_MATRIX====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert 16 Werte zurück. Diese entsprechen den 16 Werten der Modelview-[[Matrix]] die als letztes auf den Modelview-Matrixstack gelegt wurde. &lt;br /&gt;
&lt;br /&gt;
====GL_MODELVIEW_STACK_DEPTH ====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Anzahl der Matrizen auf dem Matrizenstapel für die Modelansichtsmatrix zurück. Siehe [[glPushMatrix]].&lt;br /&gt;
&lt;br /&gt;
===N===&lt;br /&gt;
&lt;br /&gt;
====GL_NAME_STACK_DEPTH ====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Zahl der Namen auf dem Namensstapel zurück. &lt;br /&gt;
&lt;br /&gt;
====GL_NORMAL_ARRAY_SIZE====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Parameter die Anzahl der Koordinaten pro Element im Normalen-Array zurück. Siehe [[glNormalPointer]].&lt;br /&gt;
&lt;br /&gt;
====GL_NORMAL_ARRAY_STRIDE====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Parameter den Byteversatz zwischen den aufeinander folgenden Elementen in einem Normalen-Array zurück. Siehe [[glNormalPointer]].&lt;br /&gt;
&lt;br /&gt;
====GL_NORMAL_ARRAY_TYPE====&lt;br /&gt;
&lt;br /&gt;
:''param'' liefert als einzelnen Wert den Datentyp für die Koordinaten in einem Normalen-Array zurück. Siehe [[glNormalPointer]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====GL_NORMALIZE ====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als einzelner boolscher Wert an, ob Normalen nach der Transformation in Betrachterkoordinaten automatisch auf Einheitslänge gebracht werden. Siehe [[glEnable]].&lt;br /&gt;
&lt;br /&gt;
===P===&lt;br /&gt;
&lt;br /&gt;
====GL_PACK_ALIGNMENT ====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Byteausrichtung für das Schreiben von Pixeldaten in den Speicher zurück. Siehe [[glPixelStore]].&lt;br /&gt;
&lt;br /&gt;
====GL_PACK_LSB_FIRST ====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als einzelnen boolschen Wert zurücl, ob Ein-Bit Pixel die in den Speicher geschrieben werden zuerst in das niederwertigste Bit eines jeden vorzeichenlosen Bytes geschrieben werden. Siehe [[glPixelStore]].&lt;br /&gt;
&lt;br /&gt;
====GL_PACK_ROW_LENGTH====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Reihenlänge zurück, die zum Schreiben von Pixeldaten in den Speicher genutzt wird. Siehe [[glPixelStore]].&lt;br /&gt;
&lt;br /&gt;
====GL_PACK_SKIP_PIXELS ====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als einzelnen Wert die Zahl der Pixel zurück, die vor dem Schreiben des ersten Pixels in den Speicher übersprungen werden. Siehe [[glPixelStore]].&lt;br /&gt;
&lt;br /&gt;
====GL_PACK_SKIP_ROWS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als einzelnen Wert die Zahl der Pixelreihen zurück, die vor dem Schreiben des ersten Pixels in den Speicher übersprungen werden. Siehe [[glPixelStore]].&lt;br /&gt;
&lt;br /&gt;
====GL_PACK_SWAP_BYTES====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als boolschen Wert an, ob Bytes von Zwei-Byte und Vier-Byte Pixelindizes und Komponenten vertauscht werden, bevor sie in den Speicher geschrieben werden. Siehe [[glPixelStore]].&lt;br /&gt;
&lt;br /&gt;
====GL_PERSPECTIVE_CORRECTION_HINT ====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als symbolische Konstante den Hinweismodus für perspektivische Korrektion zurück. Siehe [[glHint]].&lt;br /&gt;
&lt;br /&gt;
====GL_PIXEL_MAP_A_TO_A_SIZE ====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Größe der Alpha-nach-Alpha Pixelübersetzungstabelle zurück. Siehe [[glPixelMap]].&lt;br /&gt;
&lt;br /&gt;
====GL_PIXEL_MAP_B_TO_B_SIZE ====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Größe der Blau-nach-Blau Pixelübersetzungstabelle zurück. Siehe [[glPixelMap]].&lt;br /&gt;
&lt;br /&gt;
====GL_PIXEL_MAP_G_TO_G_SIZE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Größe der Grün-nach-Grün Pixelübersetzungstabelle zurück. Siehe [[glPixelMap]].&lt;br /&gt;
&lt;br /&gt;
====GL_PIXEL_MAP_I_TO_A_SIZE ====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Größe der Index-nach-Alpha Pixelübersetzungstabelle zurück. Siehe [[glPixelMap]].&lt;br /&gt;
&lt;br /&gt;
====GL_PIXEL_MAP_I_TO_B_SIZE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Größe der Index-nach-Blau Pixelübersetzungstabelle zurück. Siehe [[glPixelMap]].&lt;br /&gt;
&lt;br /&gt;
====GL_PIXEL_MAP_I_TO_G_SIZE ====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Größe der Index-nach-Grün Pixelübersetzungstabelle zurück. Siehe [[glPixelMap]].&lt;br /&gt;
&lt;br /&gt;
====GL_PIXEL_MAP_I_TO_I_SIZE ====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Größe der Index-nach-Index Pixelübersetzungstabelle zurück. Siehe [[glPixelMap]].&lt;br /&gt;
&lt;br /&gt;
====GL_PIXEL_MAP_I_TO_R_SIZE ====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Größe der Index-nach-Rot Pixelübersetzungstabelle zurück. Siehe [[glPixelMap]].&lt;br /&gt;
&lt;br /&gt;
====GL_PIXEL_MAP_R_TO_R_SIZE ====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Größe der Rot-nach-Rot Pixelübersetzungstabelle zurück. Siehe [[glPixelMap]].&lt;br /&gt;
&lt;br /&gt;
====GL_PIXEL_MAP_S_TO_S_SIZE ====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Größe der Stencil-nach-Stencil Pixelübersetzungstabelle zurück. Siehe [[glPixelMap]].&lt;br /&gt;
&lt;br /&gt;
====GL_POINT_DISTANCE_ATTENUATION====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert drei Werte zurück, die für die Berechnung der Abstands-Attenuation-Funktion benötigt werden. Der erste Wert liefert den konstanten, der zweite Wert den linearen und der dritte Wert den quadratischen Abstands-Attenuation-Funktionskoeffizienten. Siehe [[glPointParameter]], [[glPointSize]].&lt;br /&gt;
&lt;br /&gt;
====GL_POINT_FADE_THRESHOLD_SIZE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert einen Schwellwert, ab der der Abblendfaktor für einen Punkt berechnet wird. Siehe [[glPointParameter]], [[glPointSize]].&lt;br /&gt;
&lt;br /&gt;
====GL_POINT_SIZE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als einzelnen Wert die mit [[glPointSize]] angegebene aktuelle Punktgröße zurück.&lt;br /&gt;
&lt;br /&gt;
====GL_POINT_SIZE_GRANULARITY====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert den möglichen Größenunterschied zwischen zwei Punkt-Größenangaben zurück. Siehe [[glPointSize]].&lt;br /&gt;
&lt;br /&gt;
====GL_POINT_SIZE_MAX====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die absolute Obergrenze für die abgeleitete Punktgrösse zurück. Siehe [[glPointParameter]], [[glPointSize]].&lt;br /&gt;
&lt;br /&gt;
====GL_POINT_SIZE_MIN====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die absolute Untergrenze für die abgeleitete Punktgrösse zurück. Siehe [[glPointParameter]], [[glPointSize]].&lt;br /&gt;
&lt;br /&gt;
====GL_POINT_SIZE_RANGE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert zwei Werte zurück, die kleinst- und größtmögliche Größenangabe für Punkte. Siehe [[glPointSize]].&lt;br /&gt;
&lt;br /&gt;
====GL_POINT_SMOOTH====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als einzelnen boolschen Wert an, ob Kantenglättung für Punkteaktiv ist. Siehe [[glPointSize]].&lt;br /&gt;
&lt;br /&gt;
====GL_POINT_SMOOTH_HINT====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als symbolische Konstante den Hinweismodus für die Kantenglättung von Punkten zurück. Siehe [[glHint]].&lt;br /&gt;
&lt;br /&gt;
====GL_POINT_SPRITE_COORD_ORIGIN====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert eine symbolische Konstante, die angibt, von wo aus die Texturkoordinate t anfängt zu zählen. Mögliche Wertrückgaben sind '''GL_LOWER_LEFT''' und '''GL_UPPER_LEFT'''. Siehe [[glPointParameter]], [[glPointSize]].&lt;br /&gt;
&lt;br /&gt;
====GL_POLYGON_MODE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als zwei symbolische Konstanten zurück, ob nach vorne- oder nach hinten zeigende Polygone entweder als Punkte, Linien oder Flächen rasterisiert werden. Siehe [[glPolygonMode]].&lt;br /&gt;
&lt;br /&gt;
====GL_POLYGON_SMOOTH====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als einzelnen boolschen Wert an, ob Kantenglättung für Polygone aktiv ist. Siehe [[glPolygonMode]].&lt;br /&gt;
&lt;br /&gt;
====GL_POLYGON_SMOOTH_HINT====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als symbolische Konstante den Hinweismodus für die Kantenglättung von Polygonen zurück. Siehe [[glHint]].&lt;br /&gt;
&lt;br /&gt;
====GL_POLYGON_STIPPLE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als einzelnen boolschen Wert an ob Musterung für Polygone aktiviert ist. Siehe [[glPolygonStipple]].&lt;br /&gt;
&lt;br /&gt;
====GL_PROJECTION_MATRIX====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert 16 Werte zurück. Diese entsprechen den 16 Werten der Projektions-[[Matrix]] die als letztes auf den Projektions-Matrixstack gelegt wurde..&lt;br /&gt;
&lt;br /&gt;
====GL_PROJECTION_STACK_DEPTH ====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Anzahl der auf dem Projektionsmatrizenstapel liegenden Matrizen zurück. Siehe [[glPushMatrix]].&lt;br /&gt;
&lt;br /&gt;
===R===&lt;br /&gt;
&lt;br /&gt;
====GL_READ_BUFFER====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen boolschen Wert eine symbolische Konstante zurück, die angibt welcher Farbpuffer als Lesepuffer gesetzt ist. Siehe [[glReadPixels]] und [[glAccum]].&lt;br /&gt;
&lt;br /&gt;
====GL_RED_BIAS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als einzelnen Wert den Rotverschiebungsfaktor an, der beim Pixeltransfer genutzt wird.&lt;br /&gt;
&lt;br /&gt;
====GL_RED_BITS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als (Gannzahl)Wert die Anzahl der Bitflächen (Bittiefe) für den Rotanteil eines Farbpuffers zurück.&lt;br /&gt;
&lt;br /&gt;
====GL_RED_SCALE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert den Skalierungsfaktor für den roten Farbanteil zurück, der beim Pixeltransfer angewandt wird. Siehe [[glPixelTransfer]].&lt;br /&gt;
&lt;br /&gt;
====GL_RENDER_MODE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen symbolische Konstante zurück, die angibt in welchem Rendermodus sich die GL befindet (Rendern, Selektion oder Feedbackmodus). Siehe [[glRenderMode]].&lt;br /&gt;
&lt;br /&gt;
====GL_RESCALE_NORMAL====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als einzelnen boolschen Wert an ob die Reskalierung von [[Normalen]] aktiv ist. Siehe [[glEnable]].&lt;br /&gt;
&lt;br /&gt;
====GL_RGBA_MODE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt als einzelnen boolschen Wert zurück, ob sich die GL im RGBA-Modus (='''true''') oder im indizierten Farbmodus (='''false''') befindet. Siehe [[glColor]].&lt;br /&gt;
&lt;br /&gt;
===S===&lt;br /&gt;
&lt;br /&gt;
====GL_SAMPLE_COVERAGE_INVERT====&lt;br /&gt;
: ''params'' gibt einen einzelnen booleanschen Wert zurück, der angibt, ob der temporäre Überdeckungswert beim [[Multisampling]] invertiert werden soll. Siehe [[glSampleCoverage]].&lt;br /&gt;
&lt;br /&gt;
====GL_SAMPLE_COVERAGE_VALUE====&lt;br /&gt;
: ''params'' gibt eine einzelne Fließkomma-Zahl zurück, die den temporären Überdeckungswert beim [[Multisampling]] angibt. Siehe [[glSampleCoverage]].&lt;br /&gt;
&lt;br /&gt;
====GL_SCISSOR_BOX====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt vier Ganzzahlwerte zurück. Die X- und Y-Fensterkoordinaten der Scissorbox, gefolgt von ihrer Breite und Höhe. Siehe [[glScissor]].&lt;br /&gt;
&lt;br /&gt;
====GL_SCISSOR_TEST====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt einen einzelnen booleanschen Wert zurück, der angibt ob Scissoring aktiviert ist. Siehe [[glScissor]].&lt;br /&gt;
&lt;br /&gt;
====GL_SECONDARY_COLOR_ARRAY_SIZE====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Parameter die Anzahl der Komponenten pro Element im Zweitfarben-Array zurück. Siehe [[glSecondaryColorPointer]].&lt;br /&gt;
&lt;br /&gt;
====GL_SECONDARY_COLOR_ARRAY_STRIDE====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Parameter den Byteversatz zwischen den aufeinander folgenden Elementen in einem Zweitfarben-Array zurück. Siehe [[glSecondaryColorPointer]].&lt;br /&gt;
&lt;br /&gt;
====GL_SECONDARY_COLOR_ARRAY_TYPE====&lt;br /&gt;
&lt;br /&gt;
:''param'' liefert als einzelnen Wert den Datentyp für die Komponenten in einem Zweitfarben-Array zurück. Siehe [[glSecondaryColorPointer]].&lt;br /&gt;
&lt;br /&gt;
====GL_SHADE_MODEL====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt einen einzelnen Ganzzahlwert zurück, eine symbolische Konstante die angibt ob der Schattierungsmodus flach oder weich ist. Siehe [[glShadeModel]].&lt;br /&gt;
&lt;br /&gt;
====GL_STENCIL_BITS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen Ganzzahlwert zurück, der die Zahl der Bitflächen des Stencilpuffers enthält.&lt;br /&gt;
&lt;br /&gt;
====GL_STENCIL_CLEAR_VALUE====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt einen Wert zurück, den Index mit dem die Bitflächen des Stencilpuffers gelöscht werden. Siehe [[glClearStencil]].&lt;br /&gt;
&lt;br /&gt;
====GL_STENCIL_FAIL====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert eine symbolische Konstante zurück, die angibt was passiert wenn der Stenciltest fehlschlägt. Siehe [[glStencilOp]].&lt;br /&gt;
&lt;br /&gt;
====GL_STENCIL_FUNC====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert eine symbolische Kosntante zurück, die angibt welche Funktion zum Vergleich der Referenz-Stencilwerte mit dem Inhalt des Stencilpuffers genutzt wird. Siehe [[glStencilFunc]].&lt;br /&gt;
&lt;br /&gt;
====GL_STENCIL_PASS_DEPTH_FAIL====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert eine symbolische Konstante zurück, die angibt was passiert wenn der Stenciltest passiert, der Tiefentest jedoch fehlschlägt. Siehe [[glStencilOp]].&lt;br /&gt;
&lt;br /&gt;
====GL_STENCIL_PASS_DEPTH_PASS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert eine symbolische Konstante zurück, die angibt was passiert wenn der Stenciltest und der Tiefentest passieren. Siehe [[glStencilOp]].&lt;br /&gt;
&lt;br /&gt;
====GL_STENCIL_REF====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert den Referenzwert zurück, der bei Stencilvergleichen genutzt wird. Siehe [[glStencilFunc]].&lt;br /&gt;
&lt;br /&gt;
====GL_STENCIL_TEST====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt einen einzelnen booleanschen Wert zurück, der angibt ob der Stenciltest für Fragmente aktiviert ist. Siehe [[glStencilFunc]] und [[glStencilOp]].&lt;br /&gt;
&lt;br /&gt;
====GL_STENCIL_VALUE_MASK====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Maske zurück, die genutzt wird um sowohl den Stencil-Vergleichswert als auch den Stencilpufferwert vor dem Vergleich zu maskieren. Siehe [[glStencilFunc]].&lt;br /&gt;
&lt;br /&gt;
====GL_STENCIL_WRITEMASK====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert die Maske zurück, die das Schreiben in den Stencilpuffer kontrolliert. Siehe [[glStencilMask]].&lt;br /&gt;
&lt;br /&gt;
====GL_STEREO ====&lt;br /&gt;
&lt;br /&gt;
: ''params'' gibt einen einzelnen Booleanwert zurück der an gibt, ob Stereobuffer (links und rechts) unterstützt werden. &lt;br /&gt;
&lt;br /&gt;
====GL_SUBPIXEL_BITS====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert als einzelnen Wert eine Schätzung der Zahl der Bits an Unterpixelauflösung zurück, der genutzt wird  um Geometrie in Fensterkoordinaten zu rasterisieren.&lt;br /&gt;
&lt;br /&gt;
===T===&lt;br /&gt;
&lt;br /&gt;
====GL_TEXTURE_1D====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als booleanschen Wert zurück, ob ein-dimensionales Texturemapping aktiviert ist. Siehe [[glTexImage1D]].&lt;br /&gt;
&lt;br /&gt;
====GL_TEXTURE_2D====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als booleanschen Wert zurück, ob zwei-dimensionales Texturemapping aktiviert ist. Siehe [[glTexImage2D]].&lt;br /&gt;
&lt;br /&gt;
====GL_TEXTURE_3D====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als booleanschen Wert zurück, ob drei-dimensionales Texturemapping aktiviert ist. Siehe [[glTexImage3D]].&lt;br /&gt;
&lt;br /&gt;
====GL_TEXTURE_BINDING_1D====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert in einem einzigen Wert den Namen der aktuell an das Ziel '''GL_TEXTURE_1D''' gebundenen Textur. Siehe [[glBindTexture]].&lt;br /&gt;
&lt;br /&gt;
====GL_TEXTURE_BINDING_2D====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert in einem einzigen Wert den Namen der aktuell an das Ziel '''GL_TEXTURE_2D''' gebundenen Textur. Siehe [[glBindTexture]].&lt;br /&gt;
&lt;br /&gt;
====GL_TEXTURE_BINDING_3D====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert in einem einzigen Wert den Namen der aktuell an das Ziel '''GL_TEXTURE_3D''' gebundenen Textur. Siehe [[glBindTexture]].&lt;br /&gt;
&lt;br /&gt;
====GL_TEXTURE_COORD_ARRAY====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert einen booleanschen Wert zurück, der angibt ob das Texturkoordinaten-Array aktiv ist. Siehe [[glTexCoordPointer]].&lt;br /&gt;
&lt;br /&gt;
====GL_TEXTURE_COORD_ARRAY_SIZE====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Paramter die Anzahl der Koordinaten pro Element im Texturkoordinaten-Array zurück. Siehe [[glTexCoordPointer]].&lt;br /&gt;
&lt;br /&gt;
====GL_TEXTURE_COORD_ARRAY_STRIDE====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Parameter den Byteversatz zwischen den aufeinander folgenden Elementen in einem Texturkoordinaten-Array zurück. Siehe [[glTexCoordPointer]].&lt;br /&gt;
&lt;br /&gt;
====GL_TEXTURE_COORD_ARRAY_TYPE====&lt;br /&gt;
&lt;br /&gt;
:''param'' liefert als einzelnen Wert den Datentyp für die Koordinaten in einem Texturkoordinaten-Array zurück. Siehe [[glTexCoordPointer]].&lt;br /&gt;
&lt;br /&gt;
====GL_TEXTURE_ENV_COLOR====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert vier Werte zurück : Den roten, grünen, blauen und Alpha-Anteil der Texturenumgebungsfarbe. Integerwerte (falls angefordert) werden linear im Bezug zur Fließkommarepräsentation umgerechnet, so dass 1.0 dien höchstmöglichen positiven Integerwert zurückgibt. Siehe [[glTexEnv]].&lt;br /&gt;
&lt;br /&gt;
====GL_TEXTURE_ENV_MODE====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Wert eine symbolische Konstante zurück, die angbit welche Texturenumgebungs-Funktion zurzeit aktiv ist. Siehe [[glTexEnv]].&lt;br /&gt;
&lt;br /&gt;
====GL_TEXTURE_GEN_S====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als booleanschen Wert zurück, ob die automatische Generierung der S-Texturkoordiante aktiv ist. Siehe [[glTexGen]].&lt;br /&gt;
&lt;br /&gt;
====GL_TEXTURE_GEN_T====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als booleanschen Wert zurück, ob die automatische Generierung der T-Texturkoordiante aktiv ist. Siehe [[glTexGen]].&lt;br /&gt;
&lt;br /&gt;
====GL_TEXTURE_GEN_R====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als booleanschen Wert zurück, ob die automatische Generierung der R-Texturkoordiante aktiv ist. Siehe [[glTexGen]].&lt;br /&gt;
&lt;br /&gt;
====GL_TEXTURE_GEN_Q====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als booleanschen Wert zurück, ob die automatische Generierung der Q-Texturkoordiante aktiv ist. Siehe [[glTexGen]].&lt;br /&gt;
&lt;br /&gt;
====GL_TEXTURE_MATRIX====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert 16 Werte zurück. Diese entsprechen den 16 Werten der Texture-[[Matrix]] die als letztes auf den Texture-Matrixstack gelegt wurde.&lt;br /&gt;
&lt;br /&gt;
====GL_TEXTURE_STACK_DEPTH====&lt;br /&gt;
&lt;br /&gt;
: ''params'' liefert einen Wert, die Anzahl der Matrizen auf dem Texturmatrixstack, zurück.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===U===&lt;br /&gt;
&lt;br /&gt;
====GL_UNPACK_ALIGNMENT====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Wert die Byteausrichtung zurück, die beim Lesen von Pixeln aus dem Speicher genutzt wird. Siehe [[glPixelStore]].&lt;br /&gt;
&lt;br /&gt;
====GL_UNPACK_IMAGE_HEIGHT_EXT====&lt;br /&gt;
:''params'' liefert als einzelnen Wert die Höhe und Breite des Bildes zurück das genutzt wird um (3D-)Pixel aus dem Speicher zu lesen. Siehe [[glPixelStore]].&lt;br /&gt;
&lt;br /&gt;
====GL_UNPACK_LSB_FIRST====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen booleanschen Wert zurück, ob Ein-Bit-Pixel die aus dem Speicher ausgelesen werden zuerst aus dem niederwertigsten Bit jedes vorzeichenlosen Bytes gelesen werden. Siehe [[glPixelStore]]. &lt;br /&gt;
&lt;br /&gt;
====GL_UNPACK_ROW_LENGTH====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Wert die Reihenlänge zurück, die beim Auslesen der Pixel aus dem Speicher verwendet wird. Siehe [[glPixelStore]].&lt;br /&gt;
&lt;br /&gt;
====GL_UNPACK_SKIP_IMAGES_EXT====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Wert die Anzahl der Bilder die übersprungen werden, bevor der erste (3D-)Pixel aus dem Speicher gelesen wird. Siehe [[glPixelStore]].&lt;br /&gt;
&lt;br /&gt;
====GL_UNPACK_SKIP_PIXELS====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Wert die Anzahl der Pixel die übersprungen werden, bevor der erste Pixel aus dem Speicher gelesen wird. Siehe [[glPixelStore]].&lt;br /&gt;
&lt;br /&gt;
====GL_UNPACK_SKIP_ROWS====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Wert die Anzahl der Pixelreihen zurück, die beim Lesen aus dem Speicher übersprungen werden. Siehe [[glPixelStore]].&lt;br /&gt;
&lt;br /&gt;
====GL_UNPACK_SWAP_BYTES====&lt;br /&gt;
&lt;br /&gt;
:''params'' gibt einen einzelnen booleanschen Wert zurück, der angibt ob die Bytes von Zwei-Byte und Vier-Byte Pixelindizes und -komponenten nach dem Auslesen aus dem Speicher vertauscht werden. Siehe [[glPixelStore]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===V===&lt;br /&gt;
&lt;br /&gt;
====GL_VERTEX_ARRAY_SIZE====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Parameter die Anzahl der Koordinaten pro Element im Vertex-Array zurück. Siehe [[glVertexPointer]].&lt;br /&gt;
&lt;br /&gt;
====GL_VERTEX_ARRAY_STRIDE====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert als einzelnen Parameter den Byteversatz zwischen den aufeinander folgenden Elementen in einem Vertex-Array zurück. Siehe [[glVertexPointer]].&lt;br /&gt;
&lt;br /&gt;
====GL_VERTEX_ARRAY_TYPE====&lt;br /&gt;
&lt;br /&gt;
:''param'' liefert als einzelnen Wert den Datentyp für die Koordinaten in einem Vertex-Array zurück. Siehe [[glVertexPointer]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====GL_VIEWPORT====&lt;br /&gt;
&lt;br /&gt;
:''params'' liefert vier Parameter zurück. Die X- und Y-Koordinaten des Viewports, gefolgt von dessen Breite und Höhe. Siehe [[glViewport]].&lt;br /&gt;
&lt;br /&gt;
===Z===&lt;br /&gt;
&lt;br /&gt;
====GL_ZOOM_X====&lt;br /&gt;
&lt;br /&gt;
:''params'' gibt als einzelnen Wert den Vergrößerungsfaktor für Pixel auf der X-Achse zurück. Siehe [[glPixelZoom]].&lt;br /&gt;
&lt;br /&gt;
====GL_ZOOM_Y====&lt;br /&gt;
&lt;br /&gt;
:''params'' gibt als einzelnen Wert den Vergrößerungsfaktor für Pixel auf der Y-Achse zurück. Siehe [[glPixelZoom]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldungen ==&lt;br /&gt;
&lt;br /&gt;
'''GL_INVALID_ENUM''' wird generiert, wenn ''pname'' ein ungültiger Wert übergeben wird. &amp;lt;br&amp;gt;&lt;br /&gt;
'''GL_INVALID_OPERATION''' wird generiert, wenn '''glGet''' innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Siehe Auch==&lt;br /&gt;
[[glGetClipPlane]], [[glGetError]], [[glGetLight]], [[glGetMap]], [[glGetMaterial]], [[glGetPixelMap]], [[glGetPolygonStipple]], [[glGetString]], [[glGetTexEnv]], [[glGetTexGen]], [[glGetTexImage]], [[glGetTexLevelParameter]], [[glGetTexParameter]], [[glIsEnabled]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/glfunc02_5ub8.asp Spezifikation von glGet in der MSDN]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GL|Get]]&lt;br /&gt;
 [[Kategorie:GL1.0]]&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Tutorial_2D&amp;diff=21346</id>
		<title>Tutorial 2D</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Tutorial_2D&amp;diff=21346"/>
				<updated>2008-04-03T08:56:57Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: Verweise glScale auf glScalef&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Tutorial_StencilSpiegel&amp;diff=21345</id>
		<title>Tutorial StencilSpiegel</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Tutorial_StencilSpiegel&amp;diff=21345"/>
				<updated>2008-04-03T08:54:00Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: Verweis glScalef auf glScale&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Realistische Spiegelungen - Spiel, Spaß und Spannung mit dem Stencil-Puffer=&lt;br /&gt;
&lt;br /&gt;
==Vorwort==&lt;br /&gt;
Ave!&lt;br /&gt;
&lt;br /&gt;
Herzlich willkommen zu meinem ersten Tutorial für DGL. Einige Leser dürften schon die von mir auf meiner Seite veröffentlichen Tutorials kennen, von nun an werde ich jedoch verstärkt Tutorials für die DGL veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
In dieser Lektion geht es um die realistische Darstellung von Spiegelungen mit Hilfe des [[Schablonenpuffer|Stencilpuffers]].&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Technik findet langsam aber sicher Verbreitung in der Spieleindustrie. Das hat zum einen den Grund, das spiegelnde Flächen in der realen Welt sehr häufig vorkommen, und ihre Nachahmung einer 3D-Welt noch ein Stück mehr an Realitätsnähe verleiht. Der weitere Grund, warum realistische Spiegelungen erst seit kurzem verwendet werden, ist die Tatsache das die Szene mindestens zwei mal gerendert werden muß, und das die Grafikkarte einen [[Schablonenpuffer|Stencilpuffer]] mitbringen muß. Moderne 3D-Beschleuniger besitzen ihn natürlich, aber die damals so weit verbreitete Vodoo-Serie besaß diesen nicht.&lt;br /&gt;
&lt;br /&gt;
==Der Stencil-Puffer==&lt;br /&gt;
&lt;br /&gt;
Wie schon erwähnt ist der [[Schablonenpuffer|Stencilpuffer]] ein wichtigste Mittel um realistische Spiegelungen (und noch viele andere interessante Dinge) zu realisieren. Wie das Wort Stencil (=Schablone) schon andeutet, kann man in diesem Puffer eine Schablone ablegen, die später bestimmt welcher Bereich des Bildschirms überzeichnet, und welcher Bereich unberührt bleibt.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Tiefe des [[Schablonenpuffer|Stencilpuffers]] ist je nach Hardware unterschiedlich, inzwischen kann man aber auf jeder aktuelleren Karte von mindestens 8-Bit für diesen Puffer (oft werden dann die 24-Bit für den Tiefenpuffer mit diesen kombiniert um ein DWORD zu erhalten) ausgehen.&lt;br /&gt;
&lt;br /&gt;
Ein praktisches Anwendungsbeispiel für die Nutzung dieses Puffers zur Begrenzung der zu überzeichnenden Fläche wäre z.B. die Cockpitansicht einer Flugsimulation. Zuerst wird der [[Schablonenpuffer|Stencilpuffer]] aktiviert, und dann wird das Cockpit in diesen Puffer &amp;quot;hineingezeichnet&amp;quot; und als Ausschlussmaske benutzt. Überall dort wo das Cockpit im [[Schablonenpuffer|Stencilpuffer]] einen Pixel hinterlassen hat wird später im [[Farbpuffer|Farbpuffer]] nicht gezeichnet.Dadurch muss das Cockpit also nur einmal gezeichnet werden. Die folgende Bildreihe verdeutlicht dies :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|width=&amp;quot;25%&amp;quot; |[[Bild:Tutorial_Stencil_cockpit01.jpg|center]] &lt;br /&gt;
|width=&amp;quot;25%&amp;quot; |[[Bild:Tutorial_Stencil_cockpit02.jpg|center]]&lt;br /&gt;
|width=&amp;quot;25%&amp;quot; |[[Bild:Tutorial_Stencil_cockpit03.jpg|center]]&lt;br /&gt;
|width=&amp;quot;25%&amp;quot; |[[Bild:Tutorial_Stencil_cockpit04.jpg|center]]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; | Cockpit-Textur (oder 3D-Modell)&amp;lt;br&amp;gt;(wird in den Stencilpuffer gezeichnet)&lt;br /&gt;
|align=&amp;quot;center&amp;quot; | Inhalt des Stencil-Puffers &amp;lt;br&amp;gt;(Schwarz : Stencil-Wert = 0)&amp;lt;br&amp;gt;(Weiß : Stencil-Wert = 1)&lt;br /&gt;
|align=&amp;quot;center&amp;quot; | Auf dem Bildschirm sichtbarer Teil der Szene 	&lt;br /&gt;
|align=&amp;quot;center&amp;quot; | Endergebnis&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt fragt ihr euch bestimmt, was dieses Cokpit-Beispiel mit unserer Spiegelung zu tun hat?&lt;br /&gt;
Ganz einfach : Zum einen erleichtert es das Verständnis der Funktionsweise des [[Schablonenpuffer|Stencilpuffers]], was unbedingt notwendig ist, und zum anderen funktioniert die Sache mit dem Spiegel genau umgekehrt.&amp;lt;br&amp;gt;&lt;br /&gt;
Während der [[Schablonenpuffer|Stencilpuffer]] im Cockpit-Beispiel dazu genutzt wird, den Teil an dem sich das Cockpit befindet vor dem Überschreiben durch andere Farbwerte zu bewahren, wird der Puffer bei einer Spiegelung dazu genutzt, den Bereich ausserhalb des Spiegels vorm Überschreiben zu schützen. So wird also nur der Teil der Szene gezeichnet, die sich auch &amp;quot;im&amp;quot; Spiegel befindet.&amp;lt;br&amp;gt;&lt;br /&gt;
Wozu der [[Schablonenpuffer|Stencilpuffer]] also gut ist, lässt sich anhand der folgenden zwei Screenshots wohl am besten verdeutlichen. Während der Spiegel im linken Bild korrekt ist, und das Spiegelbild ausserhalb der Spieglfläche aufgrund des Stenciltests nicht gezeichnet wird, ist das Spiegelbild rechts falsch. Hier wurde der Stenciltest deaktiviert :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; [[Bild:Tutorial_Stencil_Trooper04.jpg]] [[Bild:Tutorial_Stencil_Trooper03.jpg]] &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Clipping Plane==&lt;br /&gt;
Ein weiterer, für unseren Zweck notwendiger Begriff sind die [[Clipping Plane]]s (zu Deutsch : Schnittflächen). Das ist aber nichts mathematisch unmögliches, sondern eine ganz einfache Fläche, an der die Geometrie &amp;quot;abgeschnitten&amp;quot; wird. D.h., dass alles was auf der per Vorzeichen definierten Seite dieser Schnittfläche liegt einfach nicht gezeichnet wird.&amp;lt;br&amp;gt;&lt;br /&gt;
OpenGL bringt von Haus aus schonmal sechs solcher Clipping-Planes mit, die zusammen das Frustum ergeben, also der Quader, an dem die Geometrie aufgrund ihrer Sichtbarkeit &amp;quot;abgeschnitten&amp;quot; wird.&lt;br /&gt;
&lt;br /&gt;
Darüberhinaus kann man jedoch selbst noch zusätzliche Schnittflächen definieren. Laut OpenGL-Vorgaben muß jeder OpenGL-Treiber mindestens sechs zusätzliche Schnittflächen anbieten können. Für unseren Spiegel reicht jedoch eine.&lt;br /&gt;
&lt;br /&gt;
Eine Clippingplane wird mittels der Funktion {{INLINE_CODE|[[glClipPlane]](plane: TGLEnum; equation: PGLdouble)}}, wobei die Fläche mittles eines {{INLINE_CODE|array[0..3] of Double}} über ihre Gleichung ''Ax+By+Cz+D = 0'' definiert wird. Aktiviert bzw. deaktiviert wird eine Schnittfläche mittels der Konstante '''GL_CLIP_PLANE'''i, wobei i für die Nummer der Schnittfläche steht und zwischen 0 und 5 liegt.&lt;br /&gt;
&lt;br /&gt;
Das hört sich jetzt erstmal leicht trocken an, und dürfte ohne praktisches Beispiel auch nicht hängen bleiben. Deshalb hier zwei Screenshots aus dem Beispielprogramm zu diesem Tutorial, die verdeutlichen wozu die Schnittfläche benötigt wird. Der Spiegel liegt hier im Koordinatensystem am Ursprung (x:0,y:0,z:0) und &amp;quot;liegt&amp;quot; auf der Y-Achse.&amp;lt;br&amp;gt;&lt;br /&gt;
Definiert wird dieser Spiegel deshalb als {{INLINE_CODE|array[0..3] of Double = (0, 0, -1, 0)}}. Das Minus vor der Eins gibt also quasi an, auf welcher Seite der Spiegelfläche geclippt werden soll. Würde der Spielerraum also auf der anderen Seite liegen, wäre das Vorzeichen positiv.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|border=0&lt;br /&gt;
|[[Bild:Tutorial_Stencil_Trooper01.jpg|framed|Ohne Clipping]] &lt;br /&gt;
|[[Bild:Tutorial_Stencil_Trooper02.jpg|framed|Mit Clipping]] &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Programmiertechnische Umsetzung==&lt;br /&gt;
&lt;br /&gt;
Nachdem wir nun mit der Begriffserklärung abgeschlossen haben und jedem klar sein sollte, was ein [[Schablonenpuffer|Stencilpuffers]] macht und wozu eine [[Clipping Plane]] gut ist, widmen wir uns nun der Implementation eines Spiegels in unser Programm. Der Quelltext zu diesem Thema ist zwar relativ kurz, bietet aber dennoch einiges an Erklärungsspielraum.&amp;lt;br&amp;gt;&lt;br /&gt;
''Deshalb : Nicht einfach nur abtippen, sondern auch sorgfältig meine mehr oder weniger ausführlichen Erklärungen mitlesen.''&lt;br /&gt;
&lt;br /&gt;
Die Renderprozedur sowohl für die normale Szene als auch für den Spiegelraum befindet sich im Beispielprogramm in der Prozedur ''DrawScene_Stencil''. Im folgenden Kapitel werden alle relevante Teile dieser Prozedur besprochen, unwichtige Grundlagen lasse ich jedoch weg. Jeder der sich mit Spiegelungen beschäftigen will, sollte sich mit den OpenGL-Grundlagen auskennen.&lt;br /&gt;
&lt;br /&gt;
===Definition der Schnittfläche===&lt;br /&gt;
&lt;br /&gt;
Zu allererst definieren wir die Schnittfläche an der das Spiegelbild abgeschnitten wird. Würden wir diesen Teil weglassen, dann würden spätestens beim Durchschreiten eines Spiegels (auch wenn das in einem Ego-Shooter nicht vorkommen sollte) hässlich falsche Spiegelbilder entstehen...und das wollen wir ja nicht, schliesslich soll unser Spiegel ja die reale Welt nachstellen. Wie die Schnittfläche definiert wird, haben wir ja oben bereits besprochen. Wichtig wäre hier vielleicht noch, dass als Datentyp unbedingt Double verwendet werden muß. Andere Datentypen (z.B. Single) führen zu unvorhersehbaren Effekten.&lt;br /&gt;
&lt;br /&gt;
 const&lt;br /&gt;
  ClipPlane : array[0..3] of Double = (0, 0, -1, 0);&lt;br /&gt;
&lt;br /&gt;
===Den Stencil-Puffer löschen===&lt;br /&gt;
Wie bekannt müssen (oder sollten) die verwendeten OpenGL-Puffer vor jedem neuen Zeichendurchgang gelöscht werden. Dies geschieht ja bekannterweise mit der Funktion [[glClear]]() und als Parameter oderverknüpft die zu löschenden Puffer. Neben den Bits für den [[Farbpuffer]] ('''GL_COLOR_BUFFER_BIT''') und dem [[Tiefenpuffer]] ('''GL_DEPTH_BUFFER_BIT''') kommt nun ein neues Puffer-Bit dazu, nämlich '''GL_STENCIL_BUFFER_BIT''', um den [[Schablonenpuffer|Stencilpuffer]] zu &amp;quot;löschen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Löschen habe ich deshalb in Anführungszeichen gesetzt, weil der [[Schablonenpuffer|Stencilpuffer]] nicht einfach wie z.B. der [[Farbpuffer]] geleert wird, sondern durch {{INLINE_CODE|glClear(GL_STENCIL_BUFFER_BIT)}} mit einem vorher definierten Wert gefüllt wird. Dieser Wert wird (am besten bei der OpenGL-Initialisierung) mittels {{INLINE_CODE|[[glClearStencil]](s:Integer)}} festgelegt. In unserem Falle übergeben wir als hier Parameter den Wert 0.&lt;br /&gt;
&lt;br /&gt;
 // Löschen des Stencil-Puffers zum Beginn der Szene&lt;br /&gt;
 glClear(GL_DEPTH_BUFFER_BIT or GL_COLOR_BUFFER_BIT or GL_STENCIL_BUFFER_BIT);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Den Stencil-Puffer vorbereiten und die Maske erstellen===&lt;br /&gt;
&lt;br /&gt;
Kommen wir nun also zum schwierigsten Teil dieses Tutorials. Die folgenden Zeilen aktiveren den [[Schablonenpuffer|Stencilpuffer]] und erstellen die Maske unseres Spiegels in diesem Puffer. Leider lassen sich die jetzt kommenden Befehle und Funktionen nicht ganz so einfach beschreiben.&lt;br /&gt;
&lt;br /&gt;
 glColorMask(False, False, False, False);&lt;br /&gt;
&lt;br /&gt;
Mit der Funktion {{INLINE_CODE|[[glColorMask]](R,G,B,A : ByteBool)}} teilen wir OpenGL mit, welche Farbkomponenten auf den Bildschirm gezeichnet werden. In unserem Falle deaktivieren wir alle Farbkomponenten, es wird also nichts auf den Bildschirm gezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Dies ist insofern nötig, da wir jetzt erstmal unsere Maske in den [[Schablonenpuffer|Stencilpuffer]] zeichnen wollen, und dies kein Puffer ist in den man direkt hineinschreiben kann (wie das beim Farbpuffer der Fall ist). Wir müssen also den Weg über den Farbpuffer gehen.&lt;br /&gt;
&lt;br /&gt;
 glEnable(GL_STENCIL_TEST);&lt;br /&gt;
&lt;br /&gt;
Zu diesem Befehl muss ich wohl kaum Worte verlieren. Kurz und schmerzlos : Er aktiviert den Stencil-Test und damit verbunden auch den [[Schablonenpuffer|Stencilpuffer]].&lt;br /&gt;
&lt;br /&gt;
 [[glStencilFunc]](GL_ALWAYS, 1, 1);&lt;br /&gt;
&lt;br /&gt;
Mit diesem Befehl teilen wir OpenGL mit, welcher Test auf jeden gezeichneten Pixel angewendet werden soll. Der erste Parameter '''GL_ALWAYS''' gibt an, dass der Test immer erfolgreich ist. Der zweite Parameter gibt den Referenzwert für diesen Test an (den wir gleich noch brauchen werden). Wenn der Test z.B. '''GL_LESS''' wäre, dann würde das Pixelfragment den Test bestehen, wenn es kleiner als der im Referenzparameter angegebene Wert wäre.&amp;lt;br&amp;gt;&lt;br /&gt;
Der letzte Parameter gibt die Maske an, mit der unsere Referenzparameter beim Gelingen des Tests verunded wird. Wenn der Test also gelingt, wird eine 1 in den [[Schablonenpuffer|Stencilpuffer]] geschrieben (Test gelungen-&amp;gt;Stencil-Wert = Refernzwert UND Maskenwert -&amp;gt; 1 UND 1 = 1).&lt;br /&gt;
&lt;br /&gt;
 glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);&lt;br /&gt;
&lt;br /&gt;
Nach obigem OpenGl-Vorschlaghammer kommt jetzt wieder etwas leichter verdauliche Kost. Mit der Funktion {{INLINE_CODE|[[glStencilOp]](fail, zfail, zpass: TGLEnum)}} teilen wir OpenGL mit, wie der Stencilwert verändert wird, wenn ein Fragment den Test besteht oder nicht besteht. Dabei unterscheidet OpenGL anhand der drei übergebenen Parameter drei verschiedene Szenarien :&lt;br /&gt;
&lt;br /&gt;
*Fail &lt;br /&gt;
: Diese Funktion wird angewendet, wenn das Fragment den '''Stencil-Test nicht besteht'''&lt;br /&gt;
*zFail &lt;br /&gt;
: Wird angewendet, wenn das Fragment den '''Tiefentest nicht besteht'''&lt;br /&gt;
*zPass &lt;br /&gt;
: Wird angewendet, wenn das Fragment den '''Test besteht''' (Wichtigste Funktion!)&lt;br /&gt;
&lt;br /&gt;
Die ersten zwei Parameter sind in unserem Falle relativ uninteressant, weshalb wir OpenGL über '''GL_KEEP''' mitteilen dass der [[Schablonenpuffer|Stencilpuffer]] in diesen beiden Fällen nicht verändert wird.&lt;br /&gt;
Der dritte Parameter ist jedoch sehr wichtig : Er gibt an, was OpenGL mit dem Stencil-Puffer macht, wenn das Fragment den Test besteht. In unserem Fall soll der Stencil-Pufferwert über '''GL_REPLACE''' mit dem veränderten Masken- und Referenzwert (=1) ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
==Wer die Hoffnung jetzt noch nicht verloren hat, der hats fast geschafft. Das Schwerste liegt bereits hinter uns!==&lt;br /&gt;
&lt;br /&gt;
 glDisable(GL_DEPTH_TEST);&lt;br /&gt;
 glDisable(GL_TEXTURE_2D);&lt;br /&gt;
 DrawMirror;&lt;br /&gt;
&lt;br /&gt;
Diese drei Zeilen sind ja schon fast selbsterklärend, aber aufgrund dessen was oben auf das Gehirn zukam auch eher zur Entspannung gedacht. Bevor wir mit ''DrawMirror'' unsere Spiegelfäche in den Stencil-Puffer zeichnen, deaktivieren wir den Tiefentest und das Texturemapping.&lt;br /&gt;
Nun haben wir eine unsichtbare Maske unseres Spiegels im [[Schablonenpuffer|Stencilpuffer]]. Überall dort, wo unsere Spiegelfläche in den Stencilpuffer gezeichnet wurde, steht eine 1 (=Referenzwert und Maksenwert, da der Test bestanden wurde).&lt;br /&gt;
Solange der Stenciltest jetzt also aktiv bleibt, wird nur dort gezeichnet wo unsere Spiegelfläche im Stencilpuffer eine 1 hinterlies.&lt;br /&gt;
&lt;br /&gt;
 glEnable(GL_TEXTURE_2D);&lt;br /&gt;
 glEnable(GL_DEPTH_TEST);&lt;br /&gt;
 glColorMask(True, True, True, True);&lt;br /&gt;
&lt;br /&gt;
Da wir nun beginnen die Szene hinter dem Spiegel (also quasi das Spiegelbild) zu zeichnen, aktivieren wir sowohl das Texturemapping als auch den Tiefentest wieder.&lt;br /&gt;
Und da wir natürlich auch was von unserem Spiegelbild sehen woll und dies in den Farbpuffer gelangen soll, teilen wir OpenGL mittels {{INLINE_CODE|[[glColorMask]]()}} mit, dass wieder alle Farbkomponenten in den Farbpuffer gelangen sollen.&lt;br /&gt;
&lt;br /&gt;
 glStencilFunc(GL_EQUAL, 1, 1);&lt;br /&gt;
&lt;br /&gt;
Mit dieser Zeile teilen wie OpenGL mit, das nur dort gezeichnet werden soll, wo sich im [[Schablonenpuffer|Stencilpuffer]] eine 1 befindet (siehe oben). Dies ist das &amp;quot;Geheimnis&amp;quot; hinter realistisch aussehenden Reflektionen im Stencilpuffer!&lt;br /&gt;
&lt;br /&gt;
 glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);&lt;br /&gt;
&lt;br /&gt;
Nachdem wir unseren [[Schablonenpuffer|Stencilpuffer]] ja bereits mit einer unsichtbaren Spiegelmaske gefüllt haben, soll er von nun an nicht mehr verändert werden. In allen drei Testfällen wird der aktuelle Stencilwert deshalb also mittels '''GL_KEEP''' nicht mehr verändert.&lt;br /&gt;
&lt;br /&gt;
 glEnable(GL_CLIP_PLANE0);&lt;br /&gt;
 glClipPlane(GL_CLIP_PLANE0, @ClipPlane);&lt;br /&gt;
&lt;br /&gt;
Bevor wir jetzt dazu übergehen unsere gespiegelte Szene zu zeichnen, aktivieren wir noch die Schnittfläche unseres Spiegels. Die Erklärung dazu gabs ja bereits zum Beginn dieses Tutorials.&lt;br /&gt;
&lt;br /&gt;
===Die gespiegelte Szene zeichnen===&lt;br /&gt;
&lt;br /&gt;
So. Nachdem die Stencilpuffer-Tortur überstanden ist und mindestens die Hälfte der Leser eines unnatürlichen Todes gestorben sind, darf ich die anderen beglückwünschen. Wir sind fast fertig!&lt;br /&gt;
&lt;br /&gt;
Nachdem unser [[Schablonenpuffer|Stencilpuffer]] also inzwischen die unsichtbare Spiegelfläche enthält und er auch schon für das Zeichnen der gespiegelten Szene vorbereitet wurde, müssen wir die Szene nur noch gespiegelt zeichnen. Nichts leichter als dass, denn mit [[glScale|glScalef]]() kann man eine Szene ja bekannterweise auf einfachste Art und Weise an einer Achse spiegeln.&lt;br /&gt;
In unserem Falle müssen wir die Szene an der Z-Achse spiegeln, also der Achse an der unser Spiegel spiegelt. Das geht dann kurz und schmerzlos :&lt;br /&gt;
&lt;br /&gt;
 glScalef(1,1,-1)&lt;br /&gt;
&lt;br /&gt;
Wie gesagt...einfacher gehts nimmer. Wenn wir unsere Szene z.b. auf dem Fussboden spiegeln wollten, dann würe ein einfaches {{INLINE_CODE|glScalef(1,-1,1)}} reichen. Dass sieht in der Praxis dann im Endergebnis so aus :&lt;br /&gt;
&lt;br /&gt;
{{center| [[Bild: Tutorial_Stencil_Trooper05.jpg]]}}&lt;br /&gt;
&lt;br /&gt;
Anschliessend wird dann die Szene wie gewohnt gezeichnet. Wenn die Szene etwas komplexer ist, sollte man das Zeichnen in eine externe Prozedur auslagern, die man dann zweimal aufrufen muss.&lt;br /&gt;
Nicht vergessen : Vor dem skalieren der Matrix sollte man diese mit [[glPushMatrix]] auf den Matrizenstack legen, und vor dem Zeichnen der normalen Szene wieder mit '''glPopMatrix''' wiederherstellen!&lt;br /&gt;
&lt;br /&gt;
 glDisable(GL_CLIP_PLANE0);&lt;br /&gt;
 glDisable(GL_STENCIL_TEST);&lt;br /&gt;
&lt;br /&gt;
Nachdem wir unsere gespiegelte Szene gezeichnet haben, diese an der definierten Schnittfläche (wenn nötig) abgeschnitten wurde und aufgrund der Stencilmaske nur in die Spiegelfläche gezeichnet wurden, können sowohl die Schnittfläche als auch der Stenciltest wieder deaktiviert werden.&lt;br /&gt;
&lt;br /&gt;
===Den Spiegel zeichnen===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pascal&amp;gt;glEnable(GL_BLEND);&lt;br /&gt;
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);&lt;br /&gt;
glColor4f(1,1,1,0.45);&lt;br /&gt;
MirrorTex.Bind;&lt;br /&gt;
DrawMirror;&lt;br /&gt;
glDisable(GL_BLEND);&amp;lt;/pascal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nachdem wir nun unsere gespiegelte Szene hinter dem Spiegel gezeichnet haben, sollten wir noch unsere sichtbare Spiegelfläche zeichnen, um dem Spieler auch den Eindruck zu vermitteln, dass er vor einem Spiegel steht.Dazu benutze ich eine recht helle Glastextur, die ich mittels Alphablending über die gespiegelte Szene zeichne. Welchen Unterschied das macht, lässt sich auf folgenden beiden Screenshots (links ohne Spiegeltextur, rechts mit) sehr gut sehen : &lt;br /&gt;
&lt;br /&gt;
{{center| [[Bild: Tutorial_Stencil_Trooper06.jpg]] [[Bild: Tutorial_Stencil_Trooper07.jpg]]}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Und die Moral von der Geschicht...===&lt;br /&gt;
...ohne die normale Szene dann zu rendern gehts nicht! Also nicht vergessen nach dem rendern des Spiegels auch noch die normale Spielszene zu zeichnen!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Nachwort==&lt;br /&gt;
&lt;br /&gt;
So...das war also mein erstes Tutorial für die DGL.Für mich wars halb so schlimm, während es für einige von euch wohl doch einem Vorschlaghammer auf den Hinterkopf gleich kam. Das macht aber nix, denn wenn irgendjemand etwas nicht verstanden hat, ich bin ja auch als Mod im Forum tätig und antworte gerne auf eure Fragen!&lt;br /&gt;
&lt;br /&gt;
Abschliessend sei noch zu sagen, dass diese Technik einen Nachteil hat : Der Raum hinter der Spiegelfläche ist tabu, da man sonst einen Teil des illusionären Spiegelraumes dahinter sehen würde.Dieser Nachteil lässt sich jedoch recht leicht mit einigen Sichtbarkeitstechniken umschiffen, und der Nutzung solcher Spiegelungen sollte damit keine Grenzen mehr gesetzt sein!&lt;br /&gt;
&lt;br /&gt;
Hoffe das Tut hat euch gefallen und vor allem auch geholfen!&lt;br /&gt;
&lt;br /&gt;
Euer&lt;br /&gt;
&lt;br /&gt;
'''[[User:Sascha Willems|Sascha Willems]]''' (webmaster AT delphigl.de)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Nachtrag (Oktober 2005)==&lt;br /&gt;
&lt;br /&gt;
Das Tutorial hat bereits einige Jahre auf dem Buckel, und in einer so schnellen Industrie wie der Grafikkartenindustrie ist das von größerer Bedeutung. Die Technik Spiegelungen mittels des Stencilpuffers zu realisieren ist heute kaum noch von Relevanz. Heute benutzt man so gut wie immer Render-To-Texture (z.B. via Pixelpuffer oder EXT_FBO) um Spiegelungen aller Art zu realisieren. Dadurch hat man diverse Vorteile : &lt;br /&gt;
&lt;br /&gt;
* Die Spiegelung kann u.a. über Verschiebung der Mip-Maps schärfer bzw. dumpfer gemacht werden, so lassen sich auch einfach Reflektionen auf dumpfen Materialien wie z.B. verrostetes Metall darstellen.&lt;br /&gt;
* Die Spiegelung liegt in einer Textur vor. Damit verbunden sind jede Menge Manipulationen möglich, sei es nun so was grundlegendes wie Multitexturing oder erweitertes Sachen wie Shader. Mit Shadern kann man dann recht einfach solche Sachen wie Verwirbelung oder Refraktion auf der Oberflächen (u.a. für Wasser genutzt) realisieren.&lt;br /&gt;
&lt;br /&gt;
Von daher sollte man heutzutage auf die Spiegelungsmethode im Stencilpuffer '''verzichten''' und die Render-To-Texture Methode verwenden.&lt;br /&gt;
&lt;br /&gt;
'''[[User:Sascha Willems|Sascha Willems]]''' (webmaster AT delphigl.de)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{TUTORIAL_NAVIGATION|[[Tutorial_MultiTexturing]]|[[Tutorial_StereoSehen]]}}&lt;br /&gt;
[[Kategorie:Tutorial|StencilSpiegel]]&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=glGetShaderSource&amp;diff=21344</id>
		<title>glGetShaderSource</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=glGetShaderSource&amp;diff=21344"/>
				<updated>2008-04-03T08:05:50Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: Tippfehler bei glIsShader&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= glGetShaderSource =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
'''glGetShaderSource''' - Gibt den Sourcecode-String eines Shaderobjekts aus&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Delphi-Spezifikation ==&lt;br /&gt;
&lt;br /&gt;
 procedure '''glGetShaderSource'''(''shader'' : GLuint; ''bufSize'' : GLsizei&lt;br /&gt;
                             ''length'' : PGLsizei; ''source'' : PGLchar)&lt;br /&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;
! ''shader'' &lt;br /&gt;
| Gibt das Shaderobjekt an, dass abgefragt werden soll.&lt;br /&gt;
|-&lt;br /&gt;
! ''bufSize'' &lt;br /&gt;
| Gibt die Größe des Zeichenpuffers zu Speicherung des Sourcecode-Strings an.&lt;br /&gt;
|-&lt;br /&gt;
! ''length''&lt;br /&gt;
| Gibt die Länge des Strings (ausschließlich der Null-Terminierung), der nach ''source'' ausgegeben wurde, an.&lt;br /&gt;
|-&lt;br /&gt;
! ''source''&lt;br /&gt;
| Gibt ein Zeichen-Array an, in dem der Sourcecode-String abgelegt wird.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beschreibung == &lt;br /&gt;
&lt;br /&gt;
'''glGetShaderSource''' gibt alle Sourcecode-Strings des Shaderobjekts ''shader'' auf einmal aus. Die Sourcecode-Strings eines Shaderobjekts sind das Ergebnis eiens vorhergehenden Aufrufs von [[glShaderSource]]. Der von der Funktion ausgegene String ist null-terminiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''glGetShaderSorce''' gibt nach Source so viel wie möglich vom Sourcecode-String aus, bis maximal ''bufSize'' Zeichen. Die Anzahl der wirklich ausgegebenen Zeichen wird ausschließlich der Null-Terminierung durch ''length'' angegeben. Wenn die Länge des ausgegebenen Strings unerheblich ist, kann man im ''length''-Argument '''nil''' angeben. Die Größe des Puffers, der benötigt wird, den ausgebenen Sourcecode-String zu speichern, kann durch einen Aufruf von [[glGetShader]] mit dem Argument '''GL_SHADER_SOURCE_LENGTH''' bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hinweise ==&lt;br /&gt;
'''glGetShaderSource''' ist nur verfügbar, wenn die verwendete OpenGL-Version größer gleich 2.0 ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldungen ==&lt;br /&gt;
'''GL_INVALID_VALUE''' wird generiert, wenn ''shader'' kein von OpenGL erzeugter Wert ist.&lt;br /&gt;
&lt;br /&gt;
'''GL_INVALID_OPERATION''' wird generiert, wenn ''shader'' kein Shaderobjekt ist.&lt;br /&gt;
&lt;br /&gt;
'''GL_INVALID_VALUE''' wird generiert, wenn ''bufSize'' kleiner 0 ist.&lt;br /&gt;
&lt;br /&gt;
'''GL_INVALID_OPERATION''' wird generiert wenn '''glGetShaderSource''' innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zugehörige Wertrückgaben ==&lt;br /&gt;
[[glGetShader]] mit Token [[glGetShader#GL_SHADER_SOURCE_LENGTH|GL_SHADER_SOURCE_LENGTH]]&lt;br /&gt;
&lt;br /&gt;
[[glIsShader]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
[[glCreateShader]], [[glShaderSource]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GL|GetShaderSource]]&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=glGetShaderInfoLog&amp;diff=21343</id>
		<title>glGetShaderInfoLog</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=glGetShaderInfoLog&amp;diff=21343"/>
				<updated>2008-04-03T08:04:44Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: Tippfehler bei glIsShader&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= glGetShaderInfoLog =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
'''glGetShaderInfoLog''' - Gibt das Information-Log eines Shaderobjekts aus&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Delphi-Spezifikation ==&lt;br /&gt;
&lt;br /&gt;
 procedure '''glGetShaderInfoLog'''(''shader'' : GLuint; ''maxLength'' : GLsizei;  ''length'' : PGLsizei; ''infoLog'' : PGLchar) &lt;br /&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;
! ''shader'' &lt;br /&gt;
| Gibt das Shaderobjekt an, dessen Information-Log abgefragt werden soll.&lt;br /&gt;
|-&lt;br /&gt;
! ''maxLength'' &lt;br /&gt;
| Gibt die Größe des Zeichen-Puffers für das Speichern des erhaltenen Information-Logs an.&lt;br /&gt;
|-&lt;br /&gt;
! ''length''&lt;br /&gt;
| Gibt die Länge des Strings (ohne die Null-Terminierung) an, der nach ''infoLog'' ausgegeben wird.&lt;br /&gt;
|-&lt;br /&gt;
! ''infoLog''&lt;br /&gt;
| Gibt ein Zeichen-Array an, das verwendet wird, um das Information-Log auszugeben.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beschreibung == &lt;br /&gt;
'''glGetShaderInfoLog''' gibt das Information-Log für das spezifizierte Shaderobjekt aus. Das Information-Log eines Shaderobjekts wird verändert, wenn das Shaderobjekt gelinkt oder validiert wird. Der ausgegebene String ist null-terminiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''glGetShaderInfoLog''' legt in ''infoLog'' maximal so viele Zeichen des Information-Log ab, wie durch ''maxLength'' angegeben wurde. Die Anzahl der ausgegebenen Zeichen - ausschließlich der Null-Terminierung - wird durch ''length'' angegeben. Wenn die Länge des ausgegenen Strings nicht von Interesse ist, kann '''nil''' als ''length''-Argument verwendet werden. Die Größe des Puffers, der zum Speichern des zurückgelieferten Information-Log verwendet wird, kann durch einen Aufruf von [[glGetShader]] mit dem Argument '''GL_INFO_LOG_LENGTH''', herausgefunden werden.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Das Information-Log für ein Shaderobjekt ist entweder ein leerer String oder ein String, der Informationen über die letzte Link- oder Validierungs-Operation enthält. Das Log kann Diagnose-Nachrichten, Warnungen und andere Informationen enthalten. Wenn ein Shaderobjekt erzeugt wird, ist sein Information-Log ein String mit der Länge 0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hinweise ==&lt;br /&gt;
'''glGetShaderInfoLog''' ist nur in OpenGL-Versionen ab mindestens 2.0 verfügbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Information-Log für ein Shaderobjekt ist der wichtigste Weg der OpenGL-Implementation, Informationen über das Linken und Validieren mitzuteilen. Das Information-Log kann während dem Entwicklungsprozess hilfreich für Programmierer sein, auch wenn diese Operationen erfolgreich verlaufen. Man sollte aber nicht erwarten, dass verschiedene OpenGL-Implementationen (vor allem von verschiedenen Herstellern) identische Information-Logs liefern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldungen ==&lt;br /&gt;
'''GL_INVALID_VALUE''' wird generiert, wenn ''shader'' kein von OpenGL erzeugter Wert ist.&lt;br /&gt;
&lt;br /&gt;
'''GL_INVALID_OPERATION''' wird generiert, wenn ''shader'' kein Shaderobjekt ist.&lt;br /&gt;
&lt;br /&gt;
'''GL_INVALID_VALUE''' wird generiert, wenn ''maxLength'' kleiner 0 ist.&lt;br /&gt;
&lt;br /&gt;
'''GL_INVALID_OPERATION''' wird generiert, wenn '''glGetShaderInfoLog''' innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zugehörige Wertrückgaben ==&lt;br /&gt;
[[glGetShader]] mit Token [[glGetShader#GL_INFO_LOG_LENGTH|GL_INFO_LOG_LENGTH]]&lt;br /&gt;
&lt;br /&gt;
[[glIsShader]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
[[glCompileShader]], [[glGetShaderInfoLog]], [[glLinkProgram]], [[glValidateProgram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GL|GetProgram]]&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=glGetShader&amp;diff=21342</id>
		<title>glGetShader</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=glGetShader&amp;diff=21342"/>
				<updated>2008-04-03T08:03:45Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: Tippfehler bei glIsShader&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= glGetShader =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
'''glGetShaderiv''' - Gibt Parameter von Shaderobjekten aus&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Delphi-Spezifikation ==&lt;br /&gt;
&lt;br /&gt;
 procedure '''glGetShader'''(''shader'' : GLuint; ''pname'' : GLenum; ''params'' : PGLint)&lt;br /&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;
! ''shader'' &lt;br /&gt;
| Gibt das Shaderobjekt an, das abgefragt werden soll&lt;br /&gt;
|-&lt;br /&gt;
! ''pname'' &lt;br /&gt;
| Gibt den gewünschten Objektparameter an. Zulässig sind '''GL_SHADER_TYPE''', '''GL_DELETE_STATUS''', '''GL_COMPILE_STATUS''', '''GL_INFO_LOG_LENGTH''' und '''GL_SHADER_SOURCE_LENGTH'''&lt;br /&gt;
|-&lt;br /&gt;
! ''params''&lt;br /&gt;
| Beinhaltet den Objektparameter&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beschreibung == &lt;br /&gt;
'''glGetShader''' gibt nach ''params'' den Wert eines Parameters für einen spezifischen Shader aus. Folgende Parameter sind definiert:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===GL_SHADER_TYPE===&lt;br /&gt;
&lt;br /&gt;
''params'' gibt '''GL_VERTEX_SHADER''' aus, wenn ''shader'' ein Vertexshaderobjekt ist, und '''GL_FRAGMENT_SHADER''', wenn ''shader'' ein Fragmentshaderobjekt ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===GL_DELETE_STATUS===&lt;br /&gt;
&lt;br /&gt;
''params'' gibt '''GL_TRUE''' aus, wenn der Shader zur Löschung markiert wurde, anderenfalls wird '''GL_FALSE''' ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===GL_COMPILE_STATUS===&lt;br /&gt;
&lt;br /&gt;
''params'' gibt '''GL_TRUE''' aus, wenn die letzte Kompilier-Operation mit dem Shader erfolgreich verlaufen ist, anderenfalls wird '''GL_FALSE''' ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===GL_INFO_LOG_LENGTH===&lt;br /&gt;
&lt;br /&gt;
''params'' gibt die Anzahl der Zeichen im Information-Log des Shaders (einschließlich der Null-Terminierung) aus. Die Größe des Zeichenpuffers wird zum Beispiel für das Abspeichern des Information-Log benötigt. Wenn der Shader kein Information-Log hat, wird 0 ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===GL_SHADER_SOURCE_LENGTH===&lt;br /&gt;
&lt;br /&gt;
''params'' gibt die Summe der Längen der Shader-Sourcecodes (einschließlcih der Null-Terminierung) aus. Die Größe des Zeichenpuffers wird zum Beispiel für das Abspeichern des Shader-Sourcecodes benötigt. Wenn kein Sourcecode vorhanden ist, wird 0 ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hinweise ==&lt;br /&gt;
'''glGetShader''' ist nur verfügbar, wenn die verwendete OpenGL-Version größer gleich 2.0 ist.&lt;br /&gt;
&lt;br /&gt;
Wenn ein Fehler generiert wird, wird der Inhalt von ''params'' nicht verändert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldungen ==&lt;br /&gt;
'''GL_INVALID_VALUE''' wird generiert, wenn ''shader'' kein von OpenGL erzeugter Wert ist.&lt;br /&gt;
&lt;br /&gt;
'''GL_INVALID_OPERATION''' wird generiert, wenn ''shader'' sich nicht auf ein Shaderobjekt bezieht.&lt;br /&gt;
&lt;br /&gt;
'''GL_INVALID_ENUM''' wird generiert, wenn ''pname'' ein unzulässiger Wert ist.&lt;br /&gt;
&lt;br /&gt;
'''GL_INVALID_OPERATION''' wird generiert wenn '''glGetShader''' innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zugehörige Wertrückgaben ==&lt;br /&gt;
[[glGetShaderInfoLog]] mit dem Argument ''shader''&lt;br /&gt;
&lt;br /&gt;
[[glGetShaderSource]] mit dem Argument ''shader''&lt;br /&gt;
&lt;br /&gt;
[[glIsShader]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
[[glCompileShader]], [[glCreateShader]], [[glDeleteShader]], [[glGetProgram]], [[glShaderSource]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GL|GetShader]]&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Diskussion:Tutorial_Abseits_eckiger_Welten&amp;diff=21052</id>
		<title>Diskussion:Tutorial Abseits eckiger Welten</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Diskussion:Tutorial_Abseits_eckiger_Welten&amp;diff=21052"/>
				<updated>2008-01-25T18:44:44Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: Die Seite wurde neu angelegt: Nachdem ich nun Tage damit verbracht habe herauszufinden warum meine Bezierfläche mit 7x10 Kontrollpunkten nicht funktioniert bzw einen GL_INVALID_VALUE Fehler erzeugt...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nachdem ich nun Tage damit verbracht habe herauszufinden warum meine Bezierfläche mit 7x10 Kontrollpunkten nicht funktioniert bzw einen GL_INVALID_VALUE Fehler erzeugt, wollte ich mal anmerken, dass es an GL_MAX_EVAL_ORDER liegt. Auf meinem Rechner mit einer 8800GTS sind es ganze 8. Wobei ich mal davon ausgehe, dass es am Treiber liegt und wenn ich die Berechnung im Tutorial richtig verstanden habe, wäre das eine Funktion 7. Grades?&lt;br /&gt;
&lt;br /&gt;
Kurzum. Ich fänd eine kleine Info wieviele Kontrollpunkte mindestens unterstützt werden im Tutorial für hilfreich.&lt;br /&gt;
--[[Benutzer:Damadmax|Damadmax]] 19:44, 25. Jan. 2008 (CET)&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=glEvalCoord&amp;diff=21039</id>
		<title>glEvalCoord</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=glEvalCoord&amp;diff=21039"/>
				<updated>2008-01-04T00:26:56Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: Link zum Tutorial korrigiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= glEvalCoord =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Name ==&lt;br /&gt;
'''glEvalCoord1d, glEvalCoord1f, glEvalCoord2d, glEvalCoord2f, glEvalCoord1dv, glEvalCoord1fv, glEvalCoord2dv, glEvalCoord2fv''' - werten die aktivierten ein- und zweidimensionalen Karten ([[glMap1]]/[[glMap2]]) aus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Delphi-Spezifikation ==&lt;br /&gt;
 procedure '''glEvalCoord1d'''(''u'': TGLdouble); &lt;br /&gt;
 procedure '''glEvalCoord1f'''(''u'': TGLfloat);&lt;br /&gt;
 procedure '''glEvalCoord2d'''(''u'': TGLdouble; ''v'': TGLdouble); &lt;br /&gt;
 procedure '''glEvalCoord2f'''(''u'': TGLfloat; ''v'': TGLfloat);&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; rules=&amp;quot;all&amp;quot;&lt;br /&gt;
! ''u'' &lt;br /&gt;
| Legt den Wert für die Gebietskoordinate (engl.: domain coordinate) ''u'' fest, bezüglich der Basisfunktion die vorher mit [[glMap1]] oder [[glMap2]] gesetzt wurde.&lt;br /&gt;
|-&lt;br /&gt;
! ''v'' &lt;br /&gt;
| Legt den Wert für die Gebietskoordinate ''v'' fest, bezüglich der Basisfunktion die vorher mit [[glMap2]] gesetzt wurde. Dieses Argument ist bei '''glEvalCoord1''' nicht vorhanden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Delphi-Spezifikation ==&lt;br /&gt;
 procedure '''glEvalCoord1dv'''(const ''u'': PGLdouble);  &lt;br /&gt;
 procedure '''glEvalCoord1fv'''(const ''u'': PGLfloat); &lt;br /&gt;
 procedure '''glEvalCoord2dv'''(const ''u'': PGLdouble); &lt;br /&gt;
 procedure '''glEvalCoord2fv'''(const ''u'': PGLfloat);&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; rules=&amp;quot;all&amp;quot;&lt;br /&gt;
! ''u'' &lt;br /&gt;
| Bestimmt einen Zeiger auf ein Feld welches entweder eine oder zwei Gebietskoordinaten enthält. Dier erste Koordinate repräsentiert immer ''u''. Die zweite Koordinate ist, falls vorhanden, ''v'' und wird nur bei den '''glEvalCoord2'''-Funktionen benötigt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Beschreibung == &lt;br /&gt;
{{Hinweis|Die Orginalspezifikation spricht von &amp;quot;Maps&amp;quot; also Karten. In der folgenden Beschreibung wird dieser Begriff durch &amp;quot;Bezierkurven&amp;quot; ersetzt. 2D-Maps entsprechen somit einem Raster/Fläche aus Bezierkurven.}}&lt;br /&gt;
&lt;br /&gt;
'''glEvalCoord1''' wertet die aktivierte eindemensionale Bezierkurve an der Stelle ''u'' aus. '''glEvalCoord2''' tut das selbe mit zweidimensionalen Bezierkurve unter Benutzung von zwei Gebietswerten, ''u'' und ''v''.&amp;lt;br&amp;gt;&lt;br /&gt;
''Bezierkurven werden mittels [[glMap1]] bzw. [[glMap2]] erstellt und durch [[glEnable]]/[[glDisable]] aktiviert und deaktiviert.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn eine der '''glEvalCoord''' Funktionen ausgeführt wird, werden alle momentan aktiven Bezierkurven, welche die entsprechende Dimension haben, ausgewertet. Anschließend ist es für jede ausgewertete Karte so, als ob der zugehörige GL-Befehl aufgerufen worden wäre. Dies bedeutet, dass&lt;br /&gt;
* wenn GL_MAP1_INDEX oder GL_MAP2_INDEX aktiviert wurde, wird ein [[glIndex]] Befehl simuliert.&lt;br /&gt;
* wenn GL_MAP1_COLOR oder GL_MAP2_COLOR aktiviert wurde, wird ein [[glColor]] Befehl simuliert.&lt;br /&gt;
* wenn GL_MAP1_NORMAL oder GL_MAP2_NORMAL aktiviert wurde, wird ein Normalenvektor berechnet.&lt;br /&gt;
* wenn eine der Texurfunktionen (GL_MAP1_TEXTURE_COORD_1, GL_MAP1_TEXTURE_COORD_2, GL_MAP1_TEXTURE_COORD_3, GL_MAP1_TEXTURE_COORD_4, GL_MAP2_TEXTURE_COORD_1, GL_MAP2_TEXTURE_COORD_2, GL_MAP2_TEXTURE_COORD_3, oder GL_MAP2_TEXTURE_COORD_4) aktiviert wurde, wird ein entsprechender [[glTexCoord]] Befehl simuliert.&lt;br /&gt;
&lt;br /&gt;
Die Farbe, Farbindex, Normale und Texturkoordinaten, werden jedes mal errechnet wenn die Berechunung für diese Werte aktiviert wurde (ansonsten werden die aktuellen Werte benutzt). Diese berechneten Werte überschreiben allerdings nicht die aktuelle Farbe, Farbindex, Normale oder Texturkoordiante.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das heißt, wenn [[glVertex]] Befehle mit '''glEvalCoord''' Befehlen durchsetzt sind, werden die Farbe, Normale und Texturkoordinaten die zu dem [[Vertex]] gehören nicht von den Werten beeinflußt, die durch die '''glEvalCoord''' Befehle erzeugt werden. Überschrieben werden diese Werte nur durch die dafür vorgesehen Befehle [[glColor]], [[glIndex]], [[glNormal]] und [[glTexCoord]].&lt;br /&gt;
&lt;br /&gt;
Es werden keine Simulationen für Bezierkurven durchgeführt die nicht aktiv sind. Wenn mehr als eine Texturauswertung für eine bestimmte Dimension (zum Beispiel GL_MAP2_TEXTURE_COORD_1 and GL_MAP2_TEXTURE_COORD_2) aktiviert wurde, dann wird nur die Auswertung der Bezierkurve ausgeführt, welche die größere Anzahl an Koordinaten produziert (In diesem Beispiel also GL_MAP2_TEXTURE_COORD_2). Ähnlich verhält es sich mit anderen Funktionen. Es gilt: &lt;br /&gt;
*GL_MAP1_VERTEX_4 dominiert GL_MAP1_VERTEX_3&lt;br /&gt;
*GL_MAP2_VERTEX_4 dominiert GL_MAP2_VERTEX_3&lt;br /&gt;
Wenn weder eine drei- noch eine vier-Komponenten Vertexmap für die entsprechende Dimension aktiviert ist, wird der '''glEvalCoord''' Befehl ignoriert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn die automatische [[Normale]]n-Generierung durch einen Aufruf von [[glEnable]] mit dem Token GL_AUTO_NORMAL aktiviert ist, erstellt '''glEvalCoord2''' Oberflächennormalen analytisch, unabhängig vom Inhalt oder der Aktivierung der GL_MAP2_NORMAL Karte. Wenn&lt;br /&gt;
&lt;br /&gt;
[[Bild:GlEvalCoord_LaTeX_Formel1.png|&amp;lt;nowiki&amp;gt;m = \frac{P_{p}}{P_{u}} \times \frac{P_{p}}{P_{v}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Dann ist die generierte normale n gleich&lt;br /&gt;
&lt;br /&gt;
[[Bild:GlEvalCoord_LaTeX_Formel2.png|&amp;lt;nowiki&amp;gt;n = \frac{-}{ \left \Vert m \right \| }&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Wenn die automatische Normalengenerierung deaktiviert wurde, wird die zugehörige Normalenkarte GL_MAP2_NORMAL, falls aktiviert, genutzt um eine Normale herzustellen. Wenn weder die automatische Generierung noch die Normalenkarte aktiviert sind, generiert '''glEvalCoord2''' keine Normalen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Zugehörige Wertrückgaben ==&lt;br /&gt;
[[glIsEnabled]] mit Token GL_MAP1_VERTEX_3&amp;lt;br&amp;gt;&lt;br /&gt;
[[glIsEnabled]] mit Token GL_MAP1_VERTEX_4&amp;lt;br&amp;gt;&lt;br /&gt;
[[glIsEnabled]] mit Token GL_MAP1_INDEX&amp;lt;br&amp;gt;&lt;br /&gt;
[[glIsEnabled]] mit Token GL_MAP1_COLOR_4&amp;lt;br&amp;gt;&lt;br /&gt;
[[glIsEnabled]] mit Token GL_MAP1_NORMAL&amp;lt;br&amp;gt;&lt;br /&gt;
[[glIsEnabled]] mit Token GL_MAP1_TEXTURE_COORD_1&amp;lt;br&amp;gt;&lt;br /&gt;
[[glIsEnabled]] mit Token GL_MAP1_TEXTURE_COORD_2&amp;lt;br&amp;gt;&lt;br /&gt;
[[glIsEnabled]] mit Token GL_MAP1_TEXTURE_COORD_3&amp;lt;br&amp;gt;&lt;br /&gt;
[[glIsEnabled]] mit Token GL_MAP1_TEXTURE_COORD_4&amp;lt;br&amp;gt;&lt;br /&gt;
[[glIsEnabled]] mit Token GL_MAP2_VERTEX_3&amp;lt;br&amp;gt;&lt;br /&gt;
[[glIsEnabled]] mit Token GL_MAP2_VERTEX_4&amp;lt;br&amp;gt;&lt;br /&gt;
[[glIsEnabled]] mit Token GL_MAP2_INDEX&amp;lt;br&amp;gt;&lt;br /&gt;
[[glIsEnabled]] mit Token GL_MAP2_COLOR_4&amp;lt;br&amp;gt;&lt;br /&gt;
[[glIsEnabled]] mit Token GL_MAP2_NORMAL&amp;lt;br&amp;gt;&lt;br /&gt;
[[glIsEnabled]] mit Token GL_MAP2_TEXTURE_COORD_1&amp;lt;br&amp;gt;&lt;br /&gt;
[[glIsEnabled]] mit Token GL_MAP2_TEXTURE_COORD_2&amp;lt;br&amp;gt;&lt;br /&gt;
[[glIsEnabled]] mit Token GL_MAP2_TEXTURE_COORD_3&amp;lt;br&amp;gt;&lt;br /&gt;
[[glIsEnabled]] mit Token GL_MAP2_TEXTURE_COORD_4&amp;lt;br&amp;gt;&lt;br /&gt;
[[glIsEnabled]] mit Token GL_AUTO_NORMAL &amp;lt;br&amp;gt;&lt;br /&gt;
[[glGetMap]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
[[glBegin]], [[glColor]], [[glEnable]], [[glEvalMesh]], [[glEvalPoint]], [[glIndex]], [[glMap1]], [[glMap2]], [[glMapGrid]], [[glNormal]], [[glTexCoord]], [[glVertex]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
*[http://wiki.delphigl.com/index.php/Tutorial_Abseits_eckiger_Welten DGL Tutorial: Abseits eckiger Welten]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GL|EvalCoord]]&lt;br /&gt;
 [[Kategorie:GL1.0]]&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax&amp;diff=20999</id>
		<title>Benutzer:Damadmax</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax&amp;diff=20999"/>
				<updated>2007-11-10T16:50:10Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Über mich=&lt;br /&gt;
''BETRETEN DER BAUSTELLE AUF EIGENE GEFAHR!''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Testanwendungen=&lt;br /&gt;
Die ich in den vergangenen Monaten geschrieben habe.&lt;br /&gt;
==Landschaft==&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax/monobook.css&amp;diff=20998</id>
		<title>Benutzer:Damadmax/monobook.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax/monobook.css&amp;diff=20998"/>
				<updated>2007-11-10T16:48:56Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: Die Seite wurde geleert.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax&amp;diff=20997</id>
		<title>Benutzer:Damadmax</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax&amp;diff=20997"/>
				<updated>2007-11-10T16:48:36Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Über mich =&lt;br /&gt;
''BETRETEN DER BAUSTELLE AUF EIGENE GEFAHR!''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Testanwendungen =&lt;br /&gt;
Die ich in den vergangenen Monaten geschrieben habe.&lt;br /&gt;
== Landschaft ==&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax&amp;diff=20996</id>
		<title>Benutzer:Damadmax</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax&amp;diff=20996"/>
				<updated>2007-11-10T16:48:21Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''BETRETEN DER BAUSTELLE AUF EIGENE GEFAHR!''&lt;br /&gt;
&lt;br /&gt;
= Über mich =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Testanwendungen =&lt;br /&gt;
Die ich in den vergangenen Monaten geschrieben habe.&lt;br /&gt;
== Landschaft ==&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax/monobook.css&amp;diff=20995</id>
		<title>Benutzer:Damadmax/monobook.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax/monobook.css&amp;diff=20995"/>
				<updated>2007-11-10T16:45:19Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: Die Seite wurde neu angelegt: table.toc {display:block;}&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;table.toc {display:block;}&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax&amp;diff=20994</id>
		<title>Benutzer:Damadmax</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Benutzer:Damadmax&amp;diff=20994"/>
				<updated>2007-11-10T16:40:05Z</updated>
		
		<summary type="html">&lt;p&gt;Damadmax: Die Seite wurde neu angelegt: ''BETRETEN DER BAUSTELLE AUF EIGENE GEFAHR!''  == Über mich ==   == Testanwendungen == Die ich in den vergangenen Monaten geschrieben habe. === Landschaft ===&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''BETRETEN DER BAUSTELLE AUF EIGENE GEFAHR!''&lt;br /&gt;
&lt;br /&gt;
== Über mich ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testanwendungen ==&lt;br /&gt;
Die ich in den vergangenen Monaten geschrieben habe.&lt;br /&gt;
=== Landschaft ===&lt;/div&gt;</summary>
		<author><name>Damadmax</name></author>	</entry>

	</feed>