最終更新:
mikk_ni3_92 2010年02月08日(月) 18:24:47履歴
現在地 >> メニュー >> 基本編27 >> 基本編27::まとめコード1
#include <gl/glut.h> //----------- プロトタイプ宣言 --------------// void display(); void reshape(int w, int h); void timer(int value); void drawSquare(); //------------- OpenGLの初期設定 ------------------// void GLUT_INIT() { glutInitDisplayMode(GLUT_RGBA| GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(640,480); glutCreateWindow("Culling"); } void GLUT_CALL_FUNC() { glutDisplayFunc(display); glutReshapeFunc(reshape); glutTimerFunc(0,timer,17); } void MY_INIT() { glClearColor(1.0, 1.0, 1.0, 1.0); glClearDepth(1.f); glEnable(GL_DEPTH_TEST); glFrontFace(GL_CCW);//反時計回りが表 glEnable(GL_CULL_FACE);//カリングON } //------------- メイン関数 ----------------// int main(int argc, char **argv) { glutInit(&argc,argv); GLUT_INIT(); GLUT_CALL_FUNC(); MY_INIT(); glutMainLoop(); return 0; } //------------ ここからコールバック関数 ------------------// void display() { static int r = 0; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3f(0,1,0); glPushMatrix(); glTranslatef(-2,0,0); glRotatef(static_cast<float>(r), 0.0, 1.0, 0.0); glCullFace(GL_BACK);//裏面をカリング drawSquare(); glPopMatrix(); glColor3f(0,1,1); glPushMatrix(); glTranslatef(2,0,0); glRotatef(static_cast<float>(r), 0.0, 1.0, 0.0); glCullFace(GL_FRONT);//表面をカリング drawSquare(); glPopMatrix(); glColor3f(1,1,1); glutSwapBuffers(); glCullFace(GL_BACK);//カリングをデフォルトにする if(++r > 360){ r= 0; } } void reshape(int w, int h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(30.0, w / (double)h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0.0, 4.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); } void timer(int t) { glutPostRedisplay(); glutTimerFunc(t,timer,17); //タイマー関数 } //----------- ここから各種関数 ----------------// void drawSquare() { glBegin(GL_QUADS); glVertex2f(-1,1); glVertex2f(-1,-1); glVertex2f(1,-1); glVertex2f(1,1); glEnd(); }