计算机图形学入门(openGL)持续更新
OpenGL概览
图形API(Application Programming Interface)
跨平台,跨编程语言的图形程序接口。用于调用GPU上的指令功能
游戏引擎底层都是由图形API制作出来的
OpenGL:是一个由Khronos组织制定并维护的规范(Specification)
OpenGL实现:各个显卡厂商自己在显卡驱动层面实现这些API的内容
渲染模式
立即渲染模式(Immediate mode):openGL3.0之前的版本不会暴露太多的细节功能,只能按部就班实现效果
核心渲染模式(Core-profile):openGL3.0之后,openGL标准推崇核心渲染模式,对于程序员给出了大量的自由的功能
坐标系
openGL中使用右手坐标系
网格(Mesh):存储了一个模型的几何形状数据
材质(Material):描述了物体表面如何与光发生反应
属性:颜色、金属/非金属、光滑/粗糙、透明/半透明/不透明、凹陷/突起等
颜色(RGB)对于光:意味着红、绿、蓝的光强度,对于物体:意味着对红、绿、蓝的光的反射百分比
当一束light( 0.9 , 1.0 , 0.8 )照在Mesh( 0.2 , 0.5 , 0.8 )上时
肉眼看到的RGB为( 0.9 , 1.0 , 0.8 ) * ( 0.2 , 0.5 , 0.8 ) = ( 0.18 , 0.5 , 0.64 )
渲染管线
流程:顶点数据->三维变换->图元装配->剪裁剔除->光栅化->片元着色->混合与测试
蓝色部分处理对象为顶点数据,红色部分处理对象为像素片元数据
顶点数据
位置:每个顶点的xyz坐标
颜色:每个顶点的rgb颜色
其他数据:法线、uv、切线
三维变换
模型变换:使用矩阵数学工具,使得三角形在空间
当中平移、旋转、缩放
视图变换:使用矩阵数学工具,将三角形顶点变换
到摄像机为中心的坐标系中
投影变换:使用矩阵数学工具,将三角形顶点变换
到标准屏幕坐标系中
这些操作都是针对了三角形的顶点们
图元装配
图元:在图形的世界里,一个三角形、一条直线等几何关系的,称为图元(Primitive)
图元的构成:三角形(三个顶点),直线(两个顶点),是变换完毕的点进行构成
图元装配:把变换后的顶点,根据顺序,组成三角形、直线等图元的过程
剪裁剔除
剪裁:把视口外面,无法显示的图元都减裁掉,加快后续步骤的渲染效率
剔除:将背面朝向我们的三角形剔除掉
渲染时三角形分正面及背面,当顶点数据连线为顺时针时为背面,逆时针时是正面
光栅化
屏幕由一格格的像素构成,虚拟的几何图形也需要做成栅格才能渲染,称为光栅化
光栅化只是把顶点围成的区域的光栅计算出来,还没有决定每个像素光栅的颜色
片元着色
计算每个像素片元最终显示的颜色
混合与测试
当有多个三角形重叠或有半透明效果时,混合决定透明效果,测试决定前后次序
OpenGL需要的库
GLFW:是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口
(1)跨平台的窗体生成API系统
(2)与OpenGL便捷链接
(3)方便的鼠标键盘消息回调函数
GLFW下载网址
Glad:根据不同的OpenGL版本,获取驱动之中的函数指针
