Lazarus - OpenGL 3.3 Tutorial - Einrichten und Einstieg - Lazarus fuer OpenGL einrichten

Aus DGL Wiki
Version vom 2. Dezember 2019, 10:34 Uhr von I0n0s (Diskussion | Beiträge) (Einleitung)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Lazarus - OpenGL 3.3 Tutorial - Einrichten und Einstieg - Lazarus fuer OpenGL einrichten.png

Einrichten und Einstieg - Lazarus fuer OpenGL einrichten

Einleitung

Vorwort:

OpenGL 3.3 scheint auf den ersten Blick viel komplizierter als das alte OpenGL.
Man wird von Anfang an mit vielem Neuen konfrontiert.
Früher konnte man einfach

glBegin(...
..
glEnd

und fertig.
Jetzt muss man sich mit Shadern und Vertex-Buffern auseinandersetzen.
Auch muss man sich selbst um die Matrizen und die Beleuchtung kümmern.

Aber dafür ist die Belohnung sehr gross, man ist sehr flexibel und man kann (fast) alles machen, was Effekte anbelangt.
Früher war man einfach auf die Fixed-Function-Pipeline der Grafikkarte angewiesen und jede war etwas anders.
Wenn eine Karte nur zwei Lichter hatte, dann hatte sie nur zwei.
Da man es aber jetzt selbst macht, kann man fast beliebig viel machen, egal ob diffus, etc.

Ich hoffe, mit diesem Tutorial wird der eine oder andere für OpenGL 3.3 begeistert werden.
Wenn man diesen Einstieg mal geschafft hat, wird man auch mit den höheren Versionen klarkommen.

Auf der Hauptseite werde ich noch ein Package veröffentlichen, welches einem den Einstieg sehr einfach macht.
Dort sind fertige Shader und Units für Matrizen, Texturen, Vertex-Puffer, etc. vorhanden.


Voraussetzung:

  • FPC 3.0.2 oder höher.
  • Lazarus 1.6.4 oder höher.
  • Mindestens OpenGL 3.3 fähige Grafikkarte.
  • Grundkenntnisse mit FPC und Lazarus.
  • Grundkenntnisse C/C++ für die Shader-Programmierung.


Wen die Grafikkarte zu alt ist, gibt es trotzdem eine Lösung. Mit Mesa ab 17.1 ist es möglich im Software-Renderer OpenGL zu emulieren.
Dies ist gähnend langsam, aber für die ersten Gehversuche im Tutorial reicht dies. ( Getestet mit Linux Mint 64Bit 18.x )

Installation:

FPC und Lazarus installieren.

Bei Lazarus muss unter "Package --> Installierte Packages einrichten... --> Verfügbar für Installation", zuerst das Package LazOpenGLContext x.x.x installiert werden.

Das Tutorial sollte unter Linux und Windows laufen, auf dem Mac habe ich es nicht probiert.

Wenn Lazarus bei der Neukompilierung unter Linux Probleme macht, könnte Folgendes das Problem sein:
Unter auf Debian oder Ubuntu basierenden Linux-Distributionen muss evtl. noch Folgendes installiert werden.

sudo apt-get install freeglut3-dev

Somit sollten alle Beispiele kompilierbar sein.

Die Sourcen zum Tutorial, kann man alle auf der Hauptseite herunterladen.
Es ist eine Zip, welche auch alle Bibliotheken (Units) enthält.
Ich habe eine Package Namens ogl_package.lpk mit den benötigten Dateien erstellt, sie befindet sich im gleiche Ordner wie die Units. Ich empfehle es, die Package zu installieren,
obwohl man auch in den Projekte den Unit-Pfad anpassen kann, nur muss man dann in allen Projekten die Pfade anpassen, wen man mal die Package verschiebt/umbenennt.
Für die ogl-Package ist noch Package BRGABitmap erforderlich, diese lässt sich bequem über "Package --> Online-Package-Manger --> BGRABitmap" installieren.

Die wichtigsten Funktionen der ogl-Package:

  • dglOpenGL: Der Header für die OpenGL-Funktionen.
  • oglContex: Erzeugt einen Zeichencontext, ohne diesem ist keine OpenGL-Ausgabe möglich.
  • oglShader: Enthält Funktionen um den Shader-Code in die Grafikkarte zu laden.
  • oglVertex: Verschiedene Vertex-Deklarationen und Funktionen/Berechnungen.
  • oglMatrix: Verschiedene Matrix-Deklarationen und Funktionen/Berechnungen.
  • oglTextur: Funktionen für das Hochladen von Texturen.



Es sind viele OpenGL spezifische Sachen ausserhalb von Form deklariert, bei einer sauberen objektorientierten Programmierung ist dies nicht üblich.
Hier wurde es einfachheitshalber der Übersichtlichkeit gemacht.

Wen man weis, wie man mit Delphi einen OpenGL-Context erzeugt, sollte dieses Tutorial auch mit Delphi funktionieren.

Wenn Fehler gefunden werden, dann bitte hier melden:

oder


Autor: Mathias

Siehe auch