在openGL中glVertexAttribPointer使用来上传顶点数据到显卡的方法。这里的顶点数据是数组的形式。函数原型如下
void glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *ptr) // index: 着色器脚本对应变量ID // size : 此类型数据的个数 // type : 此类型的sizeof值 // normalized : 是否对非float类型数据转化到float时候进行归一化处理 // stride : 此类型数据在数组中的重复间隔宽度,byte类型计数 // ptr : 数据指针, 这个值受到VBO的影响
在不使用VBO的情况下:事情是这样的,ptr就是一个指针,指向的是需要上传到顶点数据指针。通常是数组名的偏移量。
在使用VBO的情况下:首先要glBindBuffer,以后ptr指向的就不是具体的数据了。因为数据已经缓存在缓冲区了。这里的ptr指向的是缓冲区数据的偏移量。这里的偏移量是整型,但是需要强制转换为const GLvoid *类型传入。注意的是,这里的偏移的意思是数据个数总宽度数值。
比如说:这里存放的数据前面有3个float类型数据,那么这里的偏移就是,3*sizeof(float).
最后解释一下,glVertexAttribPointer的工作原理:
那么,最最后openGL如何知道ptr指向的数组有多长,读取几次呢。是的,openGL不知道。所以在调用绘制的时候,需要传入一个count数值,就是告诉openGL绘制的时候迭代几次glVertexAttribPointer调用。
使用VBO对glVertexAttribPointer的影响,布布扣,bubuko.com
使用VBO对glVertexAttribPointer的影响
原文:http://blog.csdn.net/tom_221x/article/details/38434925