Advertisement
d10070dd

sample24

Sep 14th, 2013
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.60 KB | None | 0 0
  1. #include <stdlib.h>//glut.hより先にインクルードする
  2. #include <gl/glut.h>
  3.  
  4. //外部変数(キューブ、トーラス、オクタ)
  5. GLuint cubeId,torusId,octaId;
  6. GLuint listId = 0;//制御用Id
  7.  
  8. //------- 各種コールバック-------//
  9. void display(void)
  10. {
  11.     static int angle = 0;
  12.     static GLfloat Light0Pos[]={1,1,1,0}; //光源の位置
  13.     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  14.     glLoadIdentity();
  15.     gluLookAt(0.0, 2.0, 4.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
  16.     glLightfv(GL_LIGHT0, GL_POSITION, Light0Pos);//位置設定
  17.  
  18.     glColor3f(0.f, 1.f, 0.f);
  19.     glPushMatrix();
  20.     glRotatef(float(angle),0.f, 1.f, 0.f);
  21.     glCallList(listId);//ディスプレイ・リストの呼び出し
  22.     glPopMatrix();
  23.     glColor3f(1.f, 1.f, 1.f);
  24.  
  25.     glutSwapBuffers();
  26.     if(++angle >= 360) angle = 0;
  27. }
  28.  
  29. void reshape(int w, int h)
  30. {
  31.     glViewport(0,0,w,h);
  32.     glMatrixMode(GL_PROJECTION);
  33.     glLoadIdentity();
  34.     gluPerspective(30.0, double(w)/h, 0.1, 200.0);
  35.     glMatrixMode(GL_MODELVIEW);
  36.     glLoadIdentity();
  37. }
  38.  
  39. void keyboard(unsigned char key, int w, int h)
  40. {
  41.     switch(key)
  42.     {
  43.     case '1':
  44.         listId = cubeId;
  45.         break;
  46.     case '2':
  47.         listId = torusId;
  48.         break;
  49.     case '3':
  50.         listId = octaId;
  51.         break;
  52.     case 'q':
  53.     case '\033':
  54.         //不要になったら削除
  55.         glDeleteLists(listId, 3); //先頭Idから3つ分
  56.         exit(0);
  57.         break;
  58.     default:
  59.         break;
  60.     }
  61. }
  62.  
  63. void idle(void)
  64. {
  65.     glutPostRedisplay();
  66. }
  67.  
  68. //その他設定
  69. void otherInit(void)
  70. {
  71.     glClearColor(1.f ,1.f, 1.f, 1.f);
  72.     glEnable(GL_DEPTH_TEST);
  73.     //カラーマテリアル
  74.     glColorMaterial(GL_FRONT_AND_BACK,
  75.                     GL_AMBIENT_AND_DIFFUSE);
  76.     glEnable(GL_COLOR_MATERIAL);
  77.     //光源の設定  
  78.     glEnable(GL_LIGHTING);
  79.     glEnable(GL_LIGHT0);
  80.  
  81.     //ディスプレイリスト作成
  82.     //Idを設定
  83.     listId = glGenLists(3); //3つ作成(先頭番号が返る)
  84.     cubeId = listId;
  85.     torusId = listId + 1;
  86.     octaId = listId + 2 ;
  87.     //1つめ
  88.     glNewList(cubeId,GL_COMPILE);
  89.     glutSolidCube(1.0);
  90.     glEndList();
  91.     //2つめ
  92.     glNewList(torusId,GL_COMPILE);
  93.     glutSolidTorus(0.2,0.4,30,30);
  94.     glEndList();
  95.     //3つめ
  96.     glNewList(octaId,GL_COMPILE);
  97.     glutSolidOctahedron();
  98.     glEndList();
  99. }
  100.  
  101. //--------- メイン関数-----------//
  102. int main(int argc, char *argv[])
  103. {
  104.     //glutの初期設定
  105.     glutInit(&argc, argv);
  106.     glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_DOUBLE);
  107.     glutInitWindowSize(640,480);
  108.     glutCreateWindow("display list");
  109.  
  110.     //コールバック関数の登録
  111.     glutDisplayFunc(display);
  112.     glutReshapeFunc(reshape);
  113.     glutKeyboardFunc(keyboard);
  114.     glutIdleFunc(idle);
  115.     otherInit();//その他初期設定
  116.  
  117.     glutMainLoop();
  118.  
  119.     return 0;
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement