首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Opengl ES之EBO

前面我们介绍了VBO与VAO等缓冲对象,今天我们来介绍一下EBO。

EBO是个啥

EBO(Element Buffer Object,也叫IBO:Index Buffer Object)索引缓冲区对象,这个缓冲区主要用来存储顶点的索引信息,索引的意义在于减少重复数据,主要是在函数中使用。

在之前的文章中,我们绘制三角形、四边形等,因为顶点数据或者公用的顶点坐标不多,都是调用函数进行绘制的,试想一下,如果需要绘制一个顶点数量比较多,而且多个顶点之间需要经过不同的组合进行顶点复用的,那么函数及很难满足绘制需求了,此时就需要使用EBO搭配函数进行绘制了,例如使用8个顶点绘制一个正方体的例子。

在OpenGL通过索引缓冲对象(EBO)来对顶点进行复用,做到重复的顶点只需要分配一次内存,再绘图的时候后通过EBO告诉GPU顶点的索引。

如果使用了EBO,那么绘图函数通过索引到相应的顶点缓冲区去拿数据,如果绑定了VAO就到VAO里拿数据。

EBO的使用

EBO的使用和前面介绍的VBO的使用差不多:

函数创建对象ID

函数绑定EBO

与VBO类似,只不过EBO的类型变成了GL_ELEMENT_ARRAY_BUFFER

函数绑定数据

对于GL_STATIC_DRAW等几个参数的类型在VBO的文章中已经做了介绍,这里就不多说了,童鞋们可以看之前的文章。

当以上步骤配置完毕就可以使用EBO了,在绘制函数调用前调用函数进行绑定即可使用。

在析构函数中调用函数销毁EBO

注意:笔者在结合使用VAO、VBO和EBO的时候发现,解除绑定时需要先解除VAO的绑定,再解除其他VBO及EBO的绑定,否则可能会导致绘制不生效。

实例Demo

我们沿用之前VBO/VAO绘制四边形的例子,在上面拓展一下使用四个顶点坐标结合EBO绘制一个四边形。

主要代码EBOOpengl.cpp:

技巧:在确保数据不会发生溢出的情况下尽量使用占有内存小的数据类型以节约内存,例如使用short比int要节省,使用byte比short要节省。

关注我,一起进步,人生不止coding!!!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20220927A012OC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券