OpenGL mit Delphi Allgemeines OpenGL-Funktionsbezeichnungen Aufbau eines OpenGL-Programms Unser erstes Dreieck Farben Transformationen
Allgemeines 3D Grafik API 1992 von SGI aus IrisGL hervorgegangen Schnittstelle zur 3D Programmierung Unterstützung für Hardwarebeschleunigung Unabhängig vom Betriebssystem 1992 von SGI aus IrisGL hervorgegangen Offener Standard
Vorteile und Nachteile Läuft unter verschiedenen Betriebssystemen wie Windows, Linux oder MacOS Weit verbreitet Von führenden Grafikkartenherstellern anerkannt Nachteile: Nur Grafik, im Gegensatz zu DirectX Teilweise sehr unübersichtlich
OpenGL-Funktionsbezeichnungen Alle OpenGL-Funktionen besitzen eine standardisierte Namensgebung: glVertex3f(x, y, z); Parameter Aufgabe der Funktion Anzahl der Parameter Typ der Parameter
Aufbau eines OpenGL-Programms } function InitGL begin ... end function Render glClear(GL_COLOR_BUFFER_BIT) glBegin([Primitiventyp]) glVertex(1, 2, 3) glEnd() OpenGL initialisieren
Primitiven GL_POINTS GL_LINES GL_LINE_STRIP GL_TRIANGLES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_QUAD GL_POLYGON
Unser erstes Dreieck Procedure Draw; begin glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3f(1.5,-1.5,-5); glVertex3f(0,1.5,-5); glVertex3f(-1.5,-1.5,-5); glEnd(); SwapBuffers(DC); end;
Farben Procedure Draw; begin glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glColor3f(1,0,0); glVertex3f(1.5,-1.5,-5); glColor3f(0,1,0); glVertex3f(0,1.5,-5); glColor3f(0,0,1); glVertex3f(-1.5,-1.5,-5); glEnd(); SwapBuffers(DC); end;
Transformationen OpenGL benutzt Matrizen um Objekte zu verschieben, drehen und zu skalieren. Dafür gibt es: glTranslatef(x,y,z) glRotatef(Winkel,x,y,z) glScalef(x,y,z) glLoadIndentity() setzt die Matrix in ihre Ursprungsform zurück. Vorsicht! Das Kommutativgesetz gilt bei der Matrizenrechnung nicht, d.h. es ist nicht egal in welcher Reihenfolge die Funktionen aufgerufen werden.
Beispiel zu Transformationen glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); glLoadIdentity; glTranslatef(0,0,-5); glRotatef(Rotation,0,1,0); glScalef(0.5,0.5,0.5); glBegin(GL_TRIANGLES); glColor3f(1,0,0); glVertex3f(1.5,-1.5,0); glColor3f(0,1,0); glVertex3f(0,1.5,0); glColor3f(0,0,1); glVertex3f(-1.5,-1.5,0); glEnd(); SwapBuffers(DC); Rotation ist eine Variable, die einen Winkel im Gradmaß enthält und mit einem Delphi-Timer verändert wird.
Gute OpenGL-Tutorials http://nehe.gamedev.net/