Lazarus - OpenGL 3.3 Tutorial: Unterschied zwischen den Versionen
Zeile 49: | Zeile 49: | ||
|- | |- | ||
|} | |} | ||
− | + | <br> | |
+ | [[Lazarus - OpenGL 3.3 Tutorial|Inhaltsverzeichnis]] | ||
+ | <br> | ||
== Shader == | == Shader == | ||
{|{{Prettytable_B1}} width="100%" | {|{{Prettytable_B1}} width="100%" | ||
Zeile 134: | Zeile 136: | ||
|- | |- | ||
|} | |} | ||
− | + | <br> | |
+ | [[Lazarus - OpenGL 3.3 Tutorial|Inhaltsverzeichnis]] | ||
+ | <br> | ||
== Vertex-Puffer == | == Vertex-Puffer == | ||
{|{{Prettytable_B1}} width="100%" | {|{{Prettytable_B1}} width="100%" | ||
Zeile 238: | Zeile 242: | ||
|- | |- | ||
|} | |} | ||
− | + | <br> | |
+ | [[Lazarus - OpenGL 3.3 Tutorial|Inhaltsverzeichnis]] | ||
+ | <br> | ||
== Matrix == | == Matrix == | ||
{|{{Prettytable_B1}} width="100%" | {|{{Prettytable_B1}} width="100%" | ||
Zeile 277: | Zeile 283: | ||
|- | |- | ||
|} | |} | ||
− | + | <br> | |
+ | [[Lazarus - OpenGL 3.3 Tutorial|Inhaltsverzeichnis]] | ||
+ | <br> | ||
== 3D == | == 3D == | ||
{|{{Prettytable_B1}} width="100%" | {|{{Prettytable_B1}} width="100%" | ||
Zeile 333: | Zeile 341: | ||
|- | |- | ||
|} | |} | ||
− | + | <br> | |
+ | [[Lazarus - OpenGL 3.3 Tutorial|Inhaltsverzeichnis]] | ||
+ | <br> | ||
== Alpha Blending == | == Alpha Blending == | ||
{|{{Prettytable_B1}} width="100%" | {|{{Prettytable_B1}} width="100%" | ||
Zeile 356: | Zeile 366: | ||
|- | |- | ||
|} | |} | ||
− | + | <br> | |
+ | [[Lazarus - OpenGL 3.3 Tutorial|Inhaltsverzeichnis]] | ||
+ | <br> | ||
== Beleuchtung == | == Beleuchtung == | ||
{|{{Prettytable_B1}} width="100%" | {|{{Prettytable_B1}} width="100%" | ||
Zeile 367: | Zeile 379: | ||
Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar Kommentar | ||
|- | |- | ||
− | ![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - | + | ![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Ambient Light|Ambient Light]] |
{{Level_2}} | {{Level_2}} | ||
− | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - | + | |[[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 | ||
|- | |- | ||
− | ![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - | + | ![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Directional Light|Directional Light]] |
{{Level_2}} | {{Level_2}} | ||
− | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - | + | |[[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 | ||
|- | |- | ||
− | ![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - | + | ![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Mehrere Directional Light Quellen|Mehrere Directional Light Quellen]] |
{{Level_2}} | {{Level_2}} | ||
− | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - | + | |[[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 | ||
|- | |- | ||
− | ![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - | + | ![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Point Light Kugel|Point Light Kugel]] |
{{Level_2}} | {{Level_2}} | ||
− | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - | + | |[[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 | ||
|- | |- | ||
− | ![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - | + | ![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Point Light Vertex-Shader|Point Light Vertex-Shader]] |
{{Level_2}} | {{Level_2}} | ||
− | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - | + | |[[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 | ||
|- | |- | ||
− | ![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - | + | ![[Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Point Light Fragment-Shader|Point Light Fragment-Shader]] |
{{Level_2}} | {{Level_2}} | ||
− | |[[Image:Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - | + | |[[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 | ||
|- | |- | ||
|} | |} | ||
− | + | <br> | |
+ | [[Lazarus - OpenGL 3.3 Tutorial|Inhaltsverzeichnis]] | ||
+ | <br> | ||
== Texturen == | == Texturen == | ||
{|{{Prettytable_B1}} width="100%" | {|{{Prettytable_B1}} width="100%" | ||
Zeile 478: | Zeile 492: | ||
|- | |- | ||
|} | |} | ||
− | + | <br> | |
+ | [[Lazarus - OpenGL 3.3 Tutorial|Inhaltsverzeichnis]] | ||
+ | <br> | ||
== Framepuffer == | == Framepuffer == | ||
{|{{Prettytable_B1}} width="100%" | {|{{Prettytable_B1}} width="100%" | ||
Zeile 495: | Zeile 511: | ||
|- | |- | ||
|} | |} | ||
− | + | <br> | |
+ | [[Lazarus - OpenGL 3.3 Tutorial|Inhaltsverzeichnis]] | ||
+ | <br> | ||
== Shader Effekte == | == Shader Effekte == | ||
{|{{Prettytable_B1}} width="100%" | {|{{Prettytable_B1}} width="100%" | ||
Zeile 536: | Zeile 554: | ||
|- | |- | ||
|} | |} | ||
− | + | <br> | |
+ | [[Lazarus - OpenGL 3.3 Tutorial|Inhaltsverzeichnis]] | ||
+ | <br> | ||
== Versuche == | == Versuche == | ||
{|{{Prettytable_B1}} width="100%" | {|{{Prettytable_B1}} width="100%" | ||
Zeile 578: | Zeile 598: | ||
|- | |- | ||
|} | |} | ||
+ | <br> | ||
+ | [[Lazarus - OpenGL 3.3 Tutorial|Inhaltsverzeichnis]] | ||
+ | <br> |
Version vom 6. Januar 2018, 17:56 Uhr
Inhaltsverzeichnis
Lazarus - OpenGL 3.3 Tutorial
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. |
Inhaltsverzeichnis
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 |
Inhaltsverzeichnis
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. |
Inhaltsverzeichnis
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. |
Inhaltsverzeichnis
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. |
Inhaltsverzeichnis
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. |
Inhaltsverzeichnis
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 |
Inhaltsverzeichnis
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. |
Inhaltsverzeichnis
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 |
Inhaltsverzeichnis
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. |
Inhaltsverzeichnis
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 |
Inhaltsverzeichnis