OpenGL学习- 3. 固定管线绘制

1,138 阅读2分钟

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的静态库版本并且需要添加一个宏

函数执行流程

  1. 设置当前工作目录
  2. 初始化GLUT库,并进行一些配置
  3. 注册函数(重塑、显示、键盘事件等)
  4. 初始化GLEW库,确保OpenGL API对程序完全可用
  5. 设置渲染环境
  6. 调用glutMainLoop();类似OC的runloop 15677642095265.jpg

重塑函数glutReshapeFunc(void (*func)(int width, int height)) 注册的函数会在新建窗口和窗口尺寸发生变化的时候被调用,负责处理设置视口、投影方式 显示函数glutDisplayFunc(void (*func)(void)) 注册的函数会被系统自动和开发者手动调用,负责清理缓存区、使用着色器、绘制图形 自定义函数setupRC() 在main函数中手动调用,负责窗口颜色配置、初始化着色器、顶点数据设置 这部分也可以放到显示函数里面(glutDisplayFunc)

三角形绘制

15680128417329.jpg 15680129081022.jpg 15680129699125.jpg 运行结果 15680127622964.jpg 打印 15680127546592.jpg 由打印结果可见,程序会先执行setupRC,即先设置渲染环境,然后执行 changeSize设置窗口大小,再执行renderScene来渲染,当窗口大小变化后,会触发changeSize->renderScene

顶点连接方式(图元) 15680121959599.jpg

绘制能用键盘控制的正方形

要想绘制东西到屏幕上,着色器设置、颜色设置、视口大小设置、缓存区清空和重绘、交换缓存区,这几步都必不可少 15681032258185.jpg 正方形绘制 15681042773578.jpg

15681046075342.jpg 移动控制 15681063788532.jpg 15681063963445.jpg 移动的原理就是根据移动,生成新的顶点数据,提交并重绘 15681064678078.jpg

单次绘制

绘制正方形

15682570043339.jpg

15682570883443.jpg 坐标系设置函数glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)

绘制圆形

15682579493214.jpg 15682579380806.jpg

绘制正弦函数

15682683620790.jpg 15682683767975.jpg

代码资源见:Github