Techniken und Algorithmen: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (Sonstiges)
K (Nützliche Helfer)
 
(12 dazwischenliegende Versionen von 8 Benutzern werden nicht angezeigt)
Zeile 2: Zeile 2:
  
 
== Was hier hinein gehört ==
 
== Was hier hinein gehört ==
Hier kommen, wie der Name vermuten lässt '''Erklärungen''' zu, in der 3D-Echtzeitprogrammierung verwendeten, '''Techniken''' hin. Z.B. verschiedene Schattentechniken, Bump-Mapping, etc.
+
Hier kommen, wie der Name vermuten lässt, '''Erklärungen''' zu in der 3D-Echtzeitprogrammierung verwendeten '''Techniken''' hin. Z.B. verschiedene Schattentechniken, Bump-Mapping, etc.
  
 
[[Hintergrundwissen]] gehört hier nicht rein. Sachen wie ''"was ist ein Tiefenpuffer und wofür ist er gut"'' haben hier nichts zu suchen.<br>
 
[[Hintergrundwissen]] gehört hier nicht rein. Sachen wie ''"was ist ein Tiefenpuffer und wofür ist er gut"'' haben hier nichts zu suchen.<br>
 
Sollte es für eine Technik/Thematik (siehe unten für Beispiel) mehrere "Lösungswege" geben, sollte eine kleine Überschrift eingefügt werden.
 
Sollte es für eine Technik/Thematik (siehe unten für Beispiel) mehrere "Lösungswege" geben, sollte eine kleine Überschrift eingefügt werden.
  
Wenn ihr einen Technik oder Algorithmus Artikel erstellt, so solltet ihr unter den Artikel ein
+
Wenn ihr einen Technik- oder Algorithmus-Artikel erstellt, so solltet ihr unter den Artikel ein
 
  <nowiki>[[Kategorie:Technik_oder_Algorithmus]]</nowiki>
 
  <nowiki>[[Kategorie:Technik_oder_Algorithmus]]</nowiki>
 
stellen. Damit wird der Artikel der  [[:Kategorie:Technik_oder_Algorithmus]] zugeordnet.
 
stellen. Damit wird der Artikel der  [[:Kategorie:Technik_oder_Algorithmus]] zugeordnet.
Falls dieser Artikel nicht nur erklärt was der Begriff bedeutet, sondern auch noch eine Anleitung ist, wie man die entsprechende Technik realisiert, so könnt ihr den Artikel auch noch der Kategorie [[:Kategorie:Anleitung|Anleitung]] zuweisen.
+
Falls dieser Artikel nicht nur erklärt, was der Begriff bedeutet, sondern auch noch eine Anleitung ist, wie man die entsprechende Technik realisiert, so könnt ihr den Artikel auch noch der Kategorie [[:Kategorie:Anleitung|Anleitung]] zuweisen.
  
 
== Übersicht ==
 
== Übersicht ==
Zeile 30: Zeile 30:
 
* [[Extensionausgabe]] (Ausgabe der unterstützten Extensions und sonstiger Eigenschaften)
 
* [[Extensionausgabe]] (Ausgabe der unterstützten Extensions und sonstiger Eigenschaften)
 
* [[Techniken_zur_Matrixinversion|Techniken zur Matrixinversion]]
 
* [[Techniken_zur_Matrixinversion|Techniken zur Matrixinversion]]
 +
* [[Render_Thread|Render Thread]] (Verwendung eines Render Threads)
  
 
=== Mathematisches ===
 
=== Mathematisches ===
Zeile 35: Zeile 36:
 
In dieser Rubrik findet ihr Code zum erzeugen von komplexen geometrischen Objekten, denn nicht immer ist die Kapselung die z.B. eine [[Quadrik]] bietet das was man sucht.  
 
In dieser Rubrik findet ihr Code zum erzeugen von komplexen geometrischen Objekten, denn nicht immer ist die Kapselung die z.B. eine [[Quadrik]] bietet das was man sucht.  
  
 +
* [[Würfel]]
 +
* [[Kugel]]
 +
* [[Zylinder]]
 +
* [[Paraboloid]]
 +
* [[Hyperboloid]]
 +
* [[Capsule]]
 +
* [[Scheibe]]
 +
* [[Kreis]]
 +
* [[Kuchenstück]]
 
* [[Zweifach_Parametrisierte_Geometrie|Geometrie durch zwei Parameter]]
 
* [[Zweifach_Parametrisierte_Geometrie|Geometrie durch zwei Parameter]]
 
* [[Geometrie_durch_Kurven|Geometrie durch Kurven]]
 
* [[Geometrie_durch_Kurven|Geometrie durch Kurven]]
 
* [[Rotationskörper]]
 
* [[Rotationskörper]]
* [[Kreis]]
 
* [[Kuchenstück]]
 
* [[Kugel]]
 
* [[Scheibe]]
 
* [[Würfel]]
 
* [[Zylinder]]
 
  
 
==== Rechenhilfen ====
 
==== Rechenhilfen ====
Zeile 49: Zeile 53:
  
 
=== Licht und Schatten ===
 
=== Licht und Schatten ===
Das Beleuchtungsmodell von OpenGL besitzt von Haus aus keine Möglichkeit zur Darstellung von Schatten (nicht zuletzt weil es dafür immernoch keine einheitliche Methode gibt), allerdings haben sich über die Jahre hinweg einige Techniken mehr oder weniger durchgesetzt :<br><ul>
+
Das Beleuchtungsmodell von OpenGL besitzt von Haus aus keine Möglichkeit zur Darstellung von Schatten (nicht zuletzt weil es dafür immernoch keine einheitliche Methode gibt), allerdings haben sich über die Jahre hinweg einige Techniken mehr oder weniger durchgesetzt :
<li>[[Lightmaps]]</li>
+
* [[Lightmaps]]
<li>[[Projezierte Shadowmaps]] / [[Projezierte Textur]]en</li>
+
* [[Projezierte Shadowmaps]] / [[Projezierte Textur]]en
<li>[[Volumetrische Stencilschatten]]{{excIcon}}</li>
+
* [[Volumetrische Stencilschatten]]{{excIcon}}
<li>[[Silhouette]] {{icpIcon}}</li>
+
* [[Silhouette]] {{icpIcon}}
<li>[[Bloom(pseudo-HDR)]] {{icpIcon}}</li></ul>
+
* [[Bloom(pseudo-HDR)]] {{icpIcon}}
  
 
=== Statische Umgebungen ===
 
=== Statische Umgebungen ===
Besonders in Aussenszenen ist es oft nötig dem Betrachter den Eindruck zu vermitteln, er befinde sich in einer unendlich großen Umgebung. Da man dies jedoch schlecht über speziell dafür erstellte Geometrie lösen kann (weil das schlichtweg zu viel Aufwand und zu leistungsintensiv wäre), haben sich einige Techniken eingebürgert, mit denen man dem Betrachter eine solche unendliche Landschaft mit  wenig Geometrie und einigen Tricks vorgaugeln kann :<br><ul>
+
Besonders in Aussenszenen ist es oft nötig dem Betrachter den Eindruck zu vermitteln, er befinde sich in einer unendlich großen Umgebung. Da man dies jedoch schlecht über speziell dafür erstellte Geometrie lösen kann (weil das schlichtweg zu viel Aufwand und zu leistungsintensiv wäre), haben sich einige Techniken eingebürgert, mit denen man dem Betrachter eine solche unendliche Landschaft mit  wenig Geometrie und einigen Tricks vorgaugeln kann :
<li>[[Skyboxen]]</li>
+
* [[Skyboxen]]
<li>[[Skydome]]</li>
+
* [[Skydome]]
<li>[[Skysphere]]</li>
+
* [[Skysphere]]
</ul>
+
 
  
  
 
=== Dynamische Effekte ===
 
=== Dynamische Effekte ===
Das Auge ißt bekanntlich mit. Auch bei 3D Anwendungen, vor allem in der Unterhaltungsindustrie, spielen gigantische Effekte, die dem User ein "Ohhh" und "Ahhh" und vor allem "Wow!" entlocken eine immer größere Rolle. Wie man solche Effekte am besten implementiert finden Sie in den Artikeln dieses Abschnitts.<br>
+
Das Auge isst bekanntlich mit. Auch bei 3D Anwendungen, vor allem in der Unterhaltungsindustrie, spielen gigantische Effekte, die dem User ein "Ohhh" und "Ahhh" und vor allem "Wow!" entlocken eine immer größere Rolle. Wie man solche Effekte am besten implementiert finden Sie in den Artikeln dieses Abschnitts.<br>
 
(Befassen Sie sich zuerst mit den Grundlagen von [[Partikelsysteme|Partikelsystemen]].)
 
(Befassen Sie sich zuerst mit den Grundlagen von [[Partikelsysteme|Partikelsystemen]].)
<ul>
+
* [[Explosionen]] (Allseits gern gesehen. Außer in direkter Nachbarschaft)
<li>[[Explosionen]] (Allseits gern gesehen. Außer in direkter Nachbarschaft)</li>
+
* [[Lichtsäulen]] (Bekannt für die magischen Momente in diversen Rollenspielen.)
<li>[[Lichtsäulen]] (Bekannt für die magischen Momente in diversen Rollenspielen.) </li>
+
* [[Partikelsysteme]] {{excIcon}} (Grundlage für viele Effekte)
<li>[[Partikelsysteme]] {{excIcon}} (Grundlage für viele Effekte) </li>
+
** [[GLSL Partikel]] (Partikelsystem auf der GPU)
</ul>
+
** [[GLSL Partikel 2]] (Partikelsystem auf der GPU mit Shader Model 4.0)
  
 
=== Natürliche Phänomene ===
 
=== Natürliche Phänomene ===
Ziel vieler Echtzeit 3D-Anwendung (auch wenn genau der gegenteilige Trend manchmal interessant sein dürfte) ist eine zumindest optische Annäherung an die Realität, also Szenen möglichst "naturgetreu" (auch urbane Szenen können "naturgetreu" sein, auch wenn diese wenig natürlich sind) darzustellen. Dazu gehören auch natürliche Phänomene, wie z.B. realistisch spiegelndes Wasser, Wetterbedingungen (Regen, Schnee, Nebel), Feuer, etc. Oft gibt es für ein natürliches Phänomen recht fortgeschrittene Umsetzungsmöglichkeiten, manchmal liegt die Lösung aber auch recht nahe :<br><ul>
+
Ziel vieler Echtzeit 3D-Anwendung (auch wenn genau der gegenteilige Trend manchmal interessant sein dürfte) ist eine zumindest optische Annäherung an die Realität, also Szenen möglichst "naturgetreu" (auch urbane Szenen können "naturgetreu" sein, auch wenn diese wenig natürlich sind) darzustellen. Dazu gehören auch natürliche Phänomene, wie z.B. realistisch spiegelndes Wasser, Wetterbedingungen (Regen, Schnee, Nebel), Feuer, etc. Oft gibt es für ein natürliches Phänomen recht fortgeschrittene Umsetzungsmöglichkeiten, manchmal liegt die Lösung aber auch recht nahe :
<li>[[Prozeduale Bäume|Bäume]]</li>
+
* [[Prozeduale Bäume|Bäume]]
<li>[[Blitz]]</li>
+
* [[Blitz]]
<li>[[Feuer]]</li>
+
* [[Feuer]]
<li>[[Himmel]]</li>
+
* [[Himmel]]
<li>[[Nebel]]</li>
+
* [[Nebel]]
<li>[[Staub]]</li>
+
* [[Staub]]
<li>[[Wasser]]</li>
+
* [[Tiefenunschärfe]]
<li>[[Wettereffekt]]e (Regen, Schnee)</li>
+
* [[Wasser]]
<li>[[Wolken]] (als Ergänzung zu den statischen Umgebungen)</li>
+
* [[Wettereffekt]]e (Regen, Schnee)
</ul>
+
* [[Wolken]] (als Ergänzung zu den statischen Umgebungen)
 
 
  
 
=== Raumunterteilungstechniken ===
 
=== Raumunterteilungstechniken ===
Moderne 3D-Anwendungen müssen immer größere und komplexere 3D-Umgebungen darstellen, wobei oft jedoch große Teile eben dieser nicht sichtbar sind, aber ohne entsprechende Optimierungen trotzdem über den Datenbus geschoben (und von der Grafikkarte geclippt) werden müssen. Deshalb finden diverse Raumunterteilungstechniken (die u.a. aus anderen Bereichen stammen) in modernen 3D-Programmen Anwendung :<br>
+
Moderne 3D-Anwendungen müssen immer größere und komplexere 3D-Umgebungen darstellen, wobei oft jedoch große Teile eben dieser nicht sichtbar sind, aber ohne entsprechende Optimierungen trotzdem über den Datenbus geschoben (und von der Grafikkarte geclippt) werden müssen. Deshalb finden diverse Raumunterteilungstechniken (die u.a. aus anderen Bereichen stammen) in modernen 3D-Programmen Anwendung :
<ul>
+
* [[BSP-Bäume]] (Binary Space Partitioning = Binäre Raumunterteilung)
<li>[[BSP-Bäume]] (Binary Space Partitioning = Binäre Raumunterteilung)</li>
+
* [[Quadtree]]s
<li>[[Octree]]s (Dreidimensionale Erweiterung eines Quadtrees)</li>
+
* [[Octree]]s (Dreidimensionale Erweiterung eines [[Quadtree]]s)
<li>[[Portal]]e (Logische Sichtbegrenzung an Durchgängen)</li>
+
* [[Portal]]e (Logische Sichtbegrenzung an Durchgängen)
<li>[[PVS]] (Potentially Visible Sets = Mögliche sichtbare Sets)</li>
+
* [[PVS]] (Potentially Visible Sets = Mögliche sichtbare Sets)
</ul>
 
 
 
  
 
=== Terrain Darstellung ===
 
=== Terrain Darstellung ===
Zeile 117: Zeile 118:
 
*Speicherplatz auf der Festplatte zu sparen
 
*Speicherplatz auf der Festplatte zu sparen
 
*den Grafikern die Arbeit zu erleichtern (und teilweise sogar erst zu ermöglichen)
 
*den Grafikern die Arbeit zu erleichtern (und teilweise sogar erst zu ermöglichen)
Die Algorithmen und Möglichkeiten die sich dabei bieten sind hier aufgelistet:<br><ul>
+
Die Algorithmen und Möglichkeiten die sich dabei bieten sind hier aufgelistet:
<li>[[Perlin Noise]] {{excIcon}} (Algorithmus für Texturen, Landschaft und vieles mehr)</li>
+
* [[Perlin Noise]] {{excIcon}} (Algorithmus für Texturen, Landschaft und vieles mehr)
<li>[[L-Systems]] (aus wenig mach viel, Landschaftsgenerierung, Baumgenerierung, ...)</li>
+
* [[L-Systems]] (aus wenig mach viel, Landschaftsgenerierung, Baumgenerierung, ...)
<li>[[Fault Formation]] (primär zur Landschaftsgenerierung)</li>
+
* [[Fault Formation]] (primär zur Landschaftsgenerierung)
<li>[[Prozeduale Landschaft]] (Spezielle Hinweise und Techniken zur Landschaftsgenerierung</li>
+
* [[Prozeduale Landschaft]] (Spezielle Hinweise und Techniken zur Landschaftsgenerierung
<li>[[Midpoint Displacement]] (primär zur Landschaftsgenerierung)</li>
+
* [[Midpoint Displacement]] (primär zur Landschaftsgenerierung)
<li>[[Hügel_Algorithmen]] (primär zur Landschaftsgenerierung)</li>
+
* [[Hügel_Algorithmen]] (primär zur Landschaftsgenerierung)
<li>[[Prozeduale Bäume]] (Techniken und Algorithmen speziell zur Baumgenerierung)</li>
+
* [[Prozeduale Bäume]] (Techniken und Algorithmen speziell zur Baumgenerierung)
<li>[[Prozeduale Texturen]] (Spezielle Hinweise zu Wasser, Lava und ähnliches)</li>
+
* [[Prozeduale Texturen]] (Spezielle Hinweise zu Wasser, Lava und ähnliches)
</ul>
 
  
 
=== Pathfinding ===
 
=== Pathfinding ===
 
Pathfinding ist einer der grundlegenden Bereiche der Künstlichen Intelligenz, und aus diesem Grund für Spiele mit Computergegnern meistens unumgänglich.
 
Pathfinding ist einer der grundlegenden Bereiche der Künstlichen Intelligenz, und aus diesem Grund für Spiele mit Computergegnern meistens unumgänglich.
<ul>
+
* [[Tiefensuche]]
<li>[[Tiefensuche]]</li>
+
* [[Breitensuche]]
<li>[[Breitensuche]]</li>
+
* [[A-Stern]]
<li>[[A-Stern]]</li>
+
* [[Dijkstra]]
<li>[[Dijkstra]]</li>
+
* [[Floyd Warshall]]
<li>[[Floyd Warshall]]</li>
+
* [[Navigation Meshes]]
<li>[[Navigation Meshes]]</li>
+
* [[Pathfinding-Level of Detail]]
<li>[[Pathfinding-Level of Detail]]</li>
 
</ul>
 
  
 
=== Sonstiges ===
 
=== Sonstiges ===
 
 
* [[Bilder als Ressourcen]] speichern und laden
 
* [[Bilder als Ressourcen]] speichern und laden
 
* [[Blenderscript|Exportscript für Blender]]
 
* [[Blenderscript|Exportscript für Blender]]
 
* [[Blenderexporter|Blenderexport ausführliche Anleitung]]
 
* [[Blenderexporter|Blenderexport ausführliche Anleitung]]
 +
* [[GUI_Leitfaden|Leitfaden Graphisches Nutzerinterface]]
 
* [[Interpolation]]
 
* [[Interpolation]]
 
* [[Lokalisierung]]
 
* [[Lokalisierung]]
Zeile 152: Zeile 150:
 
* [[Tesselierung|Polygone tesselieren]]
 
* [[Tesselierung|Polygone tesselieren]]
 
* [[TGA Bilder laden]]
 
* [[TGA Bilder laden]]
 +
* [[Verfügbare Auflösungen]] anzeigen
 
* [[Zielen auf bewegte Gegner]]
 
* [[Zielen auf bewegte Gegner]]
  
 
== Externe Links ==
 
== Externe Links ==
 
Weitere Links zum Thema "Effekte unter OpenGL" findet ihr in der [[Link]]-Sammlung unter [[Link#Effekte_und_Techniken_mit_OpenGL|Effekte und Techniken mit OpenGL]].
 
Weitere Links zum Thema "Effekte unter OpenGL" findet ihr in der [[Link]]-Sammlung unter [[Link#Effekte_und_Techniken_mit_OpenGL|Effekte und Techniken mit OpenGL]].

Aktuelle Version vom 8. Juni 2014, 14:22 Uhr

Die Artikel dieses Wiki-Abschnittes sind im Gegensatz zu den Tutorials meist kürzer. Dafür enthalten sie mitunter sehr viel Code der direkt verwendet werden, oder als Grundlage für die eigene Arbeit dienen kann.

Was hier hinein gehört

Hier kommen, wie der Name vermuten lässt, Erklärungen zu in der 3D-Echtzeitprogrammierung verwendeten Techniken hin. Z.B. verschiedene Schattentechniken, Bump-Mapping, etc.

Hintergrundwissen gehört hier nicht rein. Sachen wie "was ist ein Tiefenpuffer und wofür ist er gut" haben hier nichts zu suchen.
Sollte es für eine Technik/Thematik (siehe unten für Beispiel) mehrere "Lösungswege" geben, sollte eine kleine Überschrift eingefügt werden.

Wenn ihr einen Technik- oder Algorithmus-Artikel erstellt, so solltet ihr unter den Artikel ein

[[Kategorie:Technik_oder_Algorithmus]]

stellen. Damit wird der Artikel der Kategorie:Technik_oder_Algorithmus zugeordnet. Falls dieser Artikel nicht nur erklärt, was der Begriff bedeutet, sondern auch noch eine Anleitung ist, wie man die entsprechende Technik realisiert, so könnt ihr den Artikel auch noch der Kategorie Anleitung zuweisen.

Übersicht

Sammlungen

Nützliche Helfer

In dieser Rubrik findet sich all das, was ein OpenGL/Graphikprogrammierer immer brauch oder schnell mal zur Hand haben muss:

Mathematisches

Geometrie Objekte

In dieser Rubrik findet ihr Code zum erzeugen von komplexen geometrischen Objekten, denn nicht immer ist die Kapselung die z.B. eine Quadrik bietet das was man sucht.

Rechenhilfen

Licht und Schatten

Das Beleuchtungsmodell von OpenGL besitzt von Haus aus keine Möglichkeit zur Darstellung von Schatten (nicht zuletzt weil es dafür immernoch keine einheitliche Methode gibt), allerdings haben sich über die Jahre hinweg einige Techniken mehr oder weniger durchgesetzt :

Statische Umgebungen

Besonders in Aussenszenen ist es oft nötig dem Betrachter den Eindruck zu vermitteln, er befinde sich in einer unendlich großen Umgebung. Da man dies jedoch schlecht über speziell dafür erstellte Geometrie lösen kann (weil das schlichtweg zu viel Aufwand und zu leistungsintensiv wäre), haben sich einige Techniken eingebürgert, mit denen man dem Betrachter eine solche unendliche Landschaft mit wenig Geometrie und einigen Tricks vorgaugeln kann :


Dynamische Effekte

Das Auge isst bekanntlich mit. Auch bei 3D Anwendungen, vor allem in der Unterhaltungsindustrie, spielen gigantische Effekte, die dem User ein "Ohhh" und "Ahhh" und vor allem "Wow!" entlocken eine immer größere Rolle. Wie man solche Effekte am besten implementiert finden Sie in den Artikeln dieses Abschnitts.
(Befassen Sie sich zuerst mit den Grundlagen von Partikelsystemen.)

Natürliche Phänomene

Ziel vieler Echtzeit 3D-Anwendung (auch wenn genau der gegenteilige Trend manchmal interessant sein dürfte) ist eine zumindest optische Annäherung an die Realität, also Szenen möglichst "naturgetreu" (auch urbane Szenen können "naturgetreu" sein, auch wenn diese wenig natürlich sind) darzustellen. Dazu gehören auch natürliche Phänomene, wie z.B. realistisch spiegelndes Wasser, Wetterbedingungen (Regen, Schnee, Nebel), Feuer, etc. Oft gibt es für ein natürliches Phänomen recht fortgeschrittene Umsetzungsmöglichkeiten, manchmal liegt die Lösung aber auch recht nahe :

Raumunterteilungstechniken

Moderne 3D-Anwendungen müssen immer größere und komplexere 3D-Umgebungen darstellen, wobei oft jedoch große Teile eben dieser nicht sichtbar sind, aber ohne entsprechende Optimierungen trotzdem über den Datenbus geschoben (und von der Grafikkarte geclippt) werden müssen. Deshalb finden diverse Raumunterteilungstechniken (die u.a. aus anderen Bereichen stammen) in modernen 3D-Programmen Anwendung :

  • BSP-Bäume (Binary Space Partitioning = Binäre Raumunterteilung)
  • Quadtrees
  • Octrees (Dreidimensionale Erweiterung eines Quadtrees)
  • Portale (Logische Sichtbegrenzung an Durchgängen)
  • PVS (Potentially Visible Sets = Mögliche sichtbare Sets)

Terrain Darstellung

In vielen 3D Anwendungen, vom Flugsimulator über Egoshooter bis zum Strategiespiel, muss die Umgebung visualisiert werden. Welche Techniken bei der Speicherung (siehe auch Raumunterteilungstechniken), Bildaufbau und Texturierung zum Einsatz kommen, findet ihr hier:

Level of Detail Algorithmen für Landschaften
Texturierung

Prozeduale Grafiken

Prozeduale Grafiken werden häufig verwendet um

  • eine vielfältige Umgebung zu gewährleisten
  • Speicherplatz auf der Festplatte zu sparen
  • den Grafikern die Arbeit zu erleichtern (und teilweise sogar erst zu ermöglichen)

Die Algorithmen und Möglichkeiten die sich dabei bieten sind hier aufgelistet:

Pathfinding

Pathfinding ist einer der grundlegenden Bereiche der Künstlichen Intelligenz, und aus diesem Grund für Spiele mit Computergegnern meistens unumgänglich.

Sonstiges

Externe Links

Weitere Links zum Thema "Effekte unter OpenGL" findet ihr in der Link-Sammlung unter Effekte und Techniken mit OpenGL.