VS2017
注释: 先CTRL+K,然后CTRL+C
取消注释: 先CTRL+K,然后CTRL+U
图形应用
计算机辅助设计(CAD:computer-aided design)
虚拟现实环境(virtual-reality environment)
科学计算可视化(scientific visualization)
未来发展
表情与动作的精细化
图形学与深度学习的碰撞
阴极射线管(CRT)
发光二极管显示器(LED:Liquid-emtting diode)
GPU 擅长于计算
像素:由图像的小方格组成的,这些小方块都有一个明确的位置和被分配的色彩数值,小方格颜色和位置就决定该图像所呈现出来的样子
显示分辨率:水平像素数*垂直像素数 ,取决于光点与帧缓存(存放一帧的信息)的大小
帧缓存的容量 = 分辨率 * 颜色位面数
可编程渲染管线
发展历程
固定管线:程序员控制权减少,不灵活
可编程图形库:自由搭建,功能范围广
从固定到可编程:hooks()函数(钩函数)突破固定功能流水线的限制,使用可编程着色器修改
流水线中特定步骤的行为。
GPU渲染管线
应用阶段 -》 几何阶段 -》光栅化
软光栅
扫描转换也就是光栅化,点阵单元是像素点阵
图源经过算法计算(不借助硬件提供的api)转换成像素点
逼近的本质相当于 连续量向离散量的转换
直线扫描转换算法
逐点比较法、正负法、数值微分算法、Bresenham算法
数值微分算法(DDA)
DDA是增量算法,优点:简单直观易实现,缺点:有浮点数和浮点运算,效率不高
记得取整(光栅化过程中不可能绘制半个像素点)
源码实现:
Bresenham算法
(1)中点
算法步骤:
假定0<k<1,x是最大位移方向;为防止浮点数出现,d(误差项)放大2倍
(2)改进
圆的扫描转换算法
常规计算太复杂
Bresenham算法
椭圆的扫描转换算法
在椭圆弧的扫描转换算法中,如果考虑的是中心在原点,第一象限的1/4段椭圆弧,则上下部分的分界点是椭圆弧上法向量x、y两个分量相等的点
多边形的扫描转换算法
X-扫描线思想
由于像素点较小,因此中心偏移看不出来
算法效率问题
Y向连贯性算法
边标志算法
上闭下开
区域填充
边界填充算法
8连通边界算法不可以填充4连通边界表示区域
泛填充算法通常用于给区域重新着色
8连通泛填充算法可以填充4泛填充的内点表示区域
重复入栈问题
属性
颜色,虚实,宽细,纹理贴图
根据斜率改变模板
走样与反走样
为提高图片质量,进行反走样
造型技术
研究如何在计算机中建立恰当的模型表示不同图形对象的技术
对象:规则对象(几何模型)、不规则对象(不能用欧式几何加以描述的对象如山树云烟)
实体
样条
样条的描述方法
Bezier实例
特性:
(1)曲线总是通过第一个和最后一个控制点
(2)曲线起始点处的切线落在头两个控制点的连线上,曲线终点处的切线落在后两个控制点的连线上
(3)曲线落在控制点的凸壳内
(4)封闭曲线的第一个点和最后一个点重合; 多个控制点位于同一位置需要更多加权
实体模型的三类表示
多边形表示(三角形或四边形)
扫描表示(旋转扫描、广义扫描)
构造实体几何法:由两个实体间的并、交或差操作生成的新的实体(CSG树)
光线投射算法
空间位置枚举
(1)八叉树
(2)松散八叉树
(3)BSP树
与八叉树相比较:自适应分割,有效减少树的深度和搜索时间
有效识别前向面与后向面
轴对齐:① xyz轴的顺序进行分割 或者 ②最长边
多边形对齐 : 常运用于深度测试、相交测试、碰撞测试
分形几何
熵:体系混乱程度的度量
分形: 具有以非整数维形式充填空间的形态特征,fractal
粒子系统
模拟火、烟、水流…
模拟多个粒子及其运动(每个粒子都有生命值)
渲染过程中粒子始终面对着摄像机方向(如NPC:Non-Player Character 的名字)
变换与观察
图形的几何变换是指对图形的几何信息经过平移、比例、旋转(逆时针为正方向)、对称、错切(剪切、错位变换,用于产生弹性物体的变形处理)等变换后产生新的图形
相关公式:
齐次坐标
用n+1维向量表示一个n维向量(但具有不唯一性)
运用齐次坐标可以同时表示多种变化
齐次坐标三维变换
关于坐标原点:
复合变化
其中三维复合变化可通过每次变换矩阵相乘来得到
(1)对任意参考点:
eg:
(2)对任意轴:
观察变换
世界坐标到观察坐标系的变换 :实际上是世界坐标系Q(x,y,z)在观察坐标系中的坐标值 ,最后不需要逆变换回去
模型变化与观察变化具有对偶性
投影变换
观察变换中隐含一个观察平面,即投影平面
按照投影中心的位置
投影分类
平行投影
正投影分为 三视图(主侧俯)与正轴测图
等轴测:投影面与三个坐标面的夹角都相等
正二测:投影面与二个坐标面的夹角都相等
正三测:投影面与三个坐标面的夹角都不相等
斜投影
透视投影
规范化投影
观察窗口的大小、投影方式的不同都影响着观察空间
为后续操作方便,因此规范化
通过openGL函数调用来完成这一操作
裁剪与屏幕映射
CS算法
按左下右上的顺序求出直线段求出直线段与窗口边界的交点
改进后的CS中点法
LB算法
将线段看作“先进后出”的带方向的线,建立参数方程,求出与裁剪窗口的交点,6个点:起终点,与窗口边界及其延长线的交点
多边形的裁剪
该算法遇到凹边形时会出现问题:多余边V2、V3
另一种算法
窗口定义为pw,多边形定义为ps
线段按指定方向,在可见侧进入不可见侧时进行相应操作(以BC,CD为例 到V2时同时输出V1、V2,并返回D点)
三维空间的裁剪
增加至6个点,与面的交点
增加至8个点,与面的交点