Welcome to

爱上分享

Home / 未分类 / 计算机图形学

计算机图形学

20%上机、25%期末卷面成线、20%作业、35%综合训练

答辩是综合训练,在教务在线上能看到的是20%上机、25%期末卷面、55%平时成绩

平时课后题

交互性系统不考(答辩了)

Ⅰ、基础知识

一、图形学概论

  1. 计算机图形学概念: 利用计算机表示、计算、处理、显示图形的学科。
  2. 图形的分类
    (1) 线框图形
    图形要素:表述形状的点、线、面、体等几何要素。
    (2) 真实感图形
    图形要素:反映物体表面属性或材质的灰度、颜色等非几何要素。
  3. 图形的表示方法
    (1)设计阶段—参数法:
    ① 数学模型;② 形状参数;③ 属性参数
    (2)实现阶段—点阵法:
    象素点的颜色。
  4. 计算机研究的内容
    图形的输入、处理、生成、输出技术。
  5. 计算机图形学研究的主要目标
    ① 模型的设计与构建;② 实现系统交互 ;③ 绘制模型技术 ;④ 图像保存技术

二、图形系统

  1. 随机扫描系统工作原理
    随机扫描技术的本质是按照显示命令的任意顺序,将电子束从一个端点偏转到另一个端点。
  2. 光栅扫描系统工作原理
    对于光栅系统来说,只能用光栅网格上的像素近似地描绘平滑的直线、多边形和如圆、椭圆等曲线图元的边界。
黑白光栅显示器的工作状况图
灰度等级光栅显示器的工作状况图
足够的位面和帧缓冲存储器结合能够反映图形的灰度等级。
带有查找表的光栅显示器工作状况图
帧缓存中的每个位平面上存储数字组合将作为颜色查找的索引表中地址表项地址的索引。
颜色查找表具有2N项,查找表每一项具有W位宽
当W大于N时,可以有2w个等级,但每次只能有2N个不同的等级可用。
彩色光栅显示器的工作状况图
具有3个位面的帧缓冲存储器的颜色表
全色光栅显示器工作状况图
配有颜色查找表的全色帧缓冲存储器
24位面10位颜色索引表的帧缓冲器

三、颜色模型

  1. 单色模型
    (1)灰度的选择

设一个显示器的亮度范围为[Y0,1],若 n=255,取 y0=0.02,则:

256个灰度值 0.0200, 0.0203, 0.206, 0.0209, ……, 1.000

(2)半色调技术(降低空间分辨率)
控制颜料点的大小的方式产生多层次效果。
(3)半色调逼近(降低空间分辨率)
抖动矩阵、构成栅格图案。
采用一系列栅格图案来逼近模拟半色调技术。
(4)抖动处理(不降低空间分辨率)
位于(x,y)处像素涂色与否取决于图像在指定位置的深度值是否大于抖动矩阵中的对应值。
(5)误差扩散 (不降低空间分辨率)

2.CIE-XYZ颜色模型、RGB颜色模型、HSV颜色模型、CMY颜色模型
(1)RGB彩色模型
=0.409+0.310+0.200
=0.177+0.813+0.010
=0.000+0.010+0.990

(2)CMYK彩色模型
R、G、B值→Y、M、C、K
  c=1-R,m=1-G,y=1-B
  k=min(c,m,y) (底色去除决定的黑色值)

(3)HSV彩色模型

三原色的条件:任何一种颜色不能通过另外两种
线性混合求得。

CIE色度图(不考)
表达出xyz点等于1,通过色度图,可以得到光谱色的互补色

四、图形系统软件

  1. 解决的主要问题
    (1)图形信息描述
    (2)命令和数据
    (3)人机交互处理图形
  2. 图形的输入输出操作
    保存、插入、镜像、平移
  3. 图形软件的类型
    ①通用图形程序包:
    CGI;CGM;GKS;GKS-3D;PHIGS;GL;VTK;OpenGL;Direct X
    ②专用程序包:
    以设备为基础
    ③程序设计语言扩充:
    C;VC类库;Autolisp
图形的形式定义

五、基本图形绘制

  1. 直线和绘制
直线生成算法--数值微分法
void DDALine(int x0,int y0,int x1,int y1,int color)     
 {   								
	float dx, dy, x, y, length;						
	dx = x1-x0, dy=y1-y0;	
	if(fabs(dx)>=fabx(dy)) length=dx else length=dy;			   
	x=x0, y=y0;	 					   
	for (i=1; i<=length, i++)					   
	{  drawpixel (int(x+0.5), int(y+0.5), color);		   
	   x+=dx,y+=dy;
     }
  }
直线生成算法--中点画线法
直线生成算法--中点画线法
直线生成算法--Bresenham算法
直线生成算法--Bresenham算法
直线生成算法--Bresenham算法
void Bresenhamline (int x0,int y0,int x1, int y1,int color)
{   int x, y, dx, dy;
    float k, e;
    dx = x1-x0, dy = y1- y0, k=dy/dx; 
    e=-0.5, x=x0, y=y0;
    for (i=0; i<=dx; i++)
    {    drawpixel (x, y, color);
          x=x+1,e=e+k;
          if (e>=0)
          { y++, e=e-1;}
    }
  }

2.圆及椭圆的绘制

中点画圆算法步骤
中点椭圆算法步骤

Ⅱ、图形变换

一、图形变换的类别

几何变换(造型变换、取景变换)和投影变换

二、几何变换

1.齐次座标系

齐次坐标—向量与矩阵运算
坐标变换—齐次坐标表示
    用一个n+1维向量表示一个n维向量
二维点P(x,y),用(X,Y, w)表示
w可以任意选取
二维点P的齐次坐标不唯一
(2,3)的齐次坐标表示可以是(4,6,2) (3,4.5,1.5)
w=1时的齐次坐标称为“规格化坐标”
坐标变换—齐次坐标作用
用一个n+1维向量表示一个n维向量
矩阵变换的阶数统一表示
高维空间上坐标系变换的有效方法
防止浮点数溢出,便于表示无穷点
便于变换合成与硬件实现

2.二维坐标变换

二维变换—平移变换
二维变换—平移变换
二维变换—旋转变换
二维变换—旋转变换
二维变换—旋转变换
二维变换—旋转变换
二维变换—旋转变换
二维变换—平移变换

二维变换—比例变换
二维变换—比例变换
二维变换—比例变换
二维变换—比例变换
以坐标原点为放缩参照点
当Sx=Sy=1时:恒等比例变换
当Sx=Sy>1时:沿x,y方向等比例放大
当0<Sx=Sy<1时:沿x,y方向等比例缩小
当Sx≠Sy>0时:沿x,y方向作非均匀的比例变换,图形变形
二维变换—比例变换
当Sx=Sy<0时:恒等比例对称变换
当Sx≠Sy时<0:沿x,y方向作非均匀的比例对称变换,图形变形
二维变换—对称变换
二维变换—对称变换
二维变换—对称变换
二维变换—对称变换
二维变换—错切变换
二维变换—错切变换
二维变换—错切变换
二维变换—错切变换

复合变换:
二维变换不具有交换性
二维变换具有结合性:ABC=(AB)C=A(BC)

复合变换

3.三维坐标变换

透视投影矩阵
三维投影矩阵
规格化设备坐标系
变换流程
变换流程

三维点P(x,y,z)移动(tx,ty,tz)得到点P'(x',y',z') ,齐次坐标表示:

三维变换—造型变换—旋转变换
三维变换—造型变换—旋转变换
三维变换—造型变换—旋转变换
三维变换—造型变换—旋转变换
三维变换—造型变换—旋转变换
三维变换—造型变换—旋转变换
三维变换—造型变换—旋转变换
三维变换—造型变换—旋转变换
三维变换—造型变换—比例变换
三维变换—造型变换—非线性模型
三维变换—取景变换
三维变换—视点坐标系
三维变换—取景变换

投影变换:三维物体→二维图形
投影变换是将视点坐标系下 (三维物体)的坐标投影到图像坐标系下(二维图形)中

物体的相对度量保持不变——平行投影

符合人类的视觉特点,产生的投影效果更为真实——透视投影

投影变换
三维变换—透视投影—齐次坐标
三维变换—投影变换—透视投影

四、裁剪

1.直线裁剪

(1)Cohen-Sutherland 裁剪

Cohen-Sutherland裁剪
#define LEFT		1
#define RIGHT		2
#define BOTTOM	4
#define TOP		8
int encode( float x, float y)
{
int c = 0;
if (x<XL ) c |= LEFT;
if (x>XR ) c |= RIGHT;
if (y<YB ) c |= BOTTOM;
if (y<YT ) c |= TOP;
retrun c;
}
void CS_LineClip( x1, y1, x2, y2, XL, CR, YB, YT)
{
int code1, code2, code;
code1 = encode( x1, y1 );
code2 = encode( x2, y2 );
while( code1 != 0 || code2 != 0 )
{
if ( code1 & code2 != 0 ) return;
if ( code1 != 0 ) code = code1;
else code = code2;
if( LEFT & code !=0 ) { x = XL; y = y1+( y2 - y1 )*( XL = x1 )/( x2 -x1 ); }
else if (REGHT & code != 0 ) { ......}
       else if (BOTTOM & code != 0 ) { ...... }
             else if (TOP & code != 0 ) { ...... }
if ( code == code1 ) { x1 =2, y1 = y1; code1 = encode( x,y );}
else { x2 = x; y2 = y; code2 = encode( x, y );}
}
displayline( x1, y1, x2, y2);
}

(2)中点裁剪

中点裁剪
端点编码
同Cohen-Sutherland
裁剪判断
同Cohen-Sutherland
求交取舍
以P0为出线点,求线段中点Pm
外与窗口的交点,即从出发找出距P0最近的可见点A,并从P1出发找出距P1最近的可见点B,两个可见点之间的连线即为线段P0P1的可见部分。

(3)Liang_Barsky 裁剪

直线参数方程
裁剪条件
主要数据结构如下:
float x1,y1,x2,y2;        	//存储线段两端点变量
float XL,XR,YB,YT;    	//存储裁剪窗口边界值变量
float u1,u2;                	//存储定义在裁剪矩形内线段部分的参数值
float  p,q;                    	//存储当前裁剪边界所对应裁剪条件中的p,q参数
LB_LineClip(x1,y1,x2,y2,XL,XR,YB,YT)
{   dx=x2-x1;
     dy=y2-y1;
    if (Clip(-dx,x1-XL,&u1,&u2))
      if (Clip(dx,XR-x1,&u1,&u2))
        if (Clip(-dy,y1-YB,&u1,&u2))
          if (Clip(dy,YT-y1,&u1,&u2))
            displayline(x1+u1*dx,y1+u1*dy,x1+u2*dx,y1+u2*dy)   
}
int ClipT(float p,float q,float *u1,float *u2){	int 	flag=1;	float 	r;	if(p<0.0)	{	r=q/p;		if(r>*u2)	 flag=0;		else	 if(r>*u1)			*u1=r;	}	else if(p>0.0)	{	r=q/p;		if(r<*u1) 	flag=0;		else 	if(r<*u2)			*u2=r;	}	else if(q<0.0) flag=0;	return flag;}
Clip(p,q,u1,u2)
{   if(p<0)
      计算u1值;
    if(p>0)
      计算u2值;
}

(4)Sutherland_Hodgman

算法的每一步,考虑窗口的一条边以及延长线构成的裁剪线。该线把平面分成两个部分:一部分包含窗口,称为可见一侧;另一部分称为不可见一侧。依序考虑多边形的各条边的两端点S、P。它们与裁剪线的位置关系只有四种。

(1) S、P均在可见一侧;
(2) S、P均在不可见一侧;
(3) S可见,P不可见;
(4) S不可见,P可见。
S、P与裁剪线的四种位置关系
情况(1):仅输出顶点P
情况(2):输出0个顶点
情况(3):输出线段SP与裁剪线的交点I
情况(4):输出线段SP与裁剪线的交点I和终点P

2.其他裁剪

(1) Weiler_Atherton

⒈ 建立主多边形和裁剪多边的顶点表.
⒉ 求主多边形和裁剪多边形的交点,并将这些交点按顺序插入两多边形的顶点表中。在两多边形顶点表中的相同交点间建立双向指针 。
⒊ 裁剪: 如果存在没有被跟踪过的交点,执行以下步骤:
⑴ 建立空的裁剪结果多边形的顶点表
⑵ 选取任一没有被跟踪过的交点为始点,将其输出到结果多边形顶点表中
⑶ 如果该交点为进点,跟踪主多边形边边界;否则跟踪裁剪多边形边界
⑷ 跟踪多边形边界,每遇到多边形顶点,将其输出到结果多边形顶点表中,直至遇到新的交点
⑸ 将该交点输出到结果多边形顶点表中,并通过连接该交点的双向指针改变跟踪方向(如果上一步跟踪的是主多边形边界,现在改为跟踪裁剪多边形边界;如果上一步跟踪裁剪多边形边界,现在改为跟踪主多边形边界)
⑹ 重复⑷、⑹直至回到起点

交点的奇异情况处理

⒈ 与裁剪多边形的边重合的主多边形的边不参与求交点;
⒉ 对于顶点落在裁剪多边形的边上的主多边形的边,如果落在该裁剪边的内侧,将该顶点算作交点;而如果这条边落在该裁剪边的外侧,将该顶点不看作交点 

(2)字符裁剪

Ⅲ、交互式系统

Ⅳ、几何建模

一、参数曲线及曲面


⒈ 曲线设计基础
⒉ Bezier曲线及曲面
⑴ Bezier曲线的矩阵表示、次数、阶数、顶点个数及连续的性质(升阶)
⑵ Bezier曲线的递推计算公式
⑶ Bezier曲线的De Casteljau算法
⑷ Bezier曲线的剖分算法
⑸ Bezier曲线的升阶与降阶方法
⑹ Bezier曲线的拼接
⒊ B样条曲线及曲面
⑴ B样条曲线的矩阵表示形式、次数、阶数及节点
⑵ B样条曲线的de Boor_Cox递推定义及算法
⑶ B样条曲面的定义
㈡ 面模型
⒈ 三角网格模型
⑴ 数据结构:① 顶点坐标表;② 纹理坐标表;③ 法向表;④ 面表
⑵ 数据格式:.obj文件、.ply文件
⒉ 半边结构模型
数据结构:① 顶点表;② 面表;③ 相邻边表
⒊ 网格简化与LOD技术
⑴ 网格简化:① 顶点聚类(顶点删除);② 边坍塌(边分裂、边替换、边删除);③ Re-Tiling
⑵ LOD技术:近处精细粗糙。① Loop细分;② 细分
㈢ 体模型
B-rep结构的数据结构、基本操作
㈣ 消隐
不作为本次期末试卷考试内容
㈤ 自然景物的表示
不作为本次期末试卷考试内容
五、真实感图形技术
㈠ 区域填充
⑴ 多边形扫描边界标志算法
⑵ 种子填充算法
⑶ 扫描线算法
㈡ 光照模型
⒈ 光照模型
⑴ 泛光模型
⑵ 漫反射模型
⑶ 简单光照模型
⑷ 局部光照模型
⑸ 全局光照模型
⒉ 明暗处理方法
⑴ Flat Shading
⑵ Ground Shading
⑶ Phong Shading
⒊ 阴影及雾处理方法
不作为本次期末考试试卷内容
㈢ 纹理及纹理映射
⒈ 颜色纹理
⑴ 纹理函数的映射
⑵ Z缓冲消隐+简单光照模型+逆向映射
不作为本次期末考试试卷内容
⒉几何纹理
纹理函数的扰动不作为本次期末考试试卷的内容
⒊ 凹凸纹理
⒋ 环境映射

下面是根据孙老师口供速记的:

不同灰度级别n取多少

彩色求位平面n多少

单色模型五种做法怎么做

彩色模型如何求灰度级

把每一种变换投影矩阵表示出来

复合变换一定要会

投影变换掌握

坐标变换

二维变换图形矩阵

三维坐标变换

投影变换

正投影,斜投影,透视投影

以下要做算法:

掌握具体思路,原理,算法(数据结构&程序),考试综合做

任何方法都要考虑算法

裁剪

Cohen-Sutherland裁剪算法

中点裁剪

Liang_Barsky裁剪如果在左右上下怎么判断

Sutherland_Hodgman裁剪算法

Weiler_Atherton裁剪算

曲线曲面

掌握曲线定义,掌握Bézier公式,掌握矩阵表示,几阶曲线,阶数和次数关系,节点矢量关系,搞清楚曲线升阶降阶方法

记住Bézier De算法递推公式

掌握刨分算法

B样条曲线为什么有节点矢量,为什么决定曲线形状,掌握de boorbox递推公式怎么来的

三角网格模型

半边结构

网格简化

掌握两个Lod技术

loop细分√3细分给出细分操作

体模型异边结构顶点棱边表面的拓扑关系

翼边结构存储结构

消隐自然景物不考

区域填充,三种算法,如何建立活化边表

光照模型

在光照模型多边形三种明暗处理考虑法向量,

光照模型结合明暗处理

阴影及雾处理不考

不考多光源

六种光照模型

发表评论

电子邮件地址不会被公开。 必填项已用*标注

To get the latest update of me and my works

>> <<