这节我们要实现VBO、EBO和VAO的封装。
首先我们把VBO抽象成一个类VertexBuffer。我们将借助类的构造函数和析构函数来自动实现一些基本的操作。
(资料图片)
我们在构造函数中实现VBO对象的创建和绑定:
析构函数实现VBO对象的删除:
此外还要有手动实现绑定和解绑功能的函数:
EBO的封装和VBO完全一样,就不赘述了。
VAO的封装就比较复杂,因为这里涉及到顶点属性的配置。
首先我们需要创建一个类表示顶点数据,这个类中包含顶点和顶点的步长。而一个顶点又是由一系列顶点属性构成,因此我们还需要定义一个结构表示顶点属性:
这里使用模板特化为顶点添加顶点属性。
有了顶点数据,下一步就可以实现顶点数组的封装。
这里和VBO的封装大同小异。
唯一的区别就是多了一个函数,AddAttribs()用于配置顶点属性。
首先调用VBO的BInd函数,是为了确保在有多个顶点缓冲对象的情况下,配置顶点属性时绑定了正确的VBO对象。接着获取顶点,并用一个循环取出顶点中的每一个属性,并进行配置。这里的offset用于计算每个顶点属性的偏移量。
当我们完成VAO、VBO和EBO对象的封装后,代码将变得十分简洁:
关键词:
质检
推荐