Computergrafik-Uebung

OpenGL Window + Context

?

C++ Rahmenprogramm zum Öffnen eines Fensters mit einem OpenGL Rendering Context:

#include <math.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>

#ifndef __APPLE__
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#else
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#include <GLUT/glut.h>
#endif

static int winwidth,winheight,winid;

void renderfunc()
   {
   // clear OpenGL frame buffers (color and z buffer)
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

   // additional OpenGL code goes here:
   // ...

   // swap front and back buffers to show actual frame
   glutSwapBuffers();
   }

void reshapefunc(int width,int height)
   {
   winwidth=width;
   winheight=height;

   glViewport(0,0,width,height);

   renderfunc();
   }

void keyboardfunc(unsigned char key,int x,int y)
   {
   float mousex,mousey;

   mousex=(float)x/(winwidth-1);
   mousey=(float)y/(winwidth-1);

   if (tolower(key)=='q' || key==27)
      {
      glutDestroyWindow(winid);
      exit(0);
      }
   }

void openwindow(int *argc,char *argv[],
                int width,int height)
   {
   winwidth=width;
   winheight=height;

   glutInit(argc,argv);
   glutInitWindowSize(winwidth,winheight);
   glutInitDisplayMode(GLUT_RGB |
                       GLUT_DEPTH |
                       GLUT_DOUBLE);
   winid=glutCreateWindow("OpenGL");

   glutDisplayFunc(renderfunc); // for regular rendering
   glutReshapeFunc(reshapefunc);
   glutMouseFunc(NULL);
   glutMotionFunc(NULL);
   glutKeyboardFunc(keyboardfunc);
   glutSpecialFunc(NULL);
   glutIdleFunc(NULL); // for continuous rendering

   glutMainLoop(); // event loop, never returns
   }

int main(int argc,char *argv[])
   {
   openwindow(&argc,argv,512,512);

   return(0);
   }

Unter Unix muss OpenGL und FreeGLUT installiert sein. Falls nicht, installieren Sie freeglut im Projektverzeichnis ~/Projects:

> ./configure --prefix ~/Projects
> make
> make install

Auf MacOS X ist die GLUT bereits vorhanden.

Speichern Sie den Quelltext unter dem Dateinamen glut.cpp ab.

Unter MacOS X übersetzen mit:

g++ glut.cpp -o glut -framework OpenGL -framework GLUT

Unter Linux übersetzen mit:

g++ glut.cpp -o glut -lGL -lGLU -lglut

Wenn Sie Freeglut in ~/Projects installiert haben, unter Linux übersetzen mit:

g++ glut.cpp -o glut -lGL -lGLU -lglut -I ~/Projects/include -L ~/Projects/lib

Das erzeugte Programm glut öffnet nun ein Fenster und zeichnet mit OpenGL einen schwarzen Hintergrund.

BlackWindow

In der Funktion renderfunc können weitere OpenGL Kommandos eingefügt werden, wie z.B. OpenGL Kommandos zum Zeichnen von mehreren Punkten:

gluOrtho2D(0,0,1,1);
glPointSize(10);
glBegin(GL_POINTS);
glVertex2f(0.0f,0.0f);
glVertex2f(0.5f,0.5f);
glEnd();

Options: