计算机图形学 第3版 第7章 消除隐藏线和隐藏面.pptx

计算机图形学 第3版 第7章 消除隐藏线和隐藏面.pptx

  1. 1、本文档共83页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

2024/10/11;第七章消除隐藏线和隐藏面的算法;消隐

面消隐

线消隐

三维形体表示为多边形表面形集合

投影约定为沿着z轴正向的投影

消除隐藏面算法:

图像空间算法

客体空间算法

图像空间(屏幕坐标系)算法对显示设备上每一个可分辨像素进行判断,看组成物体的多个多边形表面中哪一个在该像素上可见,即要对每一像素检查所有的表面。

客体空间(观察坐标系)算法把注意力集中在分析要显示形体各部分之间的关系上,这种算法对每一个组成形体的表面,都要与其它各表面进行比较,以便消去不可见的面或面的不可见部分。;第一节线面比较法消除隐藏线;把n和k记作

则; 设空间有一个四面体,顶点A,B,C,D的坐标依次是(0,0,0),(2,0,1),(4,0,0),(3,2,1)从z轴正向无穷远处观察,求各面的可见性

观察方向向量是k=(0,0,1)=(0,0,1)-(0,0,0),观察位置(0,0,1),A(0,0,0)是面DAB,ACB上的点。

;(0,0,0);(0,0,0); 利用外法线就可以判断凸多面体上各表面的可见性,由此就能解决对单个凸多面体的隐藏线和隐藏面的消除问题。

单个凸多面体──可见面上的线是可见线,

多个凸多面体或非凸多面体──用上面的方法预处理,排除以后不必考虑的不可见面,剩下可能可见面。

可能可见的棱线:在可见面上或与可见面有公共边;线面比较法:(观察位置位于Z轴负方向无穷远处)

0.预处理,用外法线法判断出所有可能可见面

思想:求出所有可能可见面,可能可见面上的线段是可能可见线。

每一条可能可见线和每一个可能可见面比较,

从而确定出可见线、隐藏线及可见线上的隐藏部分。;可能可见线和可能可见面

空间任一线段,只有其投影与多边形表面的投影范围发生交叠时,才可能与多边形表面有遮档关系;1.范围检查:最大最小检验,即通过比较有关的最大或最小值来判定范围的交叠情形。(xv,yv方向)

①求出线段的投影

xmin1,xmax1,ymin1,ymax1

②求出多边形表面的投影范围

(zv平面上包含多边形投影的最小矩形)

xmin2,xmax2,ymin2,ymax2;③比较投影范围:

在xv方向:

若xmax1=xmin2或xmax2=xmin1,则无遮挡关系

在yv方向:

若ymax1=ymin2或ymax2=ymin1,则无遮挡关系;2.zv方向粗略的深度检查。

若线段投影的最大z坐标zmax1小于多边形表面投影范围最小的z坐标zmin2,则线段完全在表面前面,不发生遮挡现象,可以不必再往下做精确的深度检验。

zmax1=zmin2;3.精确的深度检验

已知z1,求z1在平面的投影点z1’

设平面方程为Ax+By+Cz+D=0

直线L1的参数方程

X=x1,Y=y1,Z=z1+t,

代入平面方程得:Ax1+By1+C(z1+t)+D=0

解得

若t≥0,则z1≤z1’,靠近视点可见

若t<0,则z1z1’,远离视点;线段P1P2

若z1≤z1’且z2≤z2’,则线段不被遮挡

若z1≥z1’且z2≥z2’,有可能遮挡需要进一步检查

若非以上两种情况,必然相交,求出交点,交点将原线段分成两段,分别属于上面两种情况;4.进一步检查

对平面遮挡了线段的哪些部分做精确计算

求线段投影与多边形边框投影的交点

设交点已经求出,设其对应的参数λ,按从小到大依次排序后是λ1,λ2,…,则这些交点将投影线段分成的各子线段的可见性应是可见,不可见交替出现。

;判断子线段的可见性:

取子线段上任意一点,若这点在多边形各边投影所形成的封闭多边形内,该子线段就不可见,否则就可见。;线面遮挡判断算法如下:

1)视点和线段在给定平面的同侧,线段不被给定平面遮挡。

2)线段的投影和平面的投影的包围盒不相交,线段不被平面遮挡。

3)计算直线与平面是否相交。若无相交转4);否则交点在线段内部或外部。若交点在线段的内部,交点将线段分成两段,与视点同侧的一段不被遮挡,另一段在视点异侧,转4);若交点在线段外部,转4)步。

4)求所剩线段的投影和平面边界的投影的所有交点,根据交点在原直线参数方程中的参数值求出Z值。若无交点,转7)步。

5)所求的各交点将线段的投影分成若干段,求出第一段中点。

6)若第一段中点在平面的投影内,则相应的段被遮挡,否则不被遮挡,其它段依次交替取值进行判断。

7)算法结束。;线面消隐算法(){

坐标变换;

for(对每一个面FACEi的每一条边EDGEj)将二元组EDGEj,i压入堆栈

while(栈不空){

EDGEj,i0=栈顶;

for(i!=i0的每个面FACE

文档评论(0)

dllkxy + 关注
实名认证
内容提供者

本文库主要涉及建筑、教育等资料,有问题可以联系解决哦

版权声明书
用户编号:5213302032000001

1亿VIP精品文档

相关文档