OpenGL mit GLUT: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K
K
Zeile 1: Zeile 1:
 
{{Offline}}
 
{{Offline}}
  
=OpenGL unter Linux=
+
=OpenGL mit GLUT=
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.
+
GLUT bietet die Möglichkeit OpenGL-Anwendungen Betriebsystem unabhänig zu schreiben
 +
 
 
==Erklärung des Quelltextes==
 
==Erklärung des Quelltextes==
 
Zunächst wird mit [[glutInit]] OpenGL initialisiert. Daraufhin legt man mit [[glutInitDisplayMode]] fest welche [[Puffer]] man haben möchte. GLUT_DOUBLE legt zum Beispiel fest das [[Doppelpufferung]] verwendet wird. Alternativ könnte hier auch GLUT_SINGLE für einen einfachen [[Puffer]] stehen. Anschließend wird die Größe und eventuell auch die Position des Fensers mit [[glutInitWindowSize]] und [[glutInitWindowPosition]] festgelegt. Darauf folgt dann die Erzeugung des Fensters mit einem Wunschtitel (per [[glutCreateWindow]]).  
 
Zunächst wird mit [[glutInit]] OpenGL initialisiert. Daraufhin legt man mit [[glutInitDisplayMode]] fest welche [[Puffer]] man haben möchte. GLUT_DOUBLE legt zum Beispiel fest das [[Doppelpufferung]] verwendet wird. Alternativ könnte hier auch GLUT_SINGLE für einen einfachen [[Puffer]] stehen. Anschließend wird die Größe und eventuell auch die Position des Fensers mit [[glutInitWindowSize]] und [[glutInitWindowPosition]] festgelegt. Darauf folgt dann die Erzeugung des Fensters mit einem Wunschtitel (per [[glutCreateWindow]]).  
Zeile 14: Zeile 15:
  
 
==Code-Übersicht==
 
==Code-Übersicht==
 +
=== C++ ===
 
  #ifdef _WIN32
 
  #ifdef _WIN32
 
   #include <windows.h>
 
   #include <windows.h>
Zeile 107: Zeile 109:
 
   glutSwapBuffers();
 
   glutSwapBuffers();
 
  }
 
  }
 +
=== Pascal ===
  
 
== Compilern ==
 
== Compilern ==
 +
==== GNU C++ Compiler unter Linux ====
 
Mit dem GNU C++ Compiler den fast jedes Unix System enthält kann nun das Programm compilert werden.
 
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:
 
In der Konsole gibt man nun einfach ein:
Zeile 114: Zeile 118:
 
Das fertige Programm kann man mit folgenden Befehl ausführen:
 
Das fertige Programm kann man mit folgenden Befehl ausführen:
 
  <b>./a.out</b>
 
  <b>./a.out</b>
 +
 +
==== Dev-C++ unter Windows ====
 +
Unter Projekt/Projekt Optionen müssen dem Linker noch zusätzlich folgende Parameter angegeben werden:
 +
 +
-lglut
 +
-lopengl32
 +
-lglu32
 
[[Kategorie:Anleitung]]
 
[[Kategorie:Anleitung]]

Version vom 18. April 2005, 19:08 Uhr

Hinweis: Dieser Artikel wird gerade Offline bearbeitet!

Bitte haben Sie etwas Geduld und nehmen Sie keine Änderungen vor, bis der Artikel hochgeladen wurde.

(weitere Artikel)
WIP Offline.jpg

OpenGL mit GLUT

GLUT bietet die Möglichkeit OpenGL-Anwendungen Betriebsystem unabhänig zu schreiben

Erklärung des Quelltextes

Zunächst wird mit glutInit OpenGL initialisiert. Daraufhin legt man mit glutInitDisplayMode fest welche Puffer man haben möchte. GLUT_DOUBLE legt zum Beispiel fest das Doppelpufferung verwendet wird. Alternativ könnte hier auch GLUT_SINGLE für einen einfachen Puffer stehen. Anschließend wird die Größe und eventuell auch die Position des Fensers mit glutInitWindowSize und glutInitWindowPosition festgelegt. Darauf folgt dann die Erzeugung des Fensters mit einem Wunschtitel (per glutCreateWindow).

Nun erfolgt ein wichtiger Schritt, in dem man dem GLUT Funktionen für verschiedene Aufgaben zuweist. Am wichtigsten dürfte hierbei die Zuweisung der Zeichenfunktion per glutDisplayFunc sein. Des weitern wären da vielleicht noch folgende Funktionen:

  1. glutReshapeFunc - Zur Reaktion auf Größenänderungen
  2. glutSpecialFunc - Zur Reaktion auf das Drücken einer Sondertaste. z.B.: Pfeiltasten

Schlussendlich startet man dann noch eine Endlosschleife mit glutMainLoop, welche dann wiederum die oben übergebenen Funktionen aufruft.

Code-Übersicht

C++

#ifdef _WIN32
  #include <windows.h>
  #include <gl/gl.h>
  #define GLUT_DISABLE_ATEXIT_HACK
#endif
#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(); }

Pascal

Compilern

GNU C++ Compiler unter Linux

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

Dev-C++ unter Windows

Unter Projekt/Projekt Optionen müssen dem Linker noch zusätzlich folgende Parameter angegeben werden:

-lglut
-lopengl32
-lglu32