OpenGL Window + Context
C++ Rahmenprogramm zum Öffnen eines Fensters mit einem OpenGL Rendering Context:
#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.
In der Funktion renderfunc
können weitere OpenGL Kommandos eingefügt werden, wie z.B. OpenGL Kommandos zum Zeichnen von mehreren Punkten:
glPointSize(10);
glBegin(GL_POINTS);
glVertex2f(0.0f,0.0f);
glVertex2f(0.5f,0.5f);
glEnd();