OpenGL 1.0 mit C++ – Teil 1: Fenster, Schleife und erstes Dreieck

in #deutsch3 months ago (edited)

Hallo zusammen,

ich habe in den letzten Jahren, wie bereits erwähnt, mein Informatikstudium begonnen und mich intensiver mit der Mathematik von Videospielen beschäftigt. Vor allem erstmal mit den älteren Versionen von OpenGL, konkret 1.0 – das ist einfach, direkt und läuft auf so ziemlich jedem Windows-System ohne große Probleme.

Ich dachte mir, um mal wieder etwas aktiver hier zu werden, nehme ich euch mit auf einen Basic OpenGL 1.0 Kurs mit den jeweiligen Erklärungen dazu. Ich benutze dabei C++ und CMake.

Natürlich braucht man auch einen Window Manager, wie z. B. GLFW. Den könnt ihr euch einfach runterladen und in einen include/ oder libs/-Ordner packen und dann in CMake einbinden. Darauf gehe ich hier nicht weiter ein – das Setup ist ohnehin simpel.


Hintergrund setzen

Als Erstes – nachdem das Fenster erstellt wurde – setzen wir mit:

glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Setzt den Hintergrund auf Schwarz

die Hintergrundfarbe, die beim Leeren des Bildschirms benutzt wird.


Render-Schleife

Dann kommen wir in die Haupt-While-Schleife. In meinem Fall mit GLFW:

while (!glfwWindowShouldClose(window)) {

Was das bedeutet: Die Schleife läuft so lange weiter, wie das Fenster offen ist. Man könnte hier auch einfach while (true) verwenden, aber dann müsste man das Schließen des Fensters manuell abfangen.

Eine while-Schleife heißt im Grunde nur: "Solange die Bedingung stimmt, mach das da drin". In unserem Fall: solange das Fenster noch nicht geschlossen wurde.


Bildschirm leeren

Innerhalb der Schleife rufen wir:

glClear(GL_COLOR_BUFFER_BIT);

Das ist extrem wichtig. Der Bildschirm wird damit jedes Mal neu gelöscht, bevor etwas gezeichnet wird. Ansonsten würden sich alle Objekte frame für frame übereinander stapeln – das sieht dann einfach nur noch nach Grafikmüll aus.


Das erste Dreieck

Jetzt beginnt eigentlich erst der spannende Teil – wir zeichnen ein farbiges Dreieck:

glBegin(GL_TRIANGLES);

Das sagt OpenGL: "Okay, ich will jetzt ein Dreieck zeichnen – ich geb dir gleich drei Punkte."

Dann folgen die Punkte mit den jeweiligen Farben:

glColor3f(1, 0, 0);       // Rot
glVertex2f(-0.5f, -0.5f); // Unten links

glColor3f(0, 1, 0);       // Grün
glVertex2f( 0.5f, -0.5f); // Unten rechts

glColor3f(0, 0, 1);       // Blau
glVertex2f( 0.0f,  0.5f); // Oben Mitte

Was hier passiert:

  • Du sagst: „Nimm jetzt Rot und setze den ersten Punkt da links unten.“
  • Dann: „Jetzt Grün für den nächsten Punkt rechts unten.“
  • Und zum Schluss Blau für den Punkt oben.

Weil die Farben sich unterscheiden, erzeugt OpenGL automatisch einen Verlauf – es sieht also richtig smooth aus, obwohl du nur drei Farben angegeben hast.

Zum Abschluss noch:

glEnd();

Das beendet den "Zeichnen"-Block.


Wenn du das Ganze zusammen ausführst, bekommst du ein Fenster mit einem schwarz gefärbten Hintergrund und einem schönen bunten Dreieck in der Mitte. Damit hast du das Grundgerüst für klassische Immediate Mode OpenGL fertig – und kannst darauf aufbauen.
image.png
Im nächsten Teil zeige ich, wie man einfache Transformationen wie Rotation oder Verschiebung macht – da kommt dann auch langsam die Mathe ins Spiel.

Bis dahin, Cheers!

Sort:  

das ist toll. Könnte ich auch mal versuchen.
Welche Programme braucht man?
Editor,
Ist dann OpenGL im allgemeinen eine Art Schnittstelle, mit der man zB mit C++ zugreifen kann?

...
oh, noch vergessen
machst du daraus eine cpp Datei?
Kannst du vllt. in Summe zeigen, wie der Code am Ende aussehen soll?

Hallo,

Vielen Dank für dein Interesse 😄

zunächst einmal gibt es verschiedene Grafikschnittstellen wie z. B. DirectX, Vulkan oder OpenGL. OpenGL läuft auf sehr vielen Geräten und ist in älteren Versionen oft bereits auf dem PC vorinstalliert. Die neueren Versionen von OpenGL sind etwas komplexer einzurichten, da sie moderne Konzepte wie Shader voraussetzen.

GLFW dient dazu, OpenGL-Code auf Betriebssystemen wie Windows in einem Fenster darzustellen. Es ist also ausschließlich dafür zuständig, ein Fenster zu erstellen und Eingaben sowie Kontextverwaltung bereitzustellen – OpenGL selbst kümmert sich um das Rendering.

OpenGL kann mit verschiedenen Programmiersprachen verwendet werden, zum Beispiel auch mit Java über LWJGL.

Ich persönlich benutze häufig VS Code oder CLion für die C++ Entwicklung. Für den Einstieg empfehle ich CLion, da dort bereits vieles schon konfiguriert ist und man sich weniger mit der Einrichtung beschäftigen muss.

Hier ist ein Link zu GitHub, wo du die Dateien findest:

https://github.com/platuro/Lerne-OpenGL/tree/main

Der Editor sollte kein Problem sein, habe OpenSuse als Betriebssystem.
Aber was ich danach aufsetze, weiß ich noch nicht. Vielleicht mal KI oder so fragen.
Vielleicht lerne ich dabei auch gleich ein wenig Rust mit (das habe ich mal versucht zu lernen).

Herzlich Willkommen zurück 😊

Congratulations @platuro! You received a personal badge!

Happy Hive Birthday! You are on the Hive blockchain for 7 years!

You can view your badges on your board and compare yourself to others in the Ranking

Check out our last posts:

Hive Power Up Day - June 1st 2025