3. 固定管线绘制
准备工作:
#include "GLShaderManager.h"
引入了GLTool 着色器管理器(shader Mananger)类。没有着色器,我们就不能在OpenGL(核心框架)进行着色。着色器管理器不仅允许我们创建并管理着色器,还提供一组“存储着色器”,他们能够进行一些初步基本的渲染操作。
#include "GLTools.h"
GLTool.h头文件包含了大部分GLTool中类似C语言的独立函数
#include <GLUT/GLUT.h>
在Mac 系统下,#include <GLUT/GLUT.h>
在Windows 和 Linux上,我们使用freeglut的静态库版本并且需要添加一个宏
函数执行流程
- 设置当前工作目录
- 初始化GLUT库,并进行一些配置
- 注册函数(重塑、显示、键盘事件等)
- 初始化GLEW库,确保OpenGL API对程序完全可用
- 设置渲染环境
- 调用
glutMainLoop();
类似OC的runloop
重塑函数glutReshapeFunc(void (*func)(int width, int height))
注册的函数会在新建窗口和窗口尺寸发生变化的时候被调用,负责处理设置视口、投影方式
显示函数glutDisplayFunc(void (*func)(void))
注册的函数会被系统自动和开发者手动调用,负责清理缓存区、使用着色器、绘制图形
自定义函数setupRC() 在main函数中手动调用,负责窗口颜色配置、初始化着色器、顶点数据设置 这部分也可以放到显示函数里面(glutDisplayFunc)
三角形绘制
运行结果
打印
由打印结果可见,程序会先执行setupRC,即先设置渲染环境,然后执行
changeSize设置窗口大小,再执行renderScene来渲染,当窗口大小变化后,会触发changeSize->renderScene
顶点连接方式(图元)
绘制能用键盘控制的正方形
要想绘制东西到屏幕上,着色器设置、颜色设置、视口大小设置、缓存区清空和重绘、交换缓存区,这几步都必不可少
正方形绘制
移动控制
移动的原理就是根据移动,生成新的顶点数据,提交并重绘
单次绘制
绘制正方形
坐标系设置函数
glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
绘制圆形
绘制正弦函数
代码资源见:Github