计算机图形学重点和难点指导 联系客服

发布时间 : 星期一 文章计算机图形学重点和难点指导更新完毕开始阅读504283a1af45b307e87197ae

图27 分形草

第8章难点学习指导:

1. 压缩仿射变换

对于一个比较复杂的图形,可能需要多个不同的仿射变换来实现,这构成了仿射变换族

??n?。并不是所有的仿射变换都适合于迭代函数系统,迭代函数系统只能使用压缩仿射变

换。如果图形上的各点经过仿射变换后,各点之间的距离变小,这种仿射变换就称为压缩仿射变换。压缩仿射变换主要用于控制生成的图形不发散。压缩仿射变换可以使一个图形产生它的一个复制品,即将原图分解为几部分,每一部分都可看作是在不同仿射变换下的复制品。这种分解与尺度无关,也就是说原图经压缩仿射变换后仍然可以对局部图形进行类似分解,这种整体与局部的自相似性正是分形的特征。若干个压缩仿射变换族的组合称为IFS。

?x'??a1???c?1:?y'???1??1????0?x'??a2???c?2:?y'???2??1????0?

b1d10b2d20bndn0e1??x??y?f1????? 1????1??e2??x??y?f2????? 1????1??en??x??y?fn????? 1????1???x'??an???c?n:?y'???n??1????0压缩仿射变换族{ωi}控制了图形的结构和形状,由于压缩仿射变换的形式是相同的,

所以不同的图形仅取决于压缩仿射变换的系数。在压缩仿射变换族中每一个压缩仿射变换

被调用的概率P不一定相同,这种概率称为伴随概率。

若令压缩仿射变换族为{ωi}(i=1,2,?,n),各压缩仿射变换对应的伴随概率为:1>Pi>0(i=1,2,?,n),且有

?Pi?1ni?1

压缩仿射变换族ωi与对应的伴随概率Pi确定了IFS码,IFS码由6个压缩仿射变换系数ai、bi、ci、di、ei、fi和伴随概率Pi组成。 2. 拼贴方法确定IFS码

对于规整的图形,可以明显地找出几何关系来确定相应的IFS码,而对于不规整的图形,常采用拼贴的方法获得其IFS码。由仿射变换公式知道,给定6个点,可以列出如下6 个方程,解方程组求得变换系数a,b,c,d,e,f,就可以确定一个仿射变换。这只要在分形图形的整体轮廓上选取三个特征点,然后再在各个局部轮廓上按相同的顺序选取对应的三个特征点,就可以获得从整体到各个局部的仿射变换。

第9章 建模与消隐

重点: 双表结构;多面体与曲面体;颜色缓冲与深度缓冲; 难点:背面剔除算法;表面内任一点的深度计算方法;

第9章重点学习指导:

1. 双表结构

在几何造型阶段,首先绘制的是物体的线框模型,然后通过填充表面或内部可以绘制表面模型或实体模型。一般情况下,使用顶点表、边表和面表3张表可以方便地检索出物体的任意一个顶点、任意一条边和任意一个表面,而且数据结构清晰。在实际的建模过程中,由于实体模型中定义了表面外环的棱边方向,相邻两个表面上共享的同一条棱边的定义方向截然相反,导致无法确定棱边的顶点顺序,因而放弃使用边表。无论建立的是物体的线框模型、表面模型还是实体模型都统一到只使用顶点表和面表两种数据结构来表示,并且要求面表中按照表面法矢量向外的方向遍历多边形顶点索引号,表明处理的是物体的正面。仅使用顶点表和面表表示物体的数据结构的缺点是物体的每条棱边都要被重复地绘制2次。 2. 多面体与曲面体

场景中常用的物体是多面体和曲面体。学习这些简单物体的建模方法,可以提高学习兴趣。正多面体只有正四面体(tetrahedron)、正六面体(hexahedron)、正八面体(octahedron)、正十二面体(dodekaeder)和正二十面体(icosahedron)五种,如图9-12所示,表9-5给出了其几何信息。这五种多面体统称为柏拉图多面体。柏拉图多面体属于凸多面体,是计算机图形学中使用最多的物体,在3ds max等软件中获得了广泛的应用。在几何学中,若一种多面体的每个顶点均能对应到另一种多面体上的每个面的中心,二者互称为对偶多面体。互为对偶的多面体具有相同的边数E,且一个多面体的顶点数V等于对偶多面体的面数F。正四面体的对偶多面体依然是正四面体,正六面体和正八面体互为对偶多面体,正十二面体和正二十面体互为对偶多面体,如图28所示。

正四面体正六面体正八面体正十二面体正二十面体

图28 柏拉图多面体

曲面体主要包括于球、圆柱、圆锥、圆环等光滑物体,表面已有确定的参数方程表示形式。在计算机上绘制光滑物体时,需要进行网格划分,即将光滑曲面离散为平面多边形来表示,这些多边形一般为平面四边形或三角形网格。随着网格单元数量的增加,多边形网格可以较好地逼近光滑的曲面。曲面体的网格顶点表和面表由参数方程离散后计算得到。如图29所示。

图29 曲面体

3. 颜色缓冲与深度缓冲

Z-Buffer算法需要建立两个缓冲器:一个是深度缓冲器,用以存储图像空间中每一像素的深度值,初始化为最大深度值(z坐标)。另一个是帧缓冲器,用以存储图像空间中的每一像素的颜色值,初始化为屏幕的背景色。Z-Buffer算法计算准备写入帧缓冲器当前像素的深度值,并与已经存储在深度缓冲器中的原可见像素的深度值进行比较。如果当前像素的深度值小于原可见像素的深度值,表明当前像素更靠近观察者且遮住了原像素,则将当前像素的颜色写入帧缓冲器,同时用当前像素的深度值更新深度缓冲器。否则,不作更改。 4. 深度优先级排序

深度优先级排序算法的难点在于确定物体表面的深度优先级。对于图30所示的4个条相互交叉条(简称为交叉条),以红绿黄蓝颜色表示的每个条不平行于投影面,且至少有两个深度,不能简单地建立深度优先级表。红色条在绿色条的前面,绿色条在黄色条的前面,黄色条在蓝色条的前面,而蓝色条反过来又在红色条的前面。一种解决方法是沿着图中虚线循环地分割每个交叉条,直至最终可建立确定的深度优先级表。另一种解决方法是使用深度缓冲器算法直接绘制交叉条。

红色

蓝色

绿色

黄色

图30 交叉条

第9章难点学习指导: 1. 背面剔除算法

在消隐问题中,凸多面体消隐是最简单和最基本的情形。凸多面体具备这样的性质:连接物体上不同表面的任意两点的直线段完全位于该凸多面体之内。凸多面体由凸多边形构成,其表面要么完全可见,要么完全不可见。凸多面体消隐算法的关键是给出测试其表面边界线可见性的判别式。背面剔除方法为:先计算每个表面的法矢量,然后计算表面上任一点的视线矢量,根据二者的点积大于零来绘制该表面。事实上,背面剔除算法也是一种面消隐算法; 2. 表面内任一点的深度计算方法

多边形表面的顶点的深度值可以通过三维透视变换得到。而面内的深度则需要使用平面方程计算得到。若多边形表面的平面方程已知,一般采用增量法计算扫描线上每一像素点的深度值。当立方体旋转到图31所示的位置时,6个表面都不与投影面xOy面平行,这时需要根据每个表面的平面方程计算多边形内各个像素点处的深度值。

V3(x3,y3,z3)V2(x2,y2,z2)V0(x0,y0,z0)V1(x1,y1,z1)

图31 旋转立方体的任一表面

平面一般方程为:

Ax?By?Cz?D?0

式中系数A,B,C是该平面的一个法矢量N的坐标,即N??A,B,C? 根据多边形表面顶点的坐标可以计算出两个边矢量: 矢量V0V1??x1?x0,y1?y0,z1?z0? 矢量V0V2??x2?x0,y2?y0,z2?z0?

根据两个边矢量的叉积,可求得表面的法矢量N,得到系数A,B,C

??