图形学复习
CH1 图形学概述
1.1 图形学
计算机图形学是研究图形的输入、模型的构造和表示、图形数据库管理、图形的操作以及以图形为媒介的人机交互的方法和应用的一门综合性学科
其最主要的任务是:研究如何用数据模型生成数字图像,具体来说有以下几个方面:
- 图形建模
- 几何处理
- 光栅化
- 片元处理
- 等等
计算机图形一般有两种表示方法:
- 图像:枚举图形中所有的点构成的2维点阵
- 图形:用图形的形状参数(参数方程、端点坐标等)和属性参数(颜色、线形等)来表示的参数模型
图形学中主要用后者表示计算机图形
CH2 图形系统
简单的图形系统由以下几个部件构成:
依次是输入设备(键盘、绘画版以及鼠标)、处理器、存储器、帧缓存和显示器
2.1 光栅扫描显示器
工作过程
电子束受偏转部件的控制,不断从左到右、从上到下将图像逐行逐点的扫描到显示屏上,通过控制电子束的强弱产生黑白、灰度或彩色的图像
显示屏面扫描线为N行,每一行又可以分为M个点,则整个屏幕为M x N的点阵
基本概念:
- 帧:整个屏幕范围
- 帧缓存:保存图形定义点的存储器
- 颜色缓存:帧缓存中用来存储颜色信息的部分
- 像素:屏幕上的一个点
2.2 图形系统主要任务
(1)建模
建模器输出几何对象的顶点数据集,它工作在对象坐标系(即局部坐标系,全局是世界坐标系,显式到显示设备是屏幕坐标系)
(2)几何处理
几何处理的对象是顶点,目标是确定显示在屏幕上的几何对象,并确定这些对象顶点的明暗值或颜色值投影,它主要包括以下几个步骤:
- 投影:通过观察变换把几何对象从对象坐标系/世界坐标系变换到视点坐标系,再通过投影变换把视点坐标系变换成投影坐标系,将顶点表示为裁剪坐标
- 图元装配:变换是点处理,后续把处理后的点组装成几何对象称为图元装配
- 裁减:确定哪些图元或图元的部分会被传送到光栅器,即确定显示在屏幕上的对象
- 明暗处理:颜色赋值、光照渲染
(3)光栅化
光栅化是将裁剪后的对象生成片段(准像素),即确定哪些像素来近似表示线段、多边形等,并且根据系统颜色状态和光照模型进行片段颜色插值
(4)片元处理
顶点处理完毕后需要对片元处理,包括了纹理贴图、融合、半透明、反走样、隐藏面消除等等
CH3 对象表示
3.1 多边形网络
用若干个相邻的多边形表示三维物体的方法称为多边形网络表示法,多边形由首尾相连的边组成,边又由两个顶点构成
多边形网络中规定:
- 一个顶点至少连接两条边
- 一条边至少属于一个多边形且至多连接两个相邻多边形
(1)表示方法
多边形网络一般有三种表示方法:
- 显式表示:显式地用顶点三个坐标去描述一个多边形,缺点:浪费存储空间(没有利用共享点/边信息)、重复描画共享点/边
- 指向顶点表的指针:顶点放在表中,多边形用顶点指针表示,优点:节省空间(利用共享点)、便于修改顶点坐标,缺点:难以找出共享边且共享边仍被重复描画
- 指向边表的指针:顶点放在表中,边用顶点指针表示放在边表中,多边形用边指针表示,克服大多数以上缺点
(2)多边形网络表示三维物体的缺点
虽然指向边表的指针表示客服了存储空间和重画的问题,但是用多边形网络表示三维物体存在一些本质的无法克服的问题:
- 多边形没有办法精确地表示曲面,为了实现较好的观察效果必须使用大量的多边形进行近似
- 在表示复杂拓扑和具有丰富细节的物体时,数据量大,建模、编辑、绘制、存储的工作量大
(3)曲面的多边形表示
二次曲面、超二次曲面等曲面,可以用曲面的参数方程表示(球的参数方程、椭球的参数方程等),可以通过这些参数方程把曲面划分成细小的多边形近似表示曲面,具体见后续OpenGL编程章节
3.2 样条
(1)样条表示
样条是通过一组指定点集而生成平滑曲线的柔性带,样条曲线是指用样条方法绘制的曲线,样条曲面是用两组正交样条曲线描述绘制的曲面
图形学中,样条曲线是由多项式曲线段连接而成的曲线,每段在边界处满足特定的连续性条件,样条可以用来设计曲线和曲面的形状,也可以用于指定场景中动画路径或照相机位置等等
曲线的显式表示无法表示封闭或多值曲线,也难以表示垂直切线的曲线;隐式表示计算复杂;参数表示刻画能力有限且推导复杂,因此样条表示的以下优点让其成为计算机图形学中广泛应用的曲线表示方法:
- 表示能力强,可以表示形状任意复杂的曲线
- 易于离散生成,容易控制形状和人机交互
- 具有确定的参数变化区间,容易确定曲线的边界
- 具有形式不变性
- 用切向量来表示曲线的变化率,避免了非参数表示中垂直切线(斜率为无穷大)难以表示的情况
(2)插值和连续性条件
给定空间上一组有序的控制点,得到一条光滑的分段参数多项式曲线作为近似曲线的方法叫做插值,其中最靠近点的插值曲线叫做逼近曲线
曲线段连接时关心连接处的连续性,定义Cn(n=0,1,2,...)连续就是曲线段在连接处的k=0,1,2,...,n阶导数均相等,定义几何连续Gn(n=0,1,2,...)就是曲线段在连接处的k=0,1,2,...,n阶导数的方向相同(长度可以不同)
(3)三次样条插值
给出一组控制点pk=(xk,yk,zk),k=0,1,...,n,生成分段三次参数多项式曲线P(u)=(x(u),y(u),z(u))如下:
?????????x(u)=axu3+bxu2+cxu+dxy(u)=ayu3+byu2+cyu+dyz(u)=azu3+bzu2+czu+dz,(0≤u≤1)
不同的三次样条插值方法就是在不同的边界条件情况下,求出a,d,c,d和输入控制点之间的转换关系
(4)Hermite插值
Hermite插值是常见的三次样条插值方法,其在pk和pk+1之间的线段边界条件为:
???????????P(0)=pkP(1)=pk+1P′(0)=DpkP′(1)=Dpk+1,Dpk、Dpk+1为指定的导数值
根据以上边界条件计算得:
P(u)=[u3u2u1]?MH?????????????pkpk+1DpkDpk+1????????????
其中MH为Herimite矩阵:
MH=????????????2?301?23001?2101?100????????????
(5)Cardinal插值
Cardinal插值是一种定义了张量参数t(曲线和控制点之间的松紧程度,小于0松弛,大于0紧张)的插值方法,并且一个曲线段由四个控制点确定(Hermite插值是两个控制点和其对应的一阶导数),其边界条件为:
???????????P(0)=pkP(1)=pk+1P′(0)=12(1?t)(pk+1?pk?1)P′(1)=12(1?t)(pk+2?pk)
根据以上边界条件计算得:
P(u)=[u3u2u1]?MC?????????????pk?1pkpk+1pk+2????????????
其中MC为Cardinal矩阵:
MC=?????????????s2s?s02?ss?301s?23?2ss0s?s00????????????,其中s=1?t2
(6)Bezier曲线
给出一组控制点pk=(xk,yk,zk),k=0,1,...,n,将这n+1个控制点混合生成逼近Bezier多项式函数的曲线P(u)=(x(u),y(u),z(u)):
P(u)=∑k=0npkBEZk,n(u),(0≤u≤1)
其中Bezier混合函数为:
BEZk,n(u)=C(n,k)uk(1?u)n?k=n!k!(n?k)!uk(1?u)n?k
二项式系数C(n,k)可以递归表示,带入Bezier混合函数可以求得其递推式:
?????BEZk,n(u)=(1?u)BEZk,n?1(u)+uBEZk?1,n?1(u)BEZk,k(u)=uk,BEZ0,k(u)=(1?u)k
Bezier曲线一定通过第一个控制点和最后一个控制点
(7)三次Bezier曲线
一般高阶多项式较为复杂,一般软件包只支持运算量较小的三次Bezier曲线(控制点4个),其边界条件为:
???????????P′(0)=3(p1?p0)P′(1)=3(p3?p2)P″(0)=6(p0?2p1+p2)P″(1)=6(p1?2p2+p3)
根据以上边界条件计算得:
P(u)=[u3u2u1]?MBez?????????????p0p1p2p3????????????
其中MBez为Bezier矩阵:
MBez=?????????????13?313630?33001000????????????
(8)样条表示之间的转换
记P(u)=[u3u2u1]?M?F,那么不同样条表示之间的转换就是建立在P(u)相等关系上推导F之间的关系
如推导一条将Hermit曲线变换成Bezier曲线表示的变化矩阵:
MH?FH=MB?FB?FB=M?1B?MH?FH?FB=?????????????13?313630?33001000?????????????1?????????????2?301?23001?2101?100?????????????FH?FB=??????????????110000110130000132???????????????FH
3.3 其他表示方法
图形学中还有以下表示方法,作为了解:
- 扫描表示法:物体沿路径扫描移动,外轮廓的轨迹定义了新物体
- 结构实体几何法:几何实体的并、交、差运算
- 八叉树:描述体像素网络结构
- 分形几何法:类层次结构以及整体局部之间的自相似性去构造自然景物
- 粒子系统:用随机模型去模拟光、火等