displayに描画処理やonKeyboardにキーイベント
onTimerにタイマー処理を書き
それぞれの関数ポインタを
main関数内でGLUTのコールバックに渡している
Linux環境でコンパイルするには(GLUTはすでにインストールされてる前提で)
g++ -o 実行ファイル名 ソースファイル名.cc -Lglut -LGL -lGLUとコマンド
WindowsのMSYS2のMinGW64では
x86_64-w64-mingw32-g++ main.cpp -o a -L /mingw64/lib -lfreeglut -lopengl32 -lglu32
Windows環境のMSYS2版のglutだとコンソールがそのまま出続けてしまうので
FreeConsole();
をmain関数内に書くことで消すことができます
FreeConsole();には
Windows.h
をインクルードする必要があります
三角形を描画するプログラム
main.cpp
#include <GL/glut.h> #include <GL/gl.h> #include <GL/glu.h> void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(0,0,-5); glColor3f(0,0,1); glBegin(GL_TRIANGLES); glVertex3f(-1,0,0); glVertex3f(0, 1,0); glVertex3f( 1,0,0); glEnd(); glutSwapBuffers(); } void onKeyboard(unsigned char key, int x, int y) { switch (key) { case '\033': exit(0); default: break; } } void onMouse(int button, int state, int x, int y) { switch (button) { case GLUT_LEFT_BUTTON: break; case GLUT_MIDDLE_BUTTON: break; case GLUT_RIGHT_BUTTON: break; default: break; } } void onReshape(int width, int height) { if (height==0) height=1; if (width==0) width=1; glViewport(0,0,width,height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void timer(int value) { glutPostRedisplay(); glutTimerFunc(30 , timer , 0); } void glInit(void) { glClearColor(0.9, 0.9, 0.9, 1.0); glShadeModel(GL_SMOOTH); glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowSize(750,750); int window = glutCreateWindow(argv[0]); glutDisplayFunc(display); glutReshapeFunc(onReshape); glutMouseFunc(onMouse); glutKeyboardFunc(onKeyboard); glutTimerFunc(50 , timer , 0); glInit(); glutMainLoop(); return 1; }mekeでコンパイルしたい場合は
次のようなmakefileを書いてください
ソースファイルは
main.cpp
という前提です
makefile
SOURCE = main EXTENSIONTYPE = cpp INCLUDE = -I/usr/include/ LIBDIR = -L/usr/X11R6/lib CC = g++ CFLAGS = -Wall LIBRARIES = -lglut -lGL -lGLU EXENAME = $(SOURCE) OBJ = $(SOURCE).o all: $(OBJ) $(CC) $(CFLAGS) $(INCLUDE) -o $(EXENAME) $(LIBDIR) $(OBJ) $(LIBRARIES) $(SOURCE).o: $(SOURCE).$(EXTENSIONTYPE) $(CC) $(CFLAGS) $(INCLUDE) -c $^ $(LIBDIR) $(LIBRARIES) clean: rm $(OBJ) $(EXENAME)
コメントをかく