Qt与OpenGL编程 – IBO与线框模式

1. 索引缓冲对象(IBO)

索引缓冲对象(Element Buffer Object, EBO,也叫Index Buffer Object, IBO)。假设我们要绘制得不是三角形,而是四边形,那么我们要写生成得节点组合可能是这样的:

可以看到我们要生成得四边形只有4个顶点,而我们却生成6个顶点。如果一个模型有很对顶点,为了避免不必要得开销,索引我们引入了索引缓冲对象。IBO是一个索引顶点得缓冲对象,OpenGL调用这些顶点的索引来决定该绘制哪些顶点。我们只需要定义顶点和绘制矩形所需的索引:

(1) 创建IBO

同VBO使用函数 glGenBuffers 创建一个IBO对象

(2)设置IBO的数据

使用函数 glBindBuffer 绑定IBO, 函数 glBufferData 设置IBO的数据

(3)绘制

使用函数 glDrawElements 绘制

函数 glDrawElements 的原型如下:
glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices)

  • 参数 mode : 绘制模式, GL_TRIANGLES 为三角形。
  • 参数 count : 绘制的顶点数目。
  • 参数 type : 数据的类型,这里索引数据存储的为 GL_UNSIGNED_INT
  • 参数 indices : 表示偏移。

下图为绘制的四变型效果:
Qt与OpenGL编程 - IBO与线框模式

2. 线框模式

函数 glPolygonMode 表示OpenGL使用何种方式绘制图元。

表示使用线框模式,效果如下图说是
Qt与OpenGL编程 - IBO与线框模式
如果要恢复成填充模式,可以使用如下代码:


完整代码如下:
头文件:

cpp文件

You May Also Like

About the Author: admin

喜欢编程、爱游戏,更爱生活。

发表评论

电子邮件地址不会被公开。