最終更新:
mikk_ni3_92 2008年07月23日(水) 18:50:17履歴
現在地 >> メニュー >> 基本編05 >> シェーディングの設定
#include <GL/glut.h> //----------- プロトタイプ宣言 ---------------------// void display(); void reshape(int w, int h); void timer(int value); void menu(int val); //---------- OpenGLの初期設定 ---------------// void GLUT_CALL_FUNCs() { glutDisplayFunc(display); glutReshapeFunc(reshape); glutTimerFunc(0,timer,17); } void GLUT_SET_MENU() { glutCreateMenu(menu); glutAddMenuEntry("SMOOTH", 1); glutAddMenuEntry("FLAT", 2); glutAttachMenu(GLUT_RIGHT_BUTTON); } void MY_INIT() { glClearColor(1.0, 1.0, 1.0, 1.0); glEnable(GL_DEPTH_TEST); //光源の設定 glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE); glEnable(GL_COLOR_MATERIAL); } void GLUT_INITs(int *argcp,char **argv) { glutInit(argcp,argv); glutInitDisplayMode(GLUT_RGBA| GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(640,480); glutCreateWindow("Shade mode"); GLUT_CALL_FUNCs();//コールバック関数の設定 GLUT_SET_MENU();//メニューの設定 MY_INIT(); } //------------- メイン関数 -------------------// int main(int argc, char **argv) { GLUT_INITs(&argc,argv); glutMainLoop(); return 0; } //------------- ここからコールバック ------------------// void display() { static int r = 0; static float light_pos[] = { -10.0, 10.0, 10.0, 0.0 }; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glLightfv(GL_LIGHT0, GL_POSITION, light_pos); glColor3f(0,1,0); glPushMatrix(); glRotatef(static_cast<float>(r), 0.0, 1.0, 0.0); glutSolidSphere(1,20,20); glPopMatrix(); glutSwapBuffers(); if(++r > 360){r= 0;} } void reshape(int w, int h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(30.0, (double)w / (double)h, 0.1, 100.0); glMatrixMode(GL_MODELVIEW); } void timer(int value) { glutPostRedisplay(); glutTimerFunc(value,timer,17); //タイマー関数 } void menu(int val) { switch(val) { case 1: glShadeModel (GL_SMOOTH); break; case 2: glShadeModel (GL_FLAT); break; } }