收藏 分享(赏)

图形学第七章习题答案.doc

上传人:dzzj200808 文档编号:2978843 上传时间:2018-10-01 格式:DOC 页数:5 大小:143.50KB
下载 相关 举报
图形学第七章习题答案.doc_第1页
第1页 / 共5页
图形学第七章习题答案.doc_第2页
第2页 / 共5页
图形学第七章习题答案.doc_第3页
第3页 / 共5页
图形学第七章习题答案.doc_第4页
第4页 / 共5页
图形学第七章习题答案.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、习题7.1 为什么需要隐藏面消隐算法?答:因为我们在用计算机生成三维物体的真实感图形,必须要做的是确定物体的可见部分,只有确定了物体的可见部分,我们才能在计算机中真实地再现三维物体。因此,我们就需要一个隐藏面消隐算法来去掉物体的不可见部分,从而避免错误地将不可见部分显示出来,这样就可以在计算机中生成一个三维物体的真实感图形了。7.2 能否用多边形相邻两条边决定的向量积来确定内法线方向?为什么?答:可以。设多边形 F 的顶点为 ,顶点的次序要求这样排列,使Lv,21观察者在多面体外沿着 走时,多边形的内部始L3终在观察者的右侧。 (定义 )10,vvL对顶点进行分类,分为凸点集合 A 和凹点集合

2、 B,对于点 :iv如果属于集合 A,则 F 的内法线方向定义为 ;Lvii 1,1如果属于集合 B,则 F 的内法线方向定义为 ;iii7.3 已知点 和一个视点 ,确定从 点观察)6,42(),03(),21(3PP )0,(CC时,哪个点遮挡了其它点。答:连接观察点 和点 的直线是:)1,(C)0,(1tx2tytz为了判断 是否在这条直线上,可以将点带入方程,得)0,63(2P时 ,在 时 ,所以 在过 点和3xtt 20,63zyx2PC点的投影线上。1接着以 为基准,判断哪个点在前面。 , , 分别在这条线CC12的 位置上。由 值可知, 在 前面,即 遮挡了 。3,0tt1P2P

3、2现在判断 是否在这条线上。 时 。)6,42(Px10,4zyt所以 不在这条投影线上,既没有遮挡 、 ,也没有被 、 遮挡。)6,42(3P1P21P27.4 设投影中心为原点,构造一个由透视投影到平行投影的变换。此变换使得原物体平行投影在 平面上和将原物体透视投影在规范化视见平面上产Oxy生的图像相同。答:原物体在平面 上的透视投影是:)/(bczz01vvzPer其中, 。点 在视见平面上的透视投影是:)/(bczzv),(yx,vvzP透视投影到平行投影变换 为:pT01000ffvp zz这里, 是规范化前裁剪平面的位置。fz现在,对点 应用变换 ,得到点:),(zyxPpT)1(

4、,fvzQ在 平面上的平行投影为:QOxy)0,(zyxv所以 和 产生相同的投影图像。而且, 变换将以PpT为边界的规范化透视视见体变换到以1, zzyzxf和为边界的长方体上。,0vvvv7.5 如图 7.14 所示,如果视图平面法向量为( 1,-2,-1) ,试写出它的一个显示排列。答:因为这种排列方式只有第一项和第八项是确定的,所以该排列为(1,*,*,*,*,*,*,6),其中*可以任意排列。7.6 z 缓冲器算法是怎么判断哪个面应消隐的?答:缓冲器算法设置了一个二维数组,类似于帧缓冲器。但是 缓冲z器存放的是每个象素点的深度值,而不是帧缓冲器中的颜色值。 缓冲器的初始值为某个大的数

5、值,通常是后裁剪平面的距离。在判断像素上的哪个平面更靠近观察者时,就可以简单地比较 缓冲器中的深),(yx z度值和当前平面的深度值。如果当前平面的值比 缓冲器中的值小(即距视点更近) ,则用新值替换原 缓冲器中的值,像素的颜色值也变成新z平面的颜色值。7.7 基本扫描线方法如何判断哪个面需要消隐?答:基本思想:从最上面的一条扫描线开始工作,向下对每一条扫描线进行处理。在处理当前扫描线时,开一个一维数组作为当前扫描线的 Z-buffer。首先找出与当前扫描线相关的多边形,以及每个多边形中相关的边对。对每一个边对之间的小区间上的各象素,计算深度,并与 Z-buffer 中的值比较,找出各象素处可

6、见平面,计算颜色,写帧缓存。对深度计算,采用增量算法。7.8 编写一个程序实现 7.5 节中的油画家算法。答:Void paint()/设多边形已保存在链表 m_AllPoly 中;/m_AllPoly 定义:list m_AllPoly800;int i,k,j,num; /i,k,j 临时整形变量,num 纪录链表 m_AllPoly 中多边形的个数;float zmin; /临时变量,设置一个最小值;float temp; /临时变量;bool tag;int Priority /记录优先级的临时变量; /为临时变量赋初值zmin = -65536;tag = TRUE;Priority

7、 = 1;/第一步:根据每个多边形顶点 z 坐标的极小值 zmin 的大小,按由小到大对它们做初步排序/利用冒泡排序for (j = 1; j m_AllPolyi.zmin) / m_AllPolyi.zmin 为链表中第 i 个多边形 z 最小值zmin = m_AllPolyi.zmin;k = i; /纪录当前多边形;/if /for i/按照从小到大排序,找到第 j 个多边形 m_AllPolyk,将 m_AllPolyj与/m_AllPolyk交换位置。temp = m_AllPolyj;m_AllPolyj = m_AllPolyk;m_AllPolyk = temp;/for j i = 1;while(num 1) /第二步:若链表中只有一个多边形,则算法结束。否则取表头多边形 P(即m_AllPoly1)。/首先,判断 P 的 z 的最大值是否比链表中任一多边形 Q 的 z 坐标值的最小值小。用布/尔变量 tag 作为标志。如果为 TRUE,说明成立;否则不成立。while(i = m_AllPolyi.zmin)tag = FALSE;k = i; /纪录不符合条件,导致 tag 变为 FALSE 的多边形。i+;/ while(i 1) /void paint()

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 专业基础教材

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报