用顶点数组绘制立方体

来源:互联网 发布:网络布线施工 编辑:程序博客网 时间:2024/04/30 02:56
Code:
  1. #include <stdlib.h>   
  2. #include <stdio.h>   
  3. #include <gl/glut.h>   
  4.   
  5. static GLfloat vertices[] = {-5.0, 0.0, 5.0,   
  6.                          5.0, 0.0, 5.0,   
  7.                          5.0, 0.0, -5.0,   
  8.                          -5.0, 0.0, -5.0,   
  9.                          -5.0, 10.0, 5.0,   
  10.                          5.0, 10.0, 5.0,   
  11.                          5.0, 10.0, -5.0,   
  12.                          -5.0, 10.0, -5.0};   
  13. /*  
  14. static GLfloat vertices[] = {-0.25, 0.0, 0.25,  
  15.                             0.25, 0.0, 0.25,  
  16.                             0.25, 0.0, -0.25,  
  17.                             -0.25, 0.0, -0.25,  
  18.                             -0.25, 0.5, 0.25,  
  19.                             0.25, 0.5, 0.25,  
  20.                             0.25, 0.5, -0.25,  
  21.                             -0.25, 0.5, -0.25};  
  22. */  
  23. static GLubyte front[] = {0, 1, 5, 4};   
  24. static GLubyte right[] = {1, 2, 6, 5};   
  25. static GLubyte back[] = {2, 6, 7, 3};   
  26. static GLubyte left[] = {0, 4, 7, 3};   
  27. static GLubyte bottom[] = {0, 1, 2, 3};   
  28. static GLubyte top[] = {4, 5, 6, 7};   
  29.   
  30. static GLfloat colors[] = {0.5, 0.3, 0.3,   
  31.                            0.6, 0.5, 0.6,   
  32.                            0.8, 0.3, 0.1,   
  33.                            0.2, 0.5, 0.1,   
  34.                            0.4,0.8, 0.3,   
  35.                            0.9, 0.1, 0.32,   
  36.                            0.2, 0.1, 0.6,   
  37.                            0.9, 0.2, 0.1};   
  38.   
  39. void init(void)   
  40. {   
  41.     glClearColor(0.0, 0.0, 0.0, 0.0);   
  42.     glShadeModel(GL_SMOOTH);   
  43. }   
  44.   
  45. void display(void)   
  46. {   
  47.     glClear(GL_COLOR_BUFFER_BIT);   
  48.     glLoadIdentity();   
  49.     gluLookAt(25.0, 25.0, 25.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);   
  50.        
  51. //  gluLookAt(2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);   
  52. //  glColor3f(1.0, 1.0, 1.0);   
  53.     glEnableClientState(GL_VERTEX_ARRAY);   
  54.     glEnableClientState(GL_COLOR_ARRAY);   
  55.     glColorPointer(3, GL_FLOAT, 0, colors);   
  56.     glVertexPointer(3, GL_FLOAT, 0, vertices);   
  57.     glDrawElements(GL_LINE_LOOP, 4, GL_UNSIGNED_BYTE,front);   
  58.     glDrawElements(GL_LINE_LOOP, 4, GL_UNSIGNED_BYTE, right);   
  59.     glDrawElements(GL_QUADS, 4, GL_UNSIGNED_BYTE, back);   
  60.     glDrawElements(GL_QUADS, 4, GL_UNSIGNED_BYTE, left);   
  61.     glDrawElements(GL_QUADS, 4, GL_UNSIGNED_BYTE, bottom);   
  62.     glDrawElements(GL_LINE_LOOP, 4, GL_UNSIGNED_BYTE, top);   
  63.   
  64.     glDisableClientState(GL_COLOR_ARRAY);   
  65.     glDisableClientState(GL_VERTEX_ARRAY);   
  66.     glFlush();   
  67. }   
  68.   
  69. void reshape(int w, int h)   
  70. {   
  71.     double aspect;   
  72.     if(0 == h)   
  73.         h = 1;   
  74.     aspect = 1.0*w/h;   
  75.   
  76.     glViewport(0, 0, (GLsizei)w, (GLsizei)h);   
  77.     glMatrixMode(GL_PROJECTION);   
  78.     glLoadIdentity();   
  79.     gluPerspective(45.0, aspect, 0.1, 50.0);   
  80.     glMatrixMode(GL_MODELVIEW);   
  81. }   
  82.   
  83. int main(int argc, char *argv[])   
  84. {   
  85.     glutInit(&argc, argv);   
  86.     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);   
  87.     glutInitWindowSize(320, 320);   
  88.     glutInitWindowPosition(100, 100);   
  89.     glutCreateWindow("Cube First");   
  90.     init();   
  91.     glutReshapeFunc(reshape);   
  92.     glutDisplayFunc(display);   
  93.     glutMainLoop();   
  94.     return 0;   
  95. }  

 

原创粉丝点击