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 }

转载于:https://www.cnblogs.com/cjyu/p/3384529.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值