Lazarus - OpenGL 3.3 Tutorial: Unterschied zwischen den Versionen
Zeile 1: | Zeile 1: | ||
=Lazarus - OpenGL 3.3 Tutorial= | =Lazarus - OpenGL 3.3 Tutorial= | ||
==Download== | ==Download== | ||
− | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial alle Sourcen] | + | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial alle Sourcen (github)] |
− | * [http://mathias1000.bplaced.net/Tutorial_HTML/OpenGL_3.3/source.zip alle Sourcen] | + | * [http://mathias1000.bplaced.net/Tutorial_HTML/OpenGL_3.3/source.zip alle Sourcen (HTML)] |
== Einrichten und Einstieg == | == Einrichten und Einstieg == | ||
{|{{Prettytable_B1}} width="100%" | {|{{Prettytable_B1}} width="100%" | ||
Zeile 17: | Zeile 17: | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/01_-_Einrichten_und_Einstieg/00_-_Lazarus_fuer_OpenGL_einrichten source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Einrichten und Einstieg - Context erzeugen|Context erzeugen]] | ![[Lazarus - OpenGL 3.3 Tutorial - Einrichten und Einstieg - Context erzeugen|Context erzeugen]] | ||
Zeile 25: | Zeile 26: | ||
Das OpenGL etwas auf den Bildschirm ausgeben kann, wird ein '''Context''', Zeichenfläche gebraucht. | Das OpenGL etwas auf den Bildschirm ausgeben kann, wird ein '''Context''', Zeichenfläche gebraucht. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/01_-_Einrichten_und_Einstieg/02_-_Context_erzeugen source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Einrichten und Einstieg - VAO - Daten laden|VAO - Daten laden]] | ![[Lazarus - OpenGL 3.3 Tutorial - Einrichten und Einstieg - VAO - Daten laden|VAO - Daten laden]] | ||
Zeile 33: | Zeile 35: | ||
Das OpenGL weis, was ausgegeben werden muss, speichert man die Eckpunkte einer Mesh in eine Vektor-Array. | Das OpenGL weis, was ausgegeben werden muss, speichert man die Eckpunkte einer Mesh in eine Vektor-Array. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/01_-_Einrichten_und_Einstieg/04_-_VAO_-_Daten_laden source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Einrichten und Einstieg - Erster Shader|Erster Shader]] | ![[Lazarus - OpenGL 3.3 Tutorial - Einrichten und Einstieg - Erster Shader|Erster Shader]] | ||
Zeile 42: | Zeile 45: | ||
Somit stehen einem fast unendliche Effekte zu Verfügung. | Somit stehen einem fast unendliche Effekte zu Verfügung. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/01_-_Einrichten_und_Einstieg/06_-_Erster_Shader source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Einrichten und Einstieg - Polygonmodus|Polygonmodus]] | ![[Lazarus - OpenGL 3.3 Tutorial - Einrichten und Einstieg - Polygonmodus|Polygonmodus]] | ||
Zeile 50: | Zeile 54: | ||
Die Dreiecke/Linien können als Eckpunkte, Drahtgitter oder Vollflächig ausgegeben werden. | Die Dreiecke/Linien können als Eckpunkte, Drahtgitter oder Vollflächig ausgegeben werden. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/01_-_Einrichten_und_Einstieg/08_-_Polygonmodus source] | ||
|- | |- | ||
|} | |} | ||
Zeile 66: | Zeile 71: | ||
Was ist ein Shader und wie lädt man ihn in die Grafikkarte. | Was ist ein Shader und wie lädt man ihn in die Grafikkarte. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/02_-_Shader/00_-_Einleitung_und_laden_der_Shader source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Shader - Einfachster Shader|Einfachster Shader]] | ![[Lazarus - OpenGL 3.3 Tutorial - Shader - Einfachster Shader|Einfachster Shader]] | ||
Zeile 74: | Zeile 80: | ||
Die minimalste Version eines Shaders. | Die minimalste Version eines Shaders. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/02_-_Shader/02_-_Einfachster_Shader source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Shader - Uniform Variablen|Uniform Variablen]] | ![[Lazarus - OpenGL 3.3 Tutorial - Shader - Uniform Variablen|Uniform Variablen]] | ||
Zeile 82: | Zeile 89: | ||
Wie kann ich den Ablauf des Shaders von aussen beeinflussen. | Wie kann ich den Ablauf des Shaders von aussen beeinflussen. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/02_-_Shader/04_-_Uniform_Variablen source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Shader - Erste Bewegung|Erste Bewegung]] | ![[Lazarus - OpenGL 3.3 Tutorial - Shader - Erste Bewegung|Erste Bewegung]] | ||
Zeile 90: | Zeile 98: | ||
Wie bewege ich eine Mesh im Shader. | Wie bewege ich eine Mesh im Shader. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/02_-_Shader/06_-_Erste_Bewegung source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Shader - Mehrere Shader|Mehrere Shader]] | ![[Lazarus - OpenGL 3.3 Tutorial - Shader - Mehrere Shader|Mehrere Shader]] | ||
Zeile 98: | Zeile 107: | ||
Wie kann ich verschiedene Shader benutzen, da man nicht auf allen Meshes die gleichen Efffekte will. | Wie kann ich verschiedene Shader benutzen, da man nicht auf allen Meshes die gleichen Efffekte will. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/02_-_Shader/08_-_Mehrere_Shader source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Shader - Schleifen|Schleifen]] | ![[Lazarus - OpenGL 3.3 Tutorial - Shader - Schleifen|Schleifen]] | ||
Zeile 106: | Zeile 116: | ||
Im Shader kann man auch verschiedene Abläufe steuern, die if-Schleife. | Im Shader kann man auch verschiedene Abläufe steuern, die if-Schleife. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/02_-_Shader/10_-_Schleifen source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Shader - Geometrie Shader|Geometrie Shader]] | ![[Lazarus - OpenGL 3.3 Tutorial - Shader - Geometrie Shader|Geometrie Shader]] | ||
Zeile 114: | Zeile 125: | ||
Ein Zusatz-Shader, der zB. Vektoren verdoppeln kann. | Ein Zusatz-Shader, der zB. Vektoren verdoppeln kann. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/02_-_Shader/12_-_Geometrie_Shader source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Shader - Punkte verschieden darstellen|Punkte verschieden darstellen]] | ![[Lazarus - OpenGL 3.3 Tutorial - Shader - Punkte verschieden darstellen|Punkte verschieden darstellen]] | ||
Zeile 122: | Zeile 134: | ||
Man kann einen Punkt auf verschiedene Arten darstellen, mit dem Shader eine einfache Sache. | Man kann einen Punkt auf verschiedene Arten darstellen, mit dem Shader eine einfache Sache. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/02_-_Shader/14_-_Punkte_verschieden_darstellen source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Shader - Shader Mandelbrot|Shader Mandelbrot]] | ![[Lazarus - OpenGL 3.3 Tutorial - Shader - Shader Mandelbrot|Shader Mandelbrot]] | ||
Zeile 130: | Zeile 143: | ||
Mit dem Shader kann man auch ganze Fraktale berechnen. | Mit dem Shader kann man auch ganze Fraktale berechnen. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/02_-_Shader/16_-_Shader_Mandelbrot source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Shader - Wichtige Funktionen|Wichtige Funktionen]] | ![[Lazarus - OpenGL 3.3 Tutorial - Shader - Wichtige Funktionen|Wichtige Funktionen]] | ||
Zeile 135: | Zeile 149: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Shader - Wichtige Funktionen.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Shader - Wichtige Funktionen.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/02_-_Shader/18_-_Wichtige_Funktionen source] | ||
|- | |- | ||
|} | |} | ||
Zeile 150: | Zeile 165: | ||
Wie gelangen die Daten der Mesh in die Grafikkarte. | Wie gelangen die Daten der Mesh in die Grafikkarte. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/03_-_Vertex-Puffer/00_-_Einfachster_Vertex-Puffer source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Mehrere Vertex-Puffer, Mehrarbige Mesh|Mehrere Vertex-Puffer, Mehrarbige Mesh]] | ![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Mehrere Vertex-Puffer, Mehrarbige Mesh|Mehrere Vertex-Puffer, Mehrarbige Mesh]] | ||
Zeile 158: | Zeile 174: | ||
Die Vector-Daten können mehr enthalten als nur die Koordinaten, hier sind es die Farben der Face. | Die Vector-Daten können mehr enthalten als nur die Koordinaten, hier sind es die Farben der Face. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/03_-_Vertex-Puffer/02_-_Mehrere_Vertex-Puffer,_Mehrarbige_Mesh source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Vertex-Puffer in 2D|Vertex-Puffer in 2D]] | ![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Vertex-Puffer in 2D|Vertex-Puffer in 2D]] | ||
Zeile 166: | Zeile 183: | ||
Andere Vertex-Daten anstelle von 3D. | Andere Vertex-Daten anstelle von 3D. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/03_-_Vertex-Puffer/04_-_Vertex-Puffer_in_2D source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Nur eine Array|Nur eine Array]] | ![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Nur eine Array|Nur eine Array]] | ||
Zeile 174: | Zeile 192: | ||
Man kann Koordianten, Farben, etc., alles in einen Puffer ablegen. | Man kann Koordianten, Farben, etc., alles in einen Puffer ablegen. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/03_-_Vertex-Puffer/06_-_Nur_eine_Array source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Vertex-Daten zur Laufzeit modifizieren|Vertex-Daten zur Laufzeit modifizieren]] | ![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Vertex-Daten zur Laufzeit modifizieren|Vertex-Daten zur Laufzeit modifizieren]] | ||
Zeile 182: | Zeile 201: | ||
Man kann die Vertex-Daten zu Laufzeit modifizieren und neu in die Grafikkarte laden. | Man kann die Vertex-Daten zu Laufzeit modifizieren und neu in die Grafikkarte laden. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/03_-_Vertex-Puffer/08_-_Vertex-Daten_zur_Laufzeit_modifizieren source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Shapes (Dreiecke)|Shapes (Dreiecke)]] | ![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Shapes (Dreiecke)|Shapes (Dreiecke)]] | ||
Zeile 190: | Zeile 210: | ||
Man kann die Dreiecke auch zur einer Strip oder Fan zusamenfügen, dies spart Platz im VRAM. | Man kann die Dreiecke auch zur einer Strip oder Fan zusamenfügen, dies spart Platz im VRAM. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/03_-_Vertex-Puffer/10_-_Shapes_(Dreiecke) source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Shapes (Linien und Punkte)|Shapes (Linien und Punkte)]] | ![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Shapes (Linien und Punkte)|Shapes (Linien und Punkte)]] | ||
Zeile 199: | Zeile 220: | ||
'''GL_QUAD''', '''GL_POLYGON''', so wie im alten OpenGL, gibt es '''nicht''' mehr. | '''GL_QUAD''', '''GL_POLYGON''', so wie im alten OpenGL, gibt es '''nicht''' mehr. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/03_-_Vertex-Puffer/12_-_Shapes_(Linien_und_Punkte) source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - DrawArrays|DrawArrays]] | ![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - DrawArrays|DrawArrays]] | ||
Zeile 207: | Zeile 229: | ||
Man kann auch nur einen Teil einer Vertex-Array zeichnen. | Man kann auch nur einen Teil einer Vertex-Array zeichnen. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/03_-_Vertex-Puffer/14_-_DrawArrays source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Indices|Indices]] | ![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Indices|Indices]] | ||
Zeile 215: | Zeile 238: | ||
Man kann auch eine Liste erstellen und die Reihenfolge der Vertex-Daten selbst betimmen. | Man kann auch eine Liste erstellen und die Reihenfolge der Vertex-Daten selbst betimmen. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/03_-_Vertex-Puffer/16_-_Indices source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Index-Puffer|Index-Puffer]] | ![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Index-Puffer|Index-Puffer]] | ||
Zeile 223: | Zeile 247: | ||
Auch die Liste der Punkte (Indizien), kann man in einem Puffer ablegen. | Auch die Liste der Punkte (Indizien), kann man in einem Puffer ablegen. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/03_-_Vertex-Puffer/18_-_Index-Puffer source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Index-Puffer dynamisch|Index-Puffer dynamisch]] | ![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Index-Puffer dynamisch|Index-Puffer dynamisch]] | ||
Zeile 231: | Zeile 256: | ||
Auch der Indizien-Puffer kann man zur Laufzeit modifizieren. | Auch der Indizien-Puffer kann man zur Laufzeit modifizieren. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/03_-_Vertex-Puffer/20_-_Index-Puffer_dynamisch source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Vertex-Puffer auslesen|Vertex-Puffer auslesen]] | ![[Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Vertex-Puffer auslesen|Vertex-Puffer auslesen]] | ||
Zeile 239: | Zeile 265: | ||
Ein Vertex-Puffer kann man auch von der Grafikkarte wieder auslesen. | Ein Vertex-Puffer kann man auch von der Grafikkarte wieder auslesen. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/03_-_Vertex-Puffer/22_-_Vertex-Puffer_auslesen source] | ||
|- | |- | ||
|} | |} | ||
Zeile 254: | Zeile 281: | ||
Mit eine 4x4 Matrix, kann man sämtliche Bewegungen im Raum darstellen. Verschiebung, Drehung, Skalierung und sogar Perspektive ist mit dieser Matrix möglich. | Mit eine 4x4 Matrix, kann man sämtliche Bewegungen im Raum darstellen. Verschiebung, Drehung, Skalierung und sogar Perspektive ist mit dieser Matrix möglich. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/04_-_Matrix/00_-_Was_ist_eine_Matrix source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Matrix - Matrix Rotieren|Matrix Rotieren]] | ![[Lazarus - OpenGL 3.3 Tutorial - Matrix - Matrix Rotieren|Matrix Rotieren]] | ||
Zeile 262: | Zeile 290: | ||
Wie drehe ich eine Mesh mit Hilfe einer Matrix. | Wie drehe ich eine Mesh mit Hilfe einer Matrix. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/04_-_Matrix/02_-_Matrix_Rotieren source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Matrix - Matrix Verschieben und Multiplizieren|Matrix Verschieben und Multiplizieren]] | ![[Lazarus - OpenGL 3.3 Tutorial - Matrix - Matrix Verschieben und Multiplizieren|Matrix Verschieben und Multiplizieren]] | ||
Zeile 270: | Zeile 299: | ||
Verschiedene Matrizen können multiplizert werden, soomit sind mehrere Bewegungen der Mesh möglich. | Verschiedene Matrizen können multiplizert werden, soomit sind mehrere Bewegungen der Mesh möglich. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/04_-_Matrix/04_-_Matrix_Verschieben_und_Multiplizieren source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Matrix - Kleines Planetarium|Kleines Planetarium]] | ![[Lazarus - OpenGL 3.3 Tutorial - Matrix - Kleines Planetarium|Kleines Planetarium]] | ||
Zeile 278: | Zeile 308: | ||
Ein Planetarium ist eine gute Demonstration, wie man Matrizen multipliziert. | Ein Planetarium ist eine gute Demonstration, wie man Matrizen multipliziert. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/04_-_Matrix/06_-_Kleines_Planetarium source] | ||
|- | |- | ||
|} | |} | ||
Zeile 293: | Zeile 324: | ||
Anhand eines Würfels sieht man sehr gut die Räumlichkeit einer Scene. | Anhand eines Würfels sieht man sehr gut die Räumlichkeit einer Scene. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/05_-_3D/00_-_Erster-Wuerfel source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - 3D - Polygon - Seite (Backface Culling)|Polygon - Seite (Backface Culling)]] | ![[Lazarus - OpenGL 3.3 Tutorial - 3D - Polygon - Seite (Backface Culling)|Polygon - Seite (Backface Culling)]] | ||
Zeile 301: | Zeile 333: | ||
Wie unterbinde ich es, das die Rückseite eines Polygones gerendert wird. | Wie unterbinde ich es, das die Rückseite eines Polygones gerendert wird. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/05_-_3D/02_-_Polygon_-_Seite_(Backface_Culling) source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - 3D - Tiefenbuffer|Tiefenbuffer]] | ![[Lazarus - OpenGL 3.3 Tutorial - 3D - Tiefenbuffer|Tiefenbuffer]] | ||
Zeile 309: | Zeile 342: | ||
Es sollte nur das gerendert werden, was man auch sieht, verdecktes sollte nicht gerendert werden. | Es sollte nur das gerendert werden, was man auch sieht, verdecktes sollte nicht gerendert werden. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/05_-_3D/04_-_Tiefenbuffer source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - 3D - Orthogonalprojektion|Orthogonalprojektion]] | ![[Lazarus - OpenGL 3.3 Tutorial - 3D - Orthogonalprojektion|Orthogonalprojektion]] | ||
Zeile 317: | Zeile 351: | ||
Wird meistens in einem CAD gebraucht. | Wird meistens in einem CAD gebraucht. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/05_-_3D/06_-_Orthogonalprojektion source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - 3D - Fluchtpunktperspektive (Frustum)|Fluchtpunktperspektive (Frustum)]] | ![[Lazarus - OpenGL 3.3 Tutorial - 3D - Fluchtpunktperspektive (Frustum)|Fluchtpunktperspektive (Frustum)]] | ||
Zeile 325: | Zeile 360: | ||
Mit der Fluchtpunktperspektive werden Objekte kleiner je weiter sie von einem weg sind, so wie es in der Realität auch der Fall ist. | Mit der Fluchtpunktperspektive werden Objekte kleiner je weiter sie von einem weg sind, so wie es in der Realität auch der Fall ist. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/05_-_3D/08_-_Fluchtpunktperspektive_(Frustum) source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - 3D - Betrachtungs - Fenster (Viewport)|Betrachtungs - Fenster (Viewport)]] | ![[Lazarus - OpenGL 3.3 Tutorial - 3D - Betrachtungs - Fenster (Viewport)|Betrachtungs - Fenster (Viewport)]] | ||
Zeile 334: | Zeile 370: | ||
Dies passt man in der Perspektive an. | Dies passt man in der Perspektive an. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/05_-_3D/10_-_Betrachtungs_-_Fenster_(Viewport) source] | ||
|- | |- | ||
|} | |} | ||
Zeile 349: | Zeile 386: | ||
Mit Alpha-Blending ist es erst möglich Fensterscheiben oder Bäume mit OpenGL darzustellen. | Mit Alpha-Blending ist es erst möglich Fensterscheiben oder Bäume mit OpenGL darzustellen. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/06_-_Alpha_Blending/00_-_Einfaches_Alpha_Blending source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Alpha Blending - Die Reihenfolge ist wichtig|Die Reihenfolge ist wichtig]] | ![[Lazarus - OpenGL 3.3 Tutorial - Alpha Blending - Die Reihenfolge ist wichtig|Die Reihenfolge ist wichtig]] | ||
Zeile 357: | Zeile 395: | ||
Bei Alpha-Blendig ist es sehr wichtig, in welcher Reihenfolge die Polygone/Meshes gezeichnet werden. Mit dem Z-Pufer ist s leider '''nicht''' getan. | Bei Alpha-Blendig ist es sehr wichtig, in welcher Reihenfolge die Polygone/Meshes gezeichnet werden. Mit dem Z-Pufer ist s leider '''nicht''' getan. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/06_-_Alpha_Blending/02_-_Die_Reihenfolge_ist_wichtig source] | ||
|- | |- | ||
|} | |} | ||
Zeile 369: | Zeile 408: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Einfache Beleuchtung.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Einfache Beleuchtung.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/07_-_Beleuchtung/00_-_Einfache_Beleuchtung source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Ambient Light|Ambient Light]] | ![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Ambient Light|Ambient Light]] | ||
Zeile 374: | Zeile 414: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Ambient Light.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Ambient Light.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/07_-_Beleuchtung/02_-_Ambient_Light source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Directional Light|Directional Light]] | ![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Directional Light|Directional Light]] | ||
Zeile 379: | Zeile 420: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Directional Light.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Directional Light.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/07_-_Beleuchtung/04_-_Directional_Light source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Mehrere Directional Light Quellen|Mehrere Directional Light Quellen]] | ![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Mehrere Directional Light Quellen|Mehrere Directional Light Quellen]] | ||
Zeile 384: | Zeile 426: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Mehrere Directional Light Quellen.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Mehrere Directional Light Quellen.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/07_-_Beleuchtung/06_-_Mehrere_Directional_Light_Quellen source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Point Light Kugel|Point Light Kugel]] | ![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Point Light Kugel|Point Light Kugel]] | ||
Zeile 389: | Zeile 432: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Point Light Kugel.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Point Light Kugel.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/07_-_Beleuchtung/08_-_Point_Light_Kugel source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Point Light Vertex-Shader|Point Light Vertex-Shader]] | ![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Point Light Vertex-Shader|Point Light Vertex-Shader]] | ||
Zeile 394: | Zeile 438: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Point Light Vertex-Shader.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Point Light Vertex-Shader.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/07_-_Beleuchtung/10_-_Point_Light_Vertex-Shader source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Point Light Fragment-Shader|Point Light Fragment-Shader]] | ![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Point Light Fragment-Shader|Point Light Fragment-Shader]] | ||
Zeile 399: | Zeile 444: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Point Light Fragment-Shader.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Point Light Fragment-Shader.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/07_-_Beleuchtung/12_-_Point_Light_Fragment-Shader source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Grundlage Spot Licht|Grundlage Spot Licht]] | ![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Grundlage Spot Licht|Grundlage Spot Licht]] | ||
Zeile 404: | Zeile 450: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Grundlage Spot Licht.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Grundlage Spot Licht.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/07_-_Beleuchtung/14_-_Grundlage_Spot_Licht source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Spot Light, einfacher Kegel|Spot Light, einfacher Kegel]] | ![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Spot Light, einfacher Kegel|Spot Light, einfacher Kegel]] | ||
Zeile 409: | Zeile 456: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Spot Light, einfacher Kegel.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Spot Light, einfacher Kegel.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/07_-_Beleuchtung/16_-_Spot_Light,_einfacher_Kegel source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Spot Light, mit Normale|Spot Light, mit Normale]] | ![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Spot Light, mit Normale|Spot Light, mit Normale]] | ||
Zeile 414: | Zeile 462: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Spot Light, mit Normale.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Spot Light, mit Normale.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/07_-_Beleuchtung/18_-_Spot_Light,_mit_Normale source] | ||
|- | |- | ||
|} | |} | ||
Zeile 429: | Zeile 478: | ||
Die Polygone können mit Bilder ( Texturen ) überzogen werden. | Die Polygone können mit Bilder ( Texturen ) überzogen werden. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/08_-_Texturen/00_-_Erste_Textur source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Texturen - Mehrere Texturen|Mehrere Texturen]] | ![[Lazarus - OpenGL 3.3 Tutorial - Texturen - Mehrere Texturen|Mehrere Texturen]] | ||
Zeile 437: | Zeile 487: | ||
Man kann mehrere Texturen auf dem VRAM ablegen. Und diese bei Bedarf abrufen. | Man kann mehrere Texturen auf dem VRAM ablegen. Und diese bei Bedarf abrufen. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/08_-_Texturen/02_-_Mehrere_Texturen source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Texturen - Texturen von BMP|Texturen von BMP]] | ![[Lazarus - OpenGL 3.3 Tutorial - Texturen - Texturen von BMP|Texturen von BMP]] | ||
Zeile 445: | Zeile 496: | ||
Texturen können recht einfach von einer Bitmap in das VRAM kopiert werden, es muss nur das format bekannt sein. | Texturen können recht einfach von einer Bitmap in das VRAM kopiert werden, es muss nur das format bekannt sein. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/08_-_Texturen/04_-_Texturen_von_BMP source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Texturen - Texturen mit oglTextur|Texturen mit oglTextur]] | ![[Lazarus - OpenGL 3.3 Tutorial - Texturen - Texturen mit oglTextur|Texturen mit oglTextur]] | ||
Zeile 454: | Zeile 506: | ||
'''Hinweis:''' Wen jemand ein Format hat, welches nicht erkannt wird, bitte im Forum melden. | '''Hinweis:''' Wen jemand ein Format hat, welches nicht erkannt wird, bitte im Forum melden. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/08_-_Texturen/06_-_Texturen_mit_oglTextur source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Texturen - Texturen von XPM|Texturen von XPM]] | ![[Lazarus - OpenGL 3.3 Tutorial - Texturen - Texturen von XPM|Texturen von XPM]] | ||
Zeile 462: | Zeile 515: | ||
Dank des '''XPM'''-Format, kann man sehr einfach eine Textur als ASCII-Text erstellen. Es ist '''kein''' Grafikprogramm nötig. | Dank des '''XPM'''-Format, kann man sehr einfach eine Textur als ASCII-Text erstellen. Es ist '''kein''' Grafikprogramm nötig. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/08_-_Texturen/08_-_Texturen_von_XPM source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Texturen - Texturen und Matrixen|Texturen und Matrixen]] | ![[Lazarus - OpenGL 3.3 Tutorial - Texturen - Texturen und Matrixen|Texturen und Matrixen]] | ||
Zeile 470: | Zeile 524: | ||
Mit einer Matrix ist es möglich, eine Textur auf der Mesh zu skalieren/bewegen. | Mit einer Matrix ist es möglich, eine Textur auf der Mesh zu skalieren/bewegen. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/08_-_Texturen/10_-_Texturen_und_Matrixen source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Texturen - Multitexturing|Multitexturing]] | ![[Lazarus - OpenGL 3.3 Tutorial - Texturen - Multitexturing|Multitexturing]] | ||
Zeile 478: | Zeile 533: | ||
Man kann mehrere Texturen übereinanderlegen (Multitexturing ). | Man kann mehrere Texturen übereinanderlegen (Multitexturing ). | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/08_-_Texturen/12_-_Multitexturing source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Texturen - Filter|Filter]] | ![[Lazarus - OpenGL 3.3 Tutorial - Texturen - Filter|Filter]] | ||
Zeile 486: | Zeile 542: | ||
Man kann Texturen auf verschiedene Art darstellen und filtern. | Man kann Texturen auf verschiedene Art darstellen und filtern. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/08_-_Texturen/14_-_Filter source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Texturen - Alpha-Textur|Alpha-Textur]] | ![[Lazarus - OpenGL 3.3 Tutorial - Texturen - Alpha-Textur|Alpha-Textur]] | ||
Zeile 494: | Zeile 551: | ||
Es ist auch möglich Texturen transparent darzustellen. | Es ist auch möglich Texturen transparent darzustellen. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/08_-_Texturen/16_-_Alpha-Textur source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Texturen - Textur-Koordinaten|Textur-Koordinaten]] | ![[Lazarus - OpenGL 3.3 Tutorial - Texturen - Textur-Koordinaten|Textur-Koordinaten]] | ||
Zeile 502: | Zeile 560: | ||
Texturen können recht einfach von einer Bitmap in das VRAM kopiert werden, es muss nur das format bekannt sein. | Texturen können recht einfach von einer Bitmap in das VRAM kopiert werden, es muss nur das format bekannt sein. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/08_-_Texturen/18_-_Textur-Koordinaten source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Texturen - Texturen Perspektiven-Korrektur|Texturen Perspektiven-Korrektur]] | ![[Lazarus - OpenGL 3.3 Tutorial - Texturen - Texturen Perspektiven-Korrektur|Texturen Perspektiven-Korrektur]] | ||
Zeile 510: | Zeile 569: | ||
Dank des '''XPM'''-Format, kann man sehr einfach eine Textur als ASCII-Text erstellen. Es ist '''kein''' Grafikprogramm nötig. | Dank des '''XPM'''-Format, kann man sehr einfach eine Textur als ASCII-Text erstellen. Es ist '''kein''' Grafikprogramm nötig. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/08_-_Texturen/20_-_Texturen_Perspektiven-Korrektur source] | ||
|- | |- | ||
|} | |} | ||
Zeile 522: | Zeile 582: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Framepuffer - In Textur rendern.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Framepuffer - In Textur rendern.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/09_-_Framepuffer/00_-_In_Textur_rendern source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Framepuffer - Framepuffer speichern|Framepuffer speichern]] | ![[Lazarus - OpenGL 3.3 Tutorial - Framepuffer - Framepuffer speichern|Framepuffer speichern]] | ||
Zeile 527: | Zeile 588: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Framepuffer - Framepuffer speichern.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Framepuffer - Framepuffer speichern.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/09_-_Framepuffer/02_-_Framepuffer_speichern source] | ||
|- | |- | ||
|} | |} | ||
Zeile 539: | Zeile 601: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Shader Effekte - Blur.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Shader Effekte - Blur.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/10_-_Shader_Effekte/00_-_Blur source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Shader Effekte - Sobel|Sobel]] | ![[Lazarus - OpenGL 3.3 Tutorial - Shader Effekte - Sobel|Sobel]] | ||
Zeile 544: | Zeile 607: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Shader Effekte - Sobel.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Shader Effekte - Sobel.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/10_-_Shader_Effekte/02_-_Sobel source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Shader Effekte - Kacheln|Kacheln]] | ![[Lazarus - OpenGL 3.3 Tutorial - Shader Effekte - Kacheln|Kacheln]] | ||
Zeile 552: | Zeile 616: | ||
Wie drehe ich eine Mesh mit Hilfe einer Matrix. | Wie drehe ich eine Mesh mit Hilfe einer Matrix. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/10_-_Shader_Effekte/04_-_Kacheln source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Shader Effekte - Kreis|Kreis]] | ![[Lazarus - OpenGL 3.3 Tutorial - Shader Effekte - Kreis|Kreis]] | ||
Zeile 560: | Zeile 625: | ||
Wie drehe ich eine Mesh mit Hilfe einer Matrix. | Wie drehe ich eine Mesh mit Hilfe einer Matrix. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/10_-_Shader_Effekte/06_-_Kreis source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Shader Effekte - Hello World|Hello World]] | ![[Lazarus - OpenGL 3.3 Tutorial - Shader Effekte - Hello World|Hello World]] | ||
Zeile 568: | Zeile 634: | ||
Wie drehe ich eine Mesh mit Hilfe einer Matrix. | Wie drehe ich eine Mesh mit Hilfe einer Matrix. | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/10_-_Shader_Effekte/08_-_Hello_World source] | ||
|- | |- | ||
|} | |} | ||
Zeile 580: | Zeile 647: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Versuche - Erste Textur SubImage.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Versuche - Erste Textur SubImage.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/90_-_Versuche/00_-_Erste_Textur_SubImage source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Versuche - MipMap|MipMap]] | ![[Lazarus - OpenGL 3.3 Tutorial - Versuche - MipMap|MipMap]] | ||
Zeile 585: | Zeile 653: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Versuche - MipMap.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Versuche - MipMap.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/90_-_Versuche/02_-_MipMap source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Versuche - Texturen Perspektiven - Korrektur|Texturen Perspektiven - Korrektur]] | ![[Lazarus - OpenGL 3.3 Tutorial - Versuche - Texturen Perspektiven - Korrektur|Texturen Perspektiven - Korrektur]] | ||
Zeile 590: | Zeile 659: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Versuche - Texturen Perspektiven - Korrektur.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Versuche - Texturen Perspektiven - Korrektur.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/90_-_Versuche/04_-_Texturen_Perspektiven_-_Korrektur source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Versuche - MipMap Kacheln|MipMap Kacheln]] | ![[Lazarus - OpenGL 3.3 Tutorial - Versuche - MipMap Kacheln|MipMap Kacheln]] | ||
Zeile 595: | Zeile 665: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Versuche - MipMap Kacheln.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Versuche - MipMap Kacheln.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/90_-_Versuche/06_-_MipMap _Kacheln source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Versuche - MipMap|MipMap]] | ![[Lazarus - OpenGL 3.3 Tutorial - Versuche - MipMap|MipMap]] | ||
Zeile 600: | Zeile 671: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Versuche - MipMap.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Versuche - MipMap.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/90_-_Versuche/08_-_MipMap source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Versuche - MipMap diskret|MipMap diskret]] | ![[Lazarus - OpenGL 3.3 Tutorial - Versuche - MipMap diskret|MipMap diskret]] | ||
Zeile 605: | Zeile 677: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Versuche - MipMap diskret.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Versuche - MipMap diskret.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/90_-_Versuche/10_-_MipMap_diskret source] | ||
|- | |- | ||
![[Lazarus - OpenGL 3.3 Tutorial - Versuche - MipMap diskret-2|MipMap diskret-2]] | ![[Lazarus - OpenGL 3.3 Tutorial - Versuche - MipMap diskret-2|MipMap diskret-2]] | ||
Zeile 610: | Zeile 683: | ||
|[[Image:Lazarus - OpenGL 3.3 Tutorial - Versuche - MipMap diskret-2.png|128px|right]] | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Versuche - MipMap diskret-2.png|128px|right]] | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
+ | * [https://github.com/sechshelme/Lazarus-OpenGL-3.3-Tutorial/tree/master/90_-_Versuche/12_-_MipMap_diskret-2 source] | ||
|- | |- | ||
|} | |} | ||
[https://wiki.delphigl.com/index.php/Lazarus_-_OpenGL_3.3_Tutorial Inhaltsverzeichnis] | [https://wiki.delphigl.com/index.php/Lazarus_-_OpenGL_3.3_Tutorial Inhaltsverzeichnis] |
Version vom 21. Januar 2018, 22:36 Uhr
Inhaltsverzeichnis
Lazarus - OpenGL 3.3 Tutorial
Download
Einrichten und Einstieg
Link | Beschreibung |
---|---|
Lazarus fuer OpenGL einrichten |
"Lazarus mit OpenGL 3.3" Was sind die Voraussetzungen. Und wie richte ich Lazarus ein, das dies mit OpenGL 3.3 funktioniert.
|
Context erzeugen |
"Eine Arbeitsfläche erzeugen" Das OpenGL etwas auf den Bildschirm ausgeben kann, wird ein Context, Zeichenfläche gebraucht. |
VAO - Daten laden |
"Erste Vectoren" Das OpenGL weis, was ausgegeben werden muss, speichert man die Eckpunkte einer Mesh in eine Vektor-Array. |
Erster Shader |
"Zeichen Routine" Bevor OpenGL etwas ausgeben kann, werden die Daten in einem Shader-Programm abgearbeitet. Somit stehen einem fast unendliche Effekte zu Verfügung. |
Polygonmodus |
"Wie sollen die Polygone verarbeitet werden ?" Die Dreiecke/Linien können als Eckpunkte, Drahtgitter oder Vollflächig ausgegeben werden. |
Shader
Link | Beschreibung |
---|---|
Einleitung und laden der Shader |
"Das Herz von OpenGL 3.3" Sämtliche Effekt werden hier verarbeitet. Was ist ein Shader und wie lädt man ihn in die Grafikkarte. |
Einfachster Shader |
"Einfachste Abbarbeitung" Die minimalste Version eines Shaders. |
Uniform Variablen |
"Äusere Beinflussung" Wie kann ich den Ablauf des Shaders von aussen beeinflussen. |
Erste Bewegung |
"Die Mesh sollte nicht statisch sein" Wie bewege ich eine Mesh im Shader. |
Mehrere Shader |
"Einer ist langweilig" Wie kann ich verschiedene Shader benutzen, da man nicht auf allen Meshes die gleichen Efffekte will. |
Schleifen |
"Nicht immer gleich" Im Shader kann man auch verschiedene Abläufe steuern, die if-Schleife. |
Geometrie Shader |
"Zusätliche geometrische Berechnung" Ein Zusatz-Shader, der zB. Vektoren verdoppeln kann. |
Punkte verschieden darstellen |
"Ein Pixel ist langweilig" Man kann einen Punkt auf verschiedene Arten darstellen, mit dem Shader eine einfache Sache. |
Shader Mandelbrot |
"Jetzt wird es komplex" Mit dem Shader kann man auch ganze Fraktale berechnen. |
Wichtige Funktionen |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |
Vertex-Puffer
Link | Beschreibung |
---|---|
Einfachster Vertex-Puffer |
"Mesh Daten" Wie gelangen die Daten der Mesh in die Grafikkarte. |
Mehrere Vertex-Puffer, Mehrarbige Mesh |
"Nicht nur Koordinaten" Die Vector-Daten können mehr enthalten als nur die Koordinaten, hier sind es die Farben der Face. |
Vertex-Puffer in 2D |
"Es muss nicht immer 3D sein" Andere Vertex-Daten anstelle von 3D. |
Nur eine Array |
"Alles zusammen" Man kann Koordianten, Farben, etc., alles in einen Puffer ablegen. |
Vertex-Daten zur Laufzeit modifizieren |
"Es werd dynamisch" Man kann die Vertex-Daten zu Laufzeit modifizieren und neu in die Grafikkarte laden. |
Shapes (Dreiecke) |
"Nicht nur einzeln Dreiecke" Man kann die Dreiecke auch zur einer Strip oder Fan zusamenfügen, dies spart Platz im VRAM. |
Shapes (Linien und Punkte) |
"Nicht nur Dreiecke" Ein Vektor-Puffer kann auch aus Linien oder Punkte bestehen. GL_QUAD, GL_POLYGON, so wie im alten OpenGL, gibt es nicht mehr. |
DrawArrays |
"Nicht immer am Stück" Man kann auch nur einen Teil einer Vertex-Array zeichnen. |
Indices |
"Eigene Reihenfolge" Man kann auch eine Liste erstellen und die Reihenfolge der Vertex-Daten selbst betimmen. |
Index-Puffer |
"Indizien im Puffer" Auch die Liste der Punkte (Indizien), kann man in einem Puffer ablegen. |
Index-Puffer dynamisch |
"Indizien dynamisch" Auch der Indizien-Puffer kann man zur Laufzeit modifizieren. |
Vertex-Puffer auslesen |
"Nicht nur schreiben" Ein Vertex-Puffer kann man auch von der Grafikkarte wieder auslesen. |
Matrix
Link | Beschreibung |
---|---|
Was ist eine Matrix |
"Bewegung im Raum" Mit eine 4x4 Matrix, kann man sämtliche Bewegungen im Raum darstellen. Verschiebung, Drehung, Skalierung und sogar Perspektive ist mit dieser Matrix möglich. |
Matrix Rotieren |
"Drehung" Wie drehe ich eine Mesh mit Hilfe einer Matrix. |
Matrix Verschieben und Multiplizieren |
"Mehrere Matrizen" Verschiedene Matrizen können multiplizert werden, soomit sind mehrere Bewegungen der Mesh möglich. |
Kleines Planetarium |
"Planetarium" Ein Planetarium ist eine gute Demonstration, wie man Matrizen multipliziert. |
3D
Link | Beschreibung |
---|---|
Erster-Wuerfel |
"Es werde 3D" Anhand eines Würfels sieht man sehr gut die Räumlichkeit einer Scene. |
Polygon - Seite (Backface Culling) |
"Alles ist zu viel" Wie unterbinde ich es, das die Rückseite eines Polygones gerendert wird. |
Tiefenbuffer |
"Nur Vorn" Es sollte nur das gerendert werden, was man auch sieht, verdecktes sollte nicht gerendert werden. |
Orthogonalprojektion |
"Ortografisch" Wird meistens in einem CAD gebraucht. |
Fluchtpunktperspektive (Frustum) |
"Vorn ist grösser" Mit der Fluchtpunktperspektive werden Objekte kleiner je weiter sie von einem weg sind, so wie es in der Realität auch der Fall ist. |
Betrachtungs - Fenster (Viewport) |
"Nicht mehr verzerrt" Ein Quadrat sollte ein Quadrat bleiben, auch wen das Ausgabefenster nicht Quadratisch ist. Dies passt man in der Perspektive an. |
Alpha Blending
Link | Beschreibung |
---|---|
Einfaches Alpha Blending |
"Es werde transparent" Mit Alpha-Blending ist es erst möglich Fensterscheiben oder Bäume mit OpenGL darzustellen. |
Die Reihenfolge ist wichtig |
"Die Reihenfolge ist wichtig" Bei Alpha-Blendig ist es sehr wichtig, in welcher Reihenfolge die Polygone/Meshes gezeichnet werden. Mit dem Z-Pufer ist s leider nicht getan. |
Beleuchtung
Link | Beschreibung |
---|---|
Einfache Beleuchtung |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |
Ambient Light |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |
Directional Light |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |
Mehrere Directional Light Quellen |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |
Point Light Kugel |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |
Point Light Vertex-Shader |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |
Point Light Fragment-Shader |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |
Grundlage Spot Licht |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |
Spot Light, einfacher Kegel |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |
Spot Light, mit Normale |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |
Texturen
Link | Beschreibung |
---|---|
Erste Textur |
"Es gebe Bilder" Die Polygone können mit Bilder ( Texturen ) überzogen werden. |
Mehrere Texturen |
"Mehrer Texturen" Man kann mehrere Texturen auf dem VRAM ablegen. Und diese bei Bedarf abrufen. |
Texturen von BMP |
"Bilder direkt aus Bitmap" Texturen können recht einfach von einer Bitmap in das VRAM kopiert werden, es muss nur das format bekannt sein. |
Texturen mit oglTextur |
"Es gibt viele Formate" Da es sehr viele Formate gibt, habe ich eine Klasse geschrieben, welche einem die Arbeit der Erkennung abnimmt. Hinweis: Wen jemand ein Format hat, welches nicht erkannt wird, bitte im Forum melden. |
Texturen von XPM |
"Texturen als Text" Dank des XPM-Format, kann man sehr einfach eine Textur als ASCII-Text erstellen. Es ist kein Grafikprogramm nötig. |
Texturen und Matrixen |
"Bewegte Textur" Mit einer Matrix ist es möglich, eine Textur auf der Mesh zu skalieren/bewegen. |
Multitexturing |
"Huckepack" Man kann mehrere Texturen übereinanderlegen (Multitexturing ). |
Filter |
"Filter" Man kann Texturen auf verschiedene Art darstellen und filtern. |
Alpha-Textur |
"Es werde Transparent" Es ist auch möglich Texturen transparent darzustellen. |
Textur-Koordinaten |
"Bilder direkt aus Bitmap" Texturen können recht einfach von einer Bitmap in das VRAM kopiert werden, es muss nur das format bekannt sein. |
Texturen Perspektiven-Korrektur |
"Texturen als Text" Dank des XPM-Format, kann man sehr einfach eine Textur als ASCII-Text erstellen. Es ist kein Grafikprogramm nötig. |
Framepuffer
Link | Beschreibung |
---|---|
In Textur rendern |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |
Framepuffer speichern |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |
Shader Effekte
Link | Beschreibung |
---|---|
Blur |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |
Sobel |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |
Kacheln |
"Drehung" Wie drehe ich eine Mesh mit Hilfe einer Matrix. |
Kreis |
"Drehung" Wie drehe ich eine Mesh mit Hilfe einer Matrix. |
Hello World |
"Drehung" Wie drehe ich eine Mesh mit Hilfe einer Matrix. |
Versuche
Link | Beschreibung |
---|---|
Erste Textur SubImage |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |
MipMap |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |
Texturen Perspektiven - Korrektur |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |
MipMap Kacheln |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |
MipMap |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |
MipMap diskret |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |
MipMap diskret-2 |
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar |