d10070dd

sample23

Sep 14th, 2013
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.08 KB | None | 0 0
  1. #include <gl/glut.h>
  2.  
  3. //---- 頂点データ----//
  4. //4面、3角形、3要素
  5. GLfloat vertexAry[]=
  6. {
  7.     //v0-v1-v3
  8.     0.f, 0.f, 0.f,//0番目
  9.     0.f, 0.f, 1.f,//1番目
  10.     0.f, 1.f, 0.f,//...
  11.     //v0-v2-v1
  12.     0.f, 0.f, 0.f,
  13.     1.f, 0.f, 0.f,
  14.     0.f, 0.f, 1.f,
  15.     //v0-v3-v2
  16.     0.f, 0.f, 0.f,
  17.     0.f, 1.f, 0.f,
  18.     1.f, 0.f, 0.f,
  19.     //v3-v1-v2
  20.     0.f, 1.f, 0.f,//...
  21.     0.f, 0.f, 1.f,//10番目
  22.     1.f, 0.f, 0.f //11番目
  23. };
  24. //法線
  25. GLfloat normalAry[]=
  26. {
  27.     //v0-v1-v3
  28.     -1.f, 0.f, 0.f,//0番目
  29.     -1.f, 0.f, 0.f,//1番目
  30.     -1.f, 0.f, 0.f,//...
  31.     //v0-v2-v1
  32.     0.f, -1.f, 0.f,
  33.     0.f, -1.f, 0.f,
  34.     0.f, -1.f, 0.f,
  35.     //v0-v3-v2
  36.     0.f, 0.f, -1.f,
  37.     0.f, 0.f, -1.f,
  38.     0.f, 0.f, -1.f,
  39.     //v3-v1-v2
  40.     1.f, 1.f, 1.f,//...
  41.     1.f, 1.f, 1.f,//10番目
  42.     1.f, 1.f, 1.f //11番目
  43. };
  44. //色
  45. GLfloat colorAry[]=
  46. {
  47.     //v0-v1-v3
  48.     1.f, 0.f, 0.f,//0番目
  49.     1.f, 0.f, 0.f,//1番目
  50.     1.f, 0.f, 0.f,//...
  51.     //v0-v2-v1
  52.     0.f, 1.f, 0.f,
  53.     0.f, 1.f, 0.f,
  54.     0.f, 1.f, 0.f,
  55.     //v0-v3-v2
  56.     0.f, 0.f, 1.f,
  57.     0.f, 0.f, 1.f,
  58.     0.f, 0.f, 1.f,
  59.     //v3-v1-v2
  60.     1.f, 0.f, 1.f,//...
  61.     1.f, 0.f, 1.f,//10番目
  62.     1.f, 0.f, 1.f //11番目
  63. };
  64.  
  65. //インデックス
  66. GLubyte idxAry[]=
  67. {
  68.     0,1,2,
  69.     3,4,5,
  70.     6,7,8,
  71.     9,10,11
  72. };
  73. //----- 描画--------//
  74. void draw(void)
  75. {
  76.     glEnableClientState(GL_VERTEX_ARRAY);
  77.     glEnableClientState(GL_NORMAL_ARRAY);
  78.     glEnableClientState(GL_COLOR_ARRAY);
  79.    
  80.     glVertexPointer(3,GL_FLOAT,0,vertexAry);
  81.     glNormalPointer(GL_FLOAT,0,normalAry);
  82.     glColorPointer(3,GL_FLOAT,0,colorAry);
  83.     glDrawElements(GL_TRIANGLES,12,
  84.                 GL_UNSIGNED_BYTE,idxAry);
  85.    
  86.     glDisableClientState(GL_VERTEX_ARRAY);
  87.     glDisableClientState(GL_NORMAL_ARRAY);
  88.     glDisableClientState(GL_COLOR_ARRAY);
  89. }
  90.  
  91. //----- 各種コールバック-----///
  92. void display(void)
  93. {
  94.     static int angle = 0;
  95.     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  96.     glLoadIdentity();
  97.     gluLookAt(0.0, 4.0, 4.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
  98.    
  99.     glPushMatrix();
  100.     glRotatef(float(angle),0.f,1.f,0.f);
  101.     glRotatef(float(angle+45),1.f,0.f,0.f);
  102.     draw(); //描画
  103.     glPopMatrix();
  104.    
  105.     glutSwapBuffers();
  106.     if(++angle >= 360) angle = 0;
  107. }
  108.  
  109. void reshape(int w, int h)
  110. {
  111.     glViewport(0,0,w,h);
  112.     glMatrixMode(GL_PROJECTION);
  113.     glLoadIdentity();
  114.     gluPerspective(30.0, double(w)/h,0.1, 200.0);
  115.     glMatrixMode(GL_MODELVIEW);
  116.     glLoadIdentity();
  117. }
  118.  
  119. void idle(void)
  120. {
  121.     glutPostRedisplay();
  122. }
  123. //その他初期設定
  124. void otherInit(void)
  125. {
  126.     glClearColor(1.f, 1.f, 1.f, 1.f);
  127.     glEnable(GL_DEPTH_TEST);
  128.     //光源設定
  129.     glEnable(GL_LIGHT0);
  130.     glEnable(GL_LIGHTING);
  131.     glEnable(GL_NORMALIZE);//法線の正規化
  132.     //カラーマテリアル設定
  133.     glColorMaterial(GL_FRONT_AND_BACK,
  134.                     GL_AMBIENT_AND_DIFFUSE);
  135.     glEnable(GL_COLOR_MATERIAL);
  136. }
  137. //---------- メイン関数----------//
  138. int main(int argc, char *argv[])
  139. {
  140.     //glutの初期設定
  141.     glutInit(&argc, argv);
  142.     glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_DOUBLE);
  143.     glutInitWindowSize(640,480);
  144.     glutCreateWindow("glDrawElements");
  145.  
  146.     //コールバック関数の登録
  147.     glutDisplayFunc(display);
  148.     glutReshapeFunc(reshape);
  149.     glutIdleFunc(idle);
  150.     otherInit();//その他初期設定
  151.  
  152.     glutMainLoop();
  153.     return 0;
  154. }
Advertisement
Add Comment
Please, Sign In to add comment