ProgrammingのTipなど

基本的なGLUTのプログラム


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) 

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

メニュー2

開くメニュー

閉じるメニュー

  • アイテム
  • アイテム
  • アイテム
【メニュー編集】

管理人/副管理人のみ編集できます