PS:本篇由我在临近期末时做的笔记改编而来。其实就只是改了一些错误,增加了期末考试自己没有复习到的知识点(悲)。毕竟复习笔记重点还算分明,故记之,做查阅用。

计算机图形学中的基本概念

简述研究内容

答案

计算机图形学的主要研究内容有建模渲染动画

  1. Modeling :创建3D几何对象的模型,即三维物体模型的计算机表示。
  2. Rendering :从3D模型生成2D图像。
  3. Animation :描述对象的运动。

图形与图像的区别

图像(image) 是人为用外部设备捕捉到的具有视觉效果的画面,是位图。计算机存储图像中每个像素点的位置、颜色、灰度等信息,所占内存较大。

常见的图像格式有jpg、JEPG、png、BMP等。

图形(graph) 强调的是场景的几何表示,通过方程等数学形式对物体进行描述,是矢量图。它所占内存较小。

常见的图形格式有SVG等。


图形系统

图形系统的组织与功能

左边的是软件,右边的是硬件。

图形软件包

图形软件包分为专用图形软件包通用编程软件包

  1. 专用图形软件包是为非程序员设计,其接口通常是一组菜单,如CAD(不是C4D……考试写错了)。
  2. 通用编程软件包提供一个可用于高级程序设计语言的图形函数库作为计算机图形应用编程接口,如GL、OpenGL等。

显示器:刷新式CRT

结构

  1. 发光原理:电子轰击荧光屏上的荧光物质,使其发生能级跃迁,从而发出荧光。
  2. 荧光屏的特性包括荧光质的颜色和余晖。
  3. 余晖是指荧光质从最大亮度衰减到最大亮度的10%的这段时间,通常为10~60ms。
  4. 光点是显示器能够显示的最小发光点。它的物理直径定义为光点亮度下降到最大亮度60%处的直径。

    当两个光点的距离大于物理直径时,两个光点是可区分的。

  5. 屏幕分辨率是指CRT上无重叠显示的最大光点数

    区别屏幕分辨率和显示分别率!前者是指显示屏,后者是指图像,下面会讲。我们一般指的分辨率是显示分辨率,屏幕分辨率相对不是那么重要。

  6. 显示器的扫描方式分为逐行扫描和隔行扫描。下面观察逐行扫描和隔行扫描的方式。

    • 逐行扫描一帧包含多次从左至右的扫描、水平回扫以及一次垂直回扫。
    • 隔行扫描一帧分为两场,分别扫描奇数行和偶数行,两场之间用垂直回扫连接。

图形的信息

图形信息的存储

一幅图片可以看作是像素的集合。像素是当前显示分辨率所能提供的最小点。图形的信息就储存在像素中。

  1. 显示分辨率 就是水平和垂直两个方向上像素数量的乘积,如720p

    480p。

  2. 像素的信息,即强度值 被储存在帧缓冲区中。
  3. 色深 即像素信息的长度,以bit为单位。最少为1b,显示为黑白。若能显示16色,即$2^4$,则色深为4b。

    强度和色深差不多是一个意思。只是强度指的是图像的信息,而色深则指信息的位数。

  4. 常考的计算:帧缓冲区容量=显示分辨率$\times$色深

颜色和灰度

对于颜色,我们要分清两点:使用的颜色数所存储的颜色数量。使用的颜色是指在该时刻用户使用的颜色,它小于等于存储的颜色数;存储的颜色数就是所能使用的颜色的最大数量。

  1. 颜色的直接存储:直接在帧缓冲区中存储颜色信息。

    如:要储存$2^{24}$种颜色,那么帧缓冲区的一个像素的色深为24b。

  2. 颜色的查找表存储:帧缓冲区存储颜色查找表的索引值。索引值的位数代表了同一时刻能 够使用的最大颜色数;颜色查找表的位数代表了总共 可以使用的最大颜色数。

    如:每像素20位的帧缓存和每像素24位的颜色查找表的RGB光栅系统,总共可以显示$2^{24}$种颜色,在任意时刻可以同时显示$2^{20}$种颜色。

  3. 灰度:当RGB三个分量相等时,颜色为某种程度的灰色。一个灰色对应一个灰度等级

观察流水线


点的绘制

原理:根据点的坐标$(x,y)$,对帧缓冲区相应存储单元的内容进行操作以画点。

寻址

寻址公式为


直线的绘制

直线绘制的基本原理是获得直线上的各像素点,然后再对各点进行绘制。所以直线绘制的重点是高效得获得直线上的像素点的坐标绘制的其实是线段……

DDA算法

思想:在一个坐标轴上以单位间隔取样,另一个坐标轴以m或$\frac{1}{m}$变化,从而获得线段上的各像素点。

缺点:取整和浮点运算比较耗时,且较长线段会产生误差累积。

Bresenham画线算法

我们重点关注使用Bresenham算法的计算流程。具体公式是怎么推出的见教材。

同理可知,当$m>1$时,计算流程为:

先想想再打开

而当斜率小于0时可以先用对称性把斜率转化为大于0。所以只研究斜率大于0的情况不失一般性。

中点画线算法


圆的生成

中点画圆算法

先想想再打开

Bresenham画圆算法

先想想再打开


图形填充

画好图形后就要对其进行填充。然而,凹多边形的填充算法相对凸多边形更加复杂(不限于填充算法),同时我们可以通过切割的方法讲凹多边形转化为凸多边形。所以填充之前我们还要进行<mark>凹多边形和凸多边形的识别</mark>

识别凹多边形

方法 :叉积法
  1. 若各叉积的Z分量均同号,则为凸多边形。
  2. 若有正有负,则为凹多边形。

进行填充之前,还要做的一件事就是<mark>鉴别非标准多边形的内部区域</mark>,即进行内外测试。

方法一 :奇偶规则
  1. 若射线穿过的边的条数为奇数,则为内部区域。
  2. 若射线穿过的边的条数为偶数,则为外部区域。
方法二 :非零环绕规则

从区域内部任意位置引出一条不过顶点的射线

  1. 从左至右穿过,减1
  2. 从右至左穿过,加1

若最终结果不等于0,则为内部区域。

观察下面奇偶规则和非零环绕规则的例子。

区域填充

扫描线算法

方法:自底向上扫描,包括求交、排序、配对、着色四步。

  1. 若扫描线穿过的是顶点,要注意顶点的取舍。此时,以扫描线以上与该顶点相邻的边的条数作为在该顶点处的交点个数
  2. 配对时,按照顶点编号1与23与4 ……的方式配对

边界填充算法

方法:从内部的一点开始,以一种指定的颜色填充,直到边界为止。

  1. 若为4-填充 ,则有时可能填不完整
  2. 若为8-填充 ,则有时可能填充越界

走样与反走样

像素是离散的,当我们用有限的像素来逼近直线时,就会产生锯齿,这就是走样 。而我们通过一些方法来减小这种锯齿,就是反走样

反走样技术

采用高分辨率的显示器。

基本思路使边界的亮度更低,中间的亮度更高,从而减轻据齿的视觉效应。

  1. 过取样技术 :高分辨率取样确定亮度等级,然后在低分辨率的设备上显示。
  2. 区域取样技术 :以面积比来确定亮度等级。
  3. 像素移相技术
  4. 子像素加权方案 :按照某种分布来确定该区域各像素的亮度等级。

几何变换

基本的几何变换包括平移translate旋转rotate缩放scale

我们通常使用齐次坐标来表示矩阵变换,这样表示出来的都是矩阵乘积的形式,更加简洁。

二维几何变换

这里的旋转是指绕z轴的旋转。虽然二维没有z轴这个说法,但在OpenGL中表示二维就是从一个坐标轴俯视过去的。绕任意直线的旋转将在后面详细讨论。

三维几何变换

三维的矩阵变换相对二维,绕坐标轴的旋转变换更加复杂,需要熟练记忆并掌握

三维立体绕任意直线旋转

我们的目标是将绕任意直线L的旋转转化为绕坐标轴的旋转。

  1. 将L平移至通过坐标原点。
  2. 将L绕x轴旋转至xoz平面
  3. 将L继续绕y轴旋转至与z轴重合
  4. 将L绕z轴旋转相应的角度
  5. 分别绕y轴和x轴反向旋转,再反向平移。

这个做法的难点就是空间角α和β的求解 。我们采用向量 的方法。

在计算α前,我们还要明白一点就是,u与u''的夹角等于u'与z轴的夹角(见上面的第三个坐标系)。

然后我们通过向量点乘获得夹角的余弦,向量叉乘获得夹角的正弦。计算过程省去,下面直接给出结论。

做题的时候我们直接代上面的矩阵即可。


窗口-视口变换

窗口世界坐标系中要显示的区域,通常在观察坐标系中定义。 视口窗口映射到设备坐标系上的区域
图解窗口和视口

变换的时候,要使视口内的一点和窗口保持相同的相对位置,需要满足下面的方程组:


直线裁剪

当我们从世界坐标系中截取窗口时,我们只需要窗口内的区域,窗口外的则舍弃以减小内存占用。这时就要对其进行裁剪。我们来研究最基础的直线裁剪。

CS直线裁剪算法

CS直线裁剪算法即Cohen-Sutherland直线裁剪算法的简称。

步骤:
  1. 按照左右下上的顺序对窗口进行区域编码

    区域编码如图

  2. 顶点编码

说明:
与老师的QA(打错字了好尴尬/捂脸)

LB直线裁剪算法

LB直线裁剪算法即“梁友栋-Barsky”直线裁剪算法。

思想:
  1. 利用直线的参数方程,已知直线的起始点,用参数u表示直线上的任意一个点:

  2. 直线在区域的端点右六个候选点:

    入点候选组 1、2、3中选择u较大的那个点;出点候选组 4、5、6中选择u较小的那个。

步骤:

对比CS和LB直线裁剪算法:

LB算法减少了计算交点的次数,性能更高,而且更容易推广到三维。所以LB算法更优。

其他直线裁剪算法

//Todo,之前没有复习到。


三维观察坐标系

问题一:如何建立是三维观察坐标系?
  1. 用观察坐标原点$P_0$和三维物体上的一参考点Pref确定观察上向量

  2. 确定观察坐标系Z轴$Z_{view}=N$(以观察向上向量作为观察坐标系Z轴)。
  3. 指定观察向上向量

    ,建立

    轴的正方向。

以上为标准答案,考试需要记忆!

问题二:如何求解三维观察WC-VC变换矩阵?
  1. 平移使得WC,VC坐标原点重合。
  2. 轴旋转,使得

    轴旋转到XY平面。

  3. 轴旋转,使得

    轴重合。

  4. 轴旋转,使得

    重合,

    重合。

  5. 复合变换矩阵即为

和三维立体绕任意直线旋转的变换过程相似。


投影变换

投影三要素

投影三要素包括:视点(投影中心)、投影平面、投影线。

投影三要素图示

斜投影的计算

利用相似三角形:


三维对象的表示

表示方法

  1. 边界表示: 使用一组曲面来描述三维对象,从而将其分为内外两部分。如:样条曲面、多边形曲面
  2. 空间分区: 将包含物体的空间区域划分为一组较小的、非重叠的、邻接的实体,从而描述物体内部的性质。如八叉树的表示。
  3. 多边形网格: 图形系统一般用多边形网格对物体进行建模,再用细分的方法使物体的表面更加平滑。

贝塞尔曲线

特性:
  1. 多项式次数=控制点个数-1
  2. 贝塞尔曲线总是通过第一个和最后一个控制点
  3. 第一个和最后有个控制点重合会生成闭合的Bezier曲线
  4. 任何贝塞尔曲线总是落在控制点的凸壳内

四叉树与八叉树

分形

分形就是重复使用指定的变换函数作用于空间区域中的所有点,使每点具有无限细节。分形的特点的是对象整体和局部之间具有自相似性

分型的维数

用于描述分型对象细节的变化量,用D表示。D越大,细碎性越高

计算: $D=lnn/ln(1/s)$,其中n为再生数目,S为缩放因子,如:<br>