OpenGL mit GLUT

Aus DGL Wiki
Wechseln zu: Navigation, Suche

OpenGL unter Linux

In diesem Artikel soll eine von vielen Möglichkeiten aufgezeigt werden wie man OpenGL unter Linux nutzen kann. Dazu wird das GLUT und die Programmierspache C++ verwendet.

Code-Übersicht

#include <GL/glut.h>
//Funktion zur festlegung der Startbedinungen void InitGL(void); //GLUT-Funktionen void Render(void); void Resize(int width, int height); void SpecialKey(int key, int x, int y);
// Variablen die Fenster-Eigenschaften speichern int wnd_width = 800; int wnd_height = 600;
// Variablen die die Szehne betreffen. float rotX=0; float rotY=0;
int main(int argc, char **argv) { glutInit(&argc, argv); //Initialsierung der GLUT-Bibliothek glutInitDisplayMode( GLUT_DOUBLE | // doppelter Puffer GLUT_DEPTH | // Tiefen Puffer vorhanden GLUT_RGB); // Farbpuffer mit Rot,Grün und Blau glutInitWindowSize(wnd_width,wnd_height); //Fenstergrösse festlegen(Breite, Höhe) // glutInitWindowPosition(100,100); //Position des Fensters glutCreateWindow("Hallo Welt!"); //Fenstertitel
InitGL();
//Festlegen der Funktionen die GLUT verwenden soll glutDisplayFunc(&Render); // Funktion zum zeichnen des Bildes glutReshapeFunc(&Resize); //Funktion die auf Größenänderungen des Fensers eingeht glutSpecialFunc(&SpecialKey);//Funktion zur Behandlung von Sondertasten z.B.: Pfeiltasten
glutMainLoop(); //eine Art Endlosschleife des Programms }

void InitGL(void) { glClearColor(0.0,0.0,0.0,0.0); //Hintergrundfarbe glEnable(GL_DEPTH_TEST);// Tiefenpuffer nutzen }
void SpecialKey(int key, int x, int y) { switch (key) { case GLUT_KEY_UP: rotX -= 5; break; case GLUT_KEY_DOWN: rotX += 5; break; case GLUT_KEY_LEFT: rotY -= 5; break; case GLUT_KEY_RIGHT: rotY += 5; break; default: return; } glutPostRedisplay(); }
void Resize(int width, int height) { glViewport(0, 0, (GLint)width, (GLint)height); wnd_width = width; wnd_height= height; }
void Render(void) { //Projektionsmatrix einstellen glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, 1.0, 1.0, 200.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); /* Modeltransformation ausfuehren... */ glTranslatef (0.0, 0.0 ,-4.0); // Verschiebung in z-Richtung nach hinten glRotatef (rotX, 1.0, 0.0, 0.0); // Rotation um die x-Achse glRotatef (rotY, 0.0, 1.0, 0.0); // Rotation um die y-Achse glTranslatef (-0.5, -0.5 , -0.5); // Verschiebung glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); // Puffer leeren glBegin (GL_QUADS); glColor3f (0.0, 0.0, 0.0); glVertex3f (0.0, 0.0,0.0); glColor3f (1.0, 0.0, 0.0); glVertex3f (1.0, 0.0,0.0); glColor3f (1.0, 0.0, 1.0); glVertex3f (1.0, 1.0,0.0); glColor3f (0.0, 0.0, 1.0); glVertex3f (0.0, 1.0,0.0); glEnd (); //glFlush(); //Zeichnen /* Back-Buffer in den Front-Buffer kopieren. */ glutSwapBuffers(); }

Compilern

Mit dem GNU C++ Compiler den fast jedes Unix System enthält kann nun das Programm compilert werden. In der Konsole gibt man nun einfach ein:

c++ -lglut NamederDatei.cpp

Das fertige Programm kann man mit folgenden Befehl ausführen:

./a.out