VBO,VAO、glVertexPointer()、glVertexAttribPointer()

来源:互联网 发布:我的世界自瞄辅助js 编辑:程序博客网 时间:2024/05/24 04:57

一个三角形顶点数据

float position[9]={-0.8f, -0.8f, 0.0f,0.8f, -0.8f, 0.0f,0.0f, 0.8f, 0.0f};

 


  

一、

/***单独vao绘制***/glEnableClientState(GL_VERTEX_ARRAY);glVertexPointer(3, GL_FLOAT, 0,position);/*size:指定每个顶点对应的坐标个数,可取2,3,4     type:指定数组中每个顶点坐标的数据类型:GL_BYTE, GL_SHORT,GL_FIXED,GL_FLOAT;   stride:指定连续顶点间的字节排列方式,即<从一个数据的开始到下一个数据的开始,所相隔的字节数>,为0表示数组中的顶点被认为按照紧凑方式排列,默认为0;   pointer:指定了数组中第一个顶点的首地址,默认值为0。*/glDrawArrays(GL_TRIANGLES, 0, 3);glDisableClientState(GL_VERTEX_ARRAY);



二、

/***单独vbo绘制***/GLuint vboNum;glGenBuffers(1,&vboNum);glBindBuffer(GL_ARRAY_BUFFER,vboNum);glBufferData(GL_ARRAY_BUFFER,9*sizeof(float),position,GL_STATIC_DRAW);glEnableClientState(GL_VERTEX_ARRAY);glVertexPointer(3, GL_FLOAT, 0, 0);glDrawArrays(GL_TRIANGLES, 0, 3);glDisableClientState(GL_VERTEX_ARRAY);

三、

/***使用glVertexPointer()、vbo和vao传递数据***//***vbo***/GLuint vboNum;glGenBuffers(1,&vboNum);glBindBuffer(GL_ARRAY_BUFFER,vboNum);glBufferData(GL_ARRAY_BUFFER,9*sizeof(float),position,GL_STATIC_DRAW);/***vao***/GLuint vaoNum;glGenVertexArrays(1,&vaoNum);glBindVertexArray(vaoNum);glBindBuffer(GL_ARRAY_BUFFER,vboNum);glVertexPointer(3, GL_FLOAT, 0,(void *)NULL);glEnableClientState(GL_VERTEX_ARRAY);glBindVertexArray(vaoNum);glDrawArrays(GL_TRIANGLES, 0, 3 );glDisableClientState(GL_VERTEX_ARRAY);

四、

/***使用glVertexAttribPointer()、vbo和vao传递数据***//***vbo***/GLuint vboNum;glGenBuffers(1,&vboNum);glBindBuffer(GL_ARRAY_BUFFER,vboNum);glBufferData(GL_ARRAY_BUFFER,9*sizeof(float),position,GL_STATIC_DRAW);/***vao***/GLuint vaoNum;glGenVertexArrays(1,&vaoNum);glBindVertexArray(vaoNum);glEnableVertexAttribArray(0);glBindBuffer(GL_ARRAY_BUFFER,vboNum);glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,0,(void *)NULL);glBindVertexArray(vaoNum);glDrawArrays(GL_TRIANGLES, 0, 3 );