通过使用OpenGL绘制一个三角形,了解OpenGL的一些常用API和绘制流程,这里使用了GLUT(OpenGL Utility Toolkit)的API,GLUT
是OpenGL官方提供的OpenGL工具箱,封装了一些有用的工具,用于辅助操作OpenGL
工具API
本案例也使用GLUT
工具进行绘制,使用最基本的固定着色器来绘制,本案例会用到下面几个头文件
头文件 | 说明 |
---|---|
GLShaderManager.h | 着色器管理类,用于创建和管理着色器,还提供一组内置的存储着色器(固定管线着色器) |
GLTools.h | 包含大部分类似C语⾔的独⽴函数 |
GLUT.h | OpenGL工具箱 |
相关函数
这里会注册两个函数用于绘制
renderSence
: 类似于iOS的类似于drawRect
,每次View需要重新绘制的时候,会被调用changeSize
: 窗口大小变化的时候被调用,通常用于调整glview的视口
定义两个变量用于管理着色器
和顶点数据
1 |
|
main
程序启动的时候,我们需要做一些初始化操作
- 初始化
glutInit
- 初始化双缓冲区,颜色模式,深度,模板
- 设置窗口信息(大小,标题)
- 注册生命周期函数:
renderSence
和changeSize
- 测试驱动可用性: 通过
glewInit
结果判断 - 初始化渲染数据
setupRC
- 开启事件循环
1 | int main(int argc,char *argv[]) { |
setupRC
我们要画一个三角形
,可以在这里做一些准备工作
- 设置清屏颜色
- 初始化着色器
- 初始化顶点数据
1 | void setupRC() { |
这里triangleBatch
在Begin的时候设置了一个图元装配方式为GL_TRIANGLES
,在OpenGL中,相同的顶点可以有不同的装配方式,如下图
图元 | 描述 |
---|---|
GL_POINTS | 每个顶点在屏幕上都是单独点 |
GL_LINES | 每⼀对顶点定义⼀个线段 |
GL_LINE_STRIP | 一个从第⼀个顶点依次经过每⼀个后续顶点而绘制的线条 |
GL_LINE_LOOP | 和GL_LINE_STRIP相同,但是最后⼀个顶点和第⼀个顶点连接起来了 |
GL_TRIANGLES | 每3个顶点定义⼀个新的三角形 |
GL_TRIANGLE_STRIP | 共⽤一个条带(strip)上的顶点的一组三⻆形 |
GL_TRIANGLE_FAN | 以⼀个圆点为中⼼呈扇形排列,共⽤相邻顶点的⼀组三⻆形 |
renderSence
准备好数据之后,就可以开始绘制了,核心代码在之前注册的renderSence
里面
- 清空缓冲区(颜色缓冲区,深度缓冲区,模板缓冲区),避免脏数据
- 使用
着色器
填充颜色 - 批次类将
顶点数据
提交到着色器
上绘制
1 | void RenderScene(void) { |
changeSize
当窗口大小改变的时候,我们需要重新调整视口大小
1 | void changeSize(int w,int h) { |
运行
完整demo在这里