OpenGL mit GLUT: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (Vorerst mal der Kategorie Anleitung zugeordnet)
()
Zeile 1: Zeile 1:
 
=OpenGL unter Linux=
 
=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.
 
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.
 +
==Erklärung des Quelltextes==
 +
Zunächst wird mit [[glutInit]] OpenGL initialisiert. Danach [[glutInitDisplayMode]] festgelegt welche Puffer man haben möchte. GLUT_DOUBLE legt zum Beispiel fest das ein [[Doublebuffer]] verwendet wird. Alternativ könnte hier auch GLUT_SINGLE für einen einfachen [[Puffer]] stehen. Anschießend wird die größe und auch eventuell auch Position des Fensers mit [[glutInitWindowSize]] und [[glutInitWindowPosition]] festgelegt. Anschießend wird dann per [[glutCreateWindow]] das Fenster mit einem Wunschtitel erzeugt werden.
 +
 
==Code-Übersicht==
 
==Code-Übersicht==
 
  #include <GL/glut.h><br />
 
  #include <GL/glut.h><br />

Version vom 14. Februar 2005, 10:49 Uhr

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.

Erklärung des Quelltextes

Zunächst wird mit glutInit OpenGL initialisiert. Danach glutInitDisplayMode festgelegt welche Puffer man haben möchte. GLUT_DOUBLE legt zum Beispiel fest das ein Doublebuffer verwendet wird. Alternativ könnte hier auch GLUT_SINGLE für einen einfachen Puffer stehen. Anschießend wird die größe und auch eventuell auch Position des Fensers mit glutInitWindowSize und glutInitWindowPosition festgelegt. Anschießend wird dann per glutCreateWindow das Fenster mit einem Wunschtitel erzeugt werden.

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