/* sample-cylinder.c */ #include #include #include "myShape.h" float param = 0.0; int flag = 0.0; float diffuse[ ] = {1.0, 0.0, 0.0, 1.0}; float specular[ ] = {1.0, 1.0, 1.0, 1.0}; float ambient[ ] = {0.1, 0.1, 0.1, 1.0}; float shininess = 128.0; void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* zバッファを初期化 */ glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, specular); glMaterialfv(GL_FRONT, GL_AMBIENT, ambient); glMaterialf(GL_FRONT, GL_SHININESS, shininess); glEnable(GL_LIGHTING); glPushMatrix(); glTranslatef(0.0, 1.0, 0.0); mySolidCylinder(1.0, 2.0, 12); glPopMatrix(); glDisable(GL_LIGHTING); glutSwapBuffers(); } void idle(void) { if(flag == 1){ param = fmod(param+1.0, 360.0); if(param == 0.0) flag = 0; } glutPostRedisplay(); } void mouse(int button, int state, int x, int y) { if(state == GLUT_DOWN){ switch(button){ case GLUT_LEFT_BUTTON: flag = 1; break; case GLUT_RIGHT_BUTTON: break; } } } void keyboard(unsigned char key, int x, int y) { switch (key) { case 'q': exit(0); default: break; } } void init(char *winname) { glutInitWindowPosition(0, 0); glutInitWindowSize(500, 500); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); /* zバッファ利用の宣言 */ glutCreateWindow(winname); glClearColor(0.0, 0.0, 0.0, 1.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(30.0, 1.0, 1.0, 100.0); /* 透視投影の設定 */ glMatrixMode(GL_MODELVIEW); gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); /* 視点の設定 */ glShadeModel(GL_FLAT); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); /* 隠面処理の開始を宣言 */ } int main(int argc, char *argv[]) { glutInit(&argc, argv); init(argv[0]); glutDisplayFunc(display); glutKeyboardFunc(keyboard); glutMouseFunc(mouse); glutIdleFunc(idle); glutMainLoop(); return 0; }