OpenGL顶点缓冲区例子

顶点缓冲区和顶点数组比较类似,但可以一次性将顶点数组放到缓冲区中,节省资源。

绘制部分代码如下:

  1 #define BUFFER_COUNT 2

 2 #define FOR_VERTICES 0
 3 #define FOR_INDICES  1
 4 static GLuint buffers[BUFFER_COUNT];
 5 
 6 static void Draw()
 7 {
 8     static GLfloat vertices[][3] = {
 9         { 0.5f, -sqrt(6.0f)/12, -sqrt(3.0f)/6},  
10         {-0.5f, -sqrt(6.0f)/12, -sqrt(3.0f)/6}, 
11         { 0.0f, -sqrt(6.0f)/12,  sqrt(3.0f)/3}, 
12         { 0.0f,  sqrt(6.0f)/4,              0}
13     }; // 顶点数组
14 
15     static GLuint vertexIndices[][3] = {
16         {012},
17         {023},
18         {213},
19         {103},
20     }; // 序号数组
21 
22     // 一次分配两个缓冲区,并将顶点数据指定到其中
23     glGenBuffers(2, buffers);  
24 
25     // 绑定和载入顶点数组,告诉它使用顶点数组
26     glBindBuffer(GL_ARRAY_BUFFER, buffers[FOR_VERTICES]); 
27     glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); 
28 
29     // 绑定和载入顶点索引数组
30     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffers[FOR_INDICES]); 
31     glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(vertexIndices), vertexIndices, GL_STATIC_DRAW);  
32     
33     // 和单纯使用顶点数组一样,需要声明顶点数组。
34     // 绑定缓冲区对象后,最后一个参数不再是指向数组的指针,而是
35     // 被解释为一个整数,表示相对于缓冲区的偏移。
36     glVertexPointer(3, GL_FLOAT, 0, (void *)0);
37     glEnableClientState(GL_VERTEX_ARRAY);  
38     glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_INT, (void *)0); 
39 }
posted @ 2013-10-23 16:56  海阔凭鱼跃..  阅读(392)  评论(0编辑  收藏  举报