VBO,VAO、glVertexPointer()、glVertexAttribPointer()
一个三角形顶点数据
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 );