Lazarus - OpenGL 3.3 Tutorial

Aus DGL Wiki
Wechseln zu: Navigation, Suche

Lazarus - OpenGL 3.3 Tutorial

Download

Einrichten und Einstieg

Link Beschreibung
Lazarus fuer OpenGL einrichten
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Einrichten und Einstieg - Lazarus fuer OpenGL einrichten.png

"Lazarus mit OpenGL 3.3"

Was sind die Voraussetzungen. Und wie richte ich Lazarus ein, das dies mit OpenGL 3.3 funktioniert.


Context erzeugen
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Einrichten und Einstieg - Context erzeugen.png

"Eine Arbeitsfläche erzeugen"

Das OpenGL etwas auf den Bildschirm ausgeben kann, wird ein Context, Zeichenfläche gebraucht.

VAO - Daten laden
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Einrichten und Einstieg - VAO - Daten laden.png

"Erste Vectoren"

Das OpenGL weis, was ausgegeben werden muss, speichert man die Eckpunkte einer Mesh in eine Vektor-Array.

Erster Shader
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Einrichten und Einstieg - Erster Shader.png

"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
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Einrichten und Einstieg - Polygonmodus.png

"Wie sollen die Polygone verarbeitet werden ?"

Die Dreiecke/Linien können als Eckpunkte, Drahtgitter oder Vollflächig ausgegeben werden.

Inhaltsverzeichnis

Shader

Link Beschreibung
Einleitung und laden der Shader
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Shader - Einleitung und laden der Shader.png

"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
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Shader - Einfachster Shader.png

"Einfachste Abbarbeitung"

Die minimalste Version eines Shaders.

Uniform Variablen
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Shader - Uniform Variablen.png

"Äusere Beinflussung"

Wie kann ich den Ablauf des Shaders von aussen beeinflussen.

Erste Bewegung
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Shader - Erste Bewegung.png

"Die Mesh sollte nicht statisch sein"

Wie bewege ich eine Mesh im Shader.

Mehrere Shader
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Shader - Mehrere Shader.png

"Einer ist langweilig"

Wie kann ich verschiedene Shader benutzen, da man nicht auf allen Meshes die gleichen Efffekte will.

Schleifen
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Shader - Schleifen.png

"Nicht immer gleich"

Im Shader kann man auch verschiedene Abläufe steuern, die if-Schleife.

Geometrie Shader
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Shader - Geometrie Shader.png

"Zusätliche geometrische Berechnung"

Ein Zusatz-Shader, der zB. Vektoren verdoppeln kann.

Punkte verschieden darstellen
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Shader - Punkte verschieden darstellen.png

"Ein Pixel ist langweilig"

Man kann einen Punkt auf verschiedene Arten darstellen, mit dem Shader eine einfache Sache.

Shader Mandelbrot
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Shader - Shader Mandelbrot.png

"Jetzt wird es komplex"

Mit dem Shader kann man auch ganze Fraktale berechnen.

Wichtige Funktionen
Schwierigkeitsgrad2 30x30.jpg

Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar

Inhaltsverzeichnis

Vertex-Puffer

Link Beschreibung
Einfachster Vertex-Puffer
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Einfachster Vertex-Puffer.png

"Mesh Daten"

Wie gelangen die Daten der Mesh in die Grafikkarte.

Mehrere Vertex-Puffer, Mehrarbige Mesh
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Mehrere Vertex-Puffer, Mehrarbige Mesh.png

"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
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Vertex-Puffer in 2D.png

"Es muss nicht immer 3D sein"

Andere Vertex-Daten anstelle von 3D.

Nur eine Array
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Nur eine Array.png

"Alles zusammen"

Man kann Koordianten, Farben, etc., alles in einen Puffer ablegen.

Vertex-Daten zur Laufzeit modifizieren
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Vertex-Daten zur Laufzeit modifizieren.png

"Es werd dynamisch"

Man kann die Vertex-Daten zu Laufzeit modifizieren und neu in die Grafikkarte laden.

Shapes (Dreiecke)
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Shapes (Dreiecke).png

"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)
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Shapes (Linien und Punkte).png

"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
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - DrawArrays.png

"Nicht immer am Stück"

Man kann auch nur einen Teil einer Vertex-Array zeichnen.

Indices
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Indices.png

"Eigene Reihenfolge"

Man kann auch eine Liste erstellen und die Reihenfolge der Vertex-Daten selbst betimmen.

Index-Puffer
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Index-Puffer.png

"Indizien im Puffer"

Auch die Liste der Punkte (Indizien), kann man in einem Puffer ablegen.

Index-Puffer dynamisch
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Index-Puffer dynamisch.png

"Indizien dynamisch"

Auch der Indizien-Puffer kann man zur Laufzeit modifizieren.

Vertex-Puffer auslesen
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Vertex-Puffer auslesen.png

"Nicht nur schreiben"

Ein Vertex-Puffer kann man auch von der Grafikkarte wieder auslesen.

Inhaltsverzeichnis

Matrix

Link Beschreibung
Was ist eine Matrix
Schwierigkeitsgrad2 30x30.jpg

"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
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Matrix - Matrix Rotieren.png

"Drehung"

Wie drehe ich eine Mesh mit Hilfe einer Matrix.

Matrix Verschieben und Multiplizieren
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Matrix - Matrix Verschieben und Multiplizieren.png

"Mehrere Matrizen"

Verschiedene Matrizen können multiplizert werden, soomit sind mehrere Bewegungen der Mesh möglich.

Kleines Planetarium
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Matrix - Kleines Planetarium.png

"Planetarium"

Ein Planetarium ist eine gute Demonstration, wie man Matrizen multipliziert.

Inhaltsverzeichnis

3D

Link Beschreibung
Erster-Wuerfel
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - 3D - Erster-Wuerfel.png

"Es werde 3D"

Anhand eines Würfels sieht man sehr gut die Räumlichkeit einer Scene.

Polygon - Seite (Backface Culling)
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - 3D - Polygon - Seite (Backface Culling).png

"Alles ist zu viel"

Wie unterbinde ich es, das die Rückseite eines Polygones gerendert wird.

Tiefenbuffer
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - 3D - Tiefenbuffer.png

"Nur Vorn"

Es sollte nur das gerendert werden, was man auch sieht, verdecktes sollte nicht gerendert werden.

Orthogonalprojektion
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - 3D - Orthogonalprojektion.png

"Ortografisch"

Wird meistens in einem CAD gebraucht.

Fluchtpunktperspektive (Frustum)
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - 3D - Fluchtpunktperspektive (Frustum).png

"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)
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - 3D - Betrachtungs - Fenster (Viewport).png

"Nicht mehr verzerrt"

Ein Quadrat sollte ein Quadrat bleiben, auch wen das Ausgabefenster nicht Quadratisch ist. Dies passt man in der Perspektive an.

Inhaltsverzeichnis

Alpha Blending

Link Beschreibung
Einfaches Alpha Blending
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Alpha Blending - Einfaches Alpha Blending.png

"Es werde transparent"

Mit Alpha-Blending ist es erst möglich Fensterscheiben oder Bäume mit OpenGL darzustellen.

Die Reihenfolge ist wichtig
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Alpha Blending - Die Reihenfolge ist wichtig.png

"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.

Inhaltsverzeichnis

Beleuchtung

Link Beschreibung
Einfache Beleuchtung
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Einfache Beleuchtung.png

"Es wird Erkennbar"

Einfachste Variante einer Beleuchtung.

Ambient Light
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Ambient Light.png

"Hintergrund-Beleuchtung"

Ein Restlicht ist (fast) immer vorhanden.


Directional Light
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Directional Light.png

"Sonnenlicht"

Das Licht kommt alles von der gleichen Seite, so wie beim Sonnenlicht. Dies ist das am meisten verwendete Licht.

Mehrere Directional Light Quellen
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Mehrere Directional Light Quellen.png

"Mehrere Lichtquellen"

So würde es aussehen, wen es eine rote, grüne und eine blaue Sonne gäbe.

Point Light Kugel
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Point Light Kugel.png

"Eine Glühbirne"

Das Licht strahlt alles von einem Punkt aus in alle Richtungen.

Point Light Vertex-Shader
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Point Light Vertex-Shader.png

"Schnelle Lichtberechnung"

Die Berechnung des Lichtes erfolgt im Vertex-Shader. Damit ist die Berechnung sehr schnell, dafür nimmt man Detail-Verlust in Kauf.

Point Light Fragment-Shader
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Point Light Fragment-Shader.png

"Detailgetreues Licht"

Die Berechnung wird in den Fragemnt-Shader ausgelagert. Dies ist nicht mehr so schnell, dafür aber umso Detailreicher.

Grundlage Spot Licht
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Grundlage Spot Licht.png

"Eine Taschenlampe" (ohne OpenGL)

Dies zeigt die Grundlage der Berechnung eines Lichtstrahles einer Taschnelampe.

Spot Light, einfacher Kegel
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Spot Light, einfacher Kegel.png

"Taschenlampe"

Mesh anstrahlen mit einer Taschenlampe. Normalenberechnung wird ingnoriert.

Spot Light, mit Normale
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Spot Light, mit Normale.png

"Taschenlampe realistisch"

Jetzt werden auch schräge Flächen (Normale) berücksichtigt.

Inhaltsverzeichnis

Texturen

Link Beschreibung
Erste Textur
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Texturen - Erste Textur.png

"Es gebe Bilder"

Die Polygone können mit Bilder ( Texturen ) überzogen werden.

Mehrere Texturen
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Texturen - Mehrere Texturen.png

"Mehrer Texturen"

Man kann mehrere Texturen auf dem VRAM ablegen. Und diese bei Bedarf abrufen.

Texturen von BMP
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Texturen - Texturen von BMP.png

"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
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Texturen - Texturen mit oglTextur.png

"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
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Texturen - Texturen von XPM.png

"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
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Texturen - Texturen und Matrixen.png

"Bewegte Textur"

Mit einer Matrix ist es möglich, eine Textur auf der Mesh zu skalieren/bewegen.

Multitexturing
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Texturen - Multitexturing.png

"Huckepack"

Man kann mehrere Texturen übereinanderlegen (Multitexturing ).

Filter
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Texturen - Filter.png

"Filter"

Man kann Texturen auf verschiedene Art darstellen und filtern.

Alpha-Textur
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Texturen - Alpha-Textur.png

"Es werde Transparent"

Es ist auch möglich Texturen transparent darzustellen.

Textur-Koordinaten
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Texturen - Textur-Koordinaten.png

"Koordinaten"

Die Auswirkung unterschiedlicher Textur-Koordinaten.

Texturen Perspektiven-Korrektur
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Texturen - Texturen Perspektiven-Korrektur.png

"Texturen als Text"

Dank des XPM-Format, kann man sehr einfach eine Textur als ASCII-Text erstellen. Es ist kein Grafikprogramm nötig.

1D Textur
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Texturen - 1D Textur.png

"Es geht auch 1D"

Texturen können auch 1D sein, eine Linie mit Farb-Punkten.

Inhaltsverzeichnis

Framepuffer

Link Beschreibung
In Textur rendern
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Framepuffer - In Textur rendern.png

Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar

Framepuffer speichern
Schwierigkeitsgrad2 30x30.jpg
Lazarus - OpenGL 3.3 Tutorial - Framepuffer - Framepuffer speichern.png

Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar

Inhaltsverzeichnis

Shader Effekte

Link Beschreibung
Blur
Schwierigkeitsgrad2 30x30.jpg

Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar

Sobel
Schwierigkeitsgrad2 30x30.jpg

Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar

Kacheln
Schwierigkeitsgrad2 30x30.jpg

"Drehung"

Wie drehe ich eine Mesh mit Hilfe einer Matrix.

Kreis
Schwierigkeitsgrad2 30x30.jpg

"Drehung"

Wie drehe ich eine Mesh mit Hilfe einer Matrix.

Hello World
Schwierigkeitsgrad2 30x30.jpg

"Drehung"

Wie drehe ich eine Mesh mit Hilfe einer Matrix.

Inhaltsverzeichnis

Geometrie-Shader

Link Beschreibung
Breite Linien
Schwierigkeitsgrad2 30x30.jpg

"Bilder direkt aus Bitmap"

Texturen können recht einfach von einer Bitmap in das VRAM kopiert werden, es muss nur das format bekannt sein.

GL TRIANGLE STRIP ADJACENCY
Schwierigkeitsgrad2 30x30.jpg

"Bilder direkt aus Bitmap"

Texturen können recht einfach von einer Bitmap in das VRAM kopiert werden, es muss nur das format bekannt sein.

Inhaltsverzeichnis

Versuche

Link Beschreibung
Erste Textur SubImage
Schwierigkeitsgrad2 30x30.jpg

Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar

MipMap
Schwierigkeitsgrad2 30x30.jpg

Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar

Texturen Perspektiven - Korrektur
Schwierigkeitsgrad2 30x30.jpg

Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar

MipMap Kacheln
Schwierigkeitsgrad2 30x30.jpg

Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar

MipMap
Schwierigkeitsgrad2 30x30.jpg

Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar

MipMap diskret
Schwierigkeitsgrad2 30x30.jpg

Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar

MipMap diskret-2
Schwierigkeitsgrad2 30x30.jpg

Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar

Inhaltsverzeichnis