OpenGL ES 2.0总结(1)-VBO与渲染

来源:互联网 发布:陈百祥演技知乎 编辑:程序博客网 时间:2024/05/17 05:13

OpenGL ES 2.0 VBO与渲染


1.VBO初始化

1) glGenBuffers()
生成bufferID
2) glBindBuffer()
操作它,参数为VBO的bufferID
3) glBufferData()
指定里面放的数据和用法

至此想用此VBO时再glBindBuffer()它的bufferID即可,里面一般放顶点数据(包括模型的xyz和纹理坐标uv),另外前提是已经编译和设定好了shader的program

2.使用VBO渲染

1) glEnableVertexAttribArray()
启用与顶点相关的shader的量
事先需要获取到它的handle,
比如
maPositionHandle = GLES20.glGetAttribLocation(mProgram, “aPosition”);
2) glBindBuffer()
操作想使用的VBO,参数为VBO的bufferID
3) glVertexAttribPointer ()
指定VBO里的数据的使用方法
这里有可能有多个glVertexAttribPointer (),它的最后一个参数是使用时每个元素的偏移量,比如顶点是xyzuv的float顶点,每个4*5个字节重复一次,则分开指定xyz坐标和纹理坐标时,最后一个参数的值分别取0和12
另外,最后不适用VBO时,最后一个参数可以直接指定要渲染的缓冲区
4) glDrawArrays()
指定画法(一般为GL_TRIANGLES,即三角形),数量等,即可使用VBO进行绘制
5) glDrawElements()
这是另一种画法,可以通过指定顶点索引的方式来画图形
使用这种方法渲染时,应该生成两块VBO buffer,一个用来存放顶点信息,另一个来存放索引信息,和普通顶点VBO区别是,存放顶点的VBO应该在使用和指定数据时使用GL_ELEMENT_ARRAY_BUFFER,再使用glDrawElements(). 例如
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mBufferHandle[1]);glBufferData(GL_ELEMENT_ARRAY_BUFFER,Count,buffer,GL_STATIC_DRAW);glDrawElements(GL_TRIANGLES,count,GL_UNSIGNED_SHORT, 0);
参考
[OpenGL ES 06]使用VBO:顶点缓存
http://blog.csdn.net/kesalin/article/details/8351935
gles官方文档
https://www.khronos.org/opengles/sdk/docs/man/
0 0
原创粉丝点击