版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2DViewing
Contents2DViewingPipelineClippingWindowViewport2DClippingPointclippingLineclippingAreaclippingTextclipping26.12DViewingPipelineDef.常规图形系统中,世界坐标系中指定的用于显示的坐标区域->裁剪窗口(clipping
window)或窗口(window)Def.显示设备上用于窗口映射的坐标区域->视区、视口(viewport)。Def.通常,世界坐标系中部分场景映射到设备坐标系的过程->观察(视图、视像)变换。3设备坐标系xyv1v2v3v4视口xyw1w2w3w4窗口世界坐标系4xy??任意方向的矩形窗口x0y0ywxwxvyv52D观察流水线(P.247)建模坐标-世界坐标变换世界坐标-观察坐标变换观察坐标-规范化坐标观察变换规范化坐标到设备坐标变换MCWCVCNCDCW-VW-V6窗口->视口变换xyw1w2w3w4窗口(xw,yw)xyv1v2v3v4视口(xv,yv)7保持视口与窗口中的对象具有同样的相对位置,必须满足
(Xw-W1)/(W2-W1)=(Xv-V1)/(V2-V1)(Yw-W3)/(W4-W3)=(Yv-V3)/(V4-V3)窗口->视口变换8
Xv=SxXw+txYv=SyYw+ty缩放系数
Sx=(V2-V1)/(W2-W1)Sy=(V4-V3)/(W4-W3)平移参数
tx=(W2*V1-W1*V2)/(W2-W1)ty=(W4*V3-W3*V4)/(W4-W3)9已知w1=10,w2=20,w3=40,w4=80,v1=80,v2=110,v3=10,v4=130,窗口中一点P(15,60),求视区中的映射点P‘?解:(15-10)/(20-10)=(xv-80)/(110-80) (60-40)/(80-40)=(yv-10)/(130-10)xv=95,yv=70Example10OpenGL2DViewingFunctions(P.253-257)Demo(P.258-259)116.22DClipping裁剪定义Clipping
识别图形在指定区域内或区域外的过程->裁剪应用包括:从定义的场景中取出用于观察的部分;在三维图形中标识出可见面;防止线段或对象的边界混淆;用实体造型来创建对象;显示多窗口的环境;允许进行拷贝、移动或删除等绘图操作126.22DClipping裁剪窗口:用来裁剪对象的区域。裁剪时机针对窗口裁剪:只有窗口内的部分映射到设备坐标系中,不用将多余图元变换到设备空间中针对视口裁剪:映射后,用视口边界裁剪,可通过合并观察和几何变换矩阵来减少计算量136.22DClipping裁剪类型点裁剪直线裁剪多边形区域裁剪曲线裁剪(P.279)文字裁剪146.2.1点裁剪点(x,y)如果满足下列不等式则保留:w1<=x<=w2w3<=y<=w4w1w2w3w4(x,y)156.2.2直线裁剪16Cohen-Sutherland直线裁剪算法Liang梁友栋-Barsky直线裁剪算法Nicholl-Lee-Nicholl直线裁剪算法非矩形裁剪窗口(P.270自学)6.2.2直线裁剪176.2.2.1CS直线裁剪算法IDEA直线由端点标识;测试直线端点和窗口边界的关系以确定是否需要计算交点
18CS编码方案扩展窗口的边界将整个2D平面划分为9个区域每个区域赋予一个4位编码,称为区域码000001100100010100100001100110001010上下右左w1w2w3w419编码规则b0=1iffx<w1b1=1iffx>w2b2=1iffy<w3b3=1iffy>w4000001100100010100100001100110001010上下右左w1w2w3w420算法描述计算直线端点编码,c1和c2;判断c1和c2均为0000,保留直线c1&c2不为零,同在某一边界外,删除该直线c1&c2为零,需要进一步求解交点以L,R,B,T为序,找出端点区域码中第一位为1的位,将x=w1/w2或y=w3/w4带入直线方程,计算直线与窗口边界的交点,将交点和另一端点重复上述过程,直至线段保留或删除21程序流程图开始端点编码全为”0000”相与不为0否是是否计算直线与窗口的交点算法结束22程序实现(P.264)p1p2p3p4132123CS线段裁剪算法举例P3P4100000110010001010010000110011000101024CS线段裁剪算法举例132P1P200000110010001010010000110011000101025优点:简单,易于实现。算法中求交点的次数决定了算法的速度。CS线段裁剪算法小结26Exercise已知线段的两个端点
P1(-3/2,1/6),P2(1/2,3/2)
窗口边界x=-1,x=1,y=-1,y=1用CS算法对线段进行裁剪276.2.2.2Liang-Barsky线段裁剪算法思想:基于直线段参数方程分析的快速直线裁剪算法参数方程
直线两端点P1(x1,y1),P2(x2,y2) x=x1+(x2-x1)u y=y1+(y2-y1)u,0≤u≤128已知直线端点:起点P1(x1,y1),终点P2(x2,y2)参数方程: x=x1+(x2-x1)u y=y1+(y2-y1)u
P1P2u<00≤u≤1u>129LB算法推导
如果直线在窗口内,则
w1≤x1+dx*u≤w2 w3≤y1+dy*u≤w4
统一表示为:Pk*u≤Qkk=1,2,3,4P1=-dx,Q1=x1-w1P2=dx,Q2=w2-x1P3=-dy,Q3=y1-w3P4=dy,Q4=w4-y130w1w2w3w4ubulutur01dxdy31算法描述计算Pk,Qk,k=1~4Pk=0,表示直线平行于窗口某边界Qk<0,(任一小于零)直线完全在窗口外,被裁剪Qk>=0,直线在窗口内,平行边界内对Pk<>0的情形,用Qk/Pk计算交点所对应的u值32对每条线计算参数u1&u2u1=Max({Qk/Pk|Pk<0}
U
{0})u2=Min({Qk/Pk|Pk>0}
U
{1})如果u1>u2,则直线在窗口外,否则计算交点坐标
x(u)=x1+dx*uy(u)=y1+dy*u33LB线段裁剪算法例1已知线段的两个端点P1(3,4),P2(8,2),窗口边界直线方程分别为x=1,x=4,y=1,y=3用LB算法对线段进行裁剪34线段的参数方程x=3+5u y=4-2uP1=-5,Q1=2,R1=-2/5 P2=5,Q2=1,R2=1/5 P3=2,Q3=3,R3=3/2 P4=-2,Q4=-1,R4=1/2u1=max(0,-2/5,1/2)=1/2 u2
=
min(1,
1/5,
3/2)
=
1/5u1>u2
所以线段全部被裁剪35线段的两个端点(-2,-1)和(1,1.5),窗口边界方程分别为x1=-1,x2=1,y1=-1,y2=1。LB线段裁剪算法例236△x=3,△y=2.5p1=-3 q1=-1 r1=1/3p2=3 q2=3 r2=1p3=-2.5 q3=0 r3=0p4=2.5 q4=2 r1=4/5对于p<0,u1=max{0,1/3,0}=1/3对于p>0,u2=min{1,1,4/5}=4/5则u1<u2,则可见线段的端点坐标:x=x1+u1△x=-1,y=y1+u1△y=-1/6
即(-1,-1/6)x=x1+u2△x=2/5,y=y1+u2
△y=1
即(2/5,1)37程序实现(P.267~268)LBvs.CS LB效率高于CS,因为减少了交点计算次数。参数u1和u2的更新需要四次除法,交点坐标计算至多4次乘法。Liang-Barsky和Cohen-Sutherland算法很容易扩展为三维裁剪算法38Exercise已知线段的两个端点P1(-1,3),P2(1,1),窗口边界直线方程分别为x=0,x=2,y=0,y=2。用LB算法对线段进行裁剪39IDEA
通过在裁剪窗口周围创立多个区域,并在求交运算之前进行更多的区域测试,从而避免对直线段进行多次剪裁。适用范围
仅仅适用于2D剪裁6.2.2.3NLN直线裁剪算法40算法步骤从P1点向窗口的四个角点发出射线,这四条射线和窗口的四条边界直线一起将二维平面划分为更多的小区域。41线段端点P1的三种位置42Case143Case244Case3A45Case3B46P2位置?
比较直线段P1P2的斜率和裁剪区域边界的斜率.yt-y1y2-y1yt-y1xr-x1x2-x1xl-x1交点计算p247总结:求交前的检测是为了避免过多的不必要的计算;NLN算法的最主要目的是:对于必须求交点的情况,给出确定的相交边界,从而利用参数方程快速求取交点。486.2.3多边形区域裁剪直接采用直线段裁剪算法的问题裁剪前裁剪后49裁剪算法Sutherland-Hodgman算法Weiler-Atherton算法506.2.3.1Sutherland-Hodgman
算法
IDEA
以多边形顶点为初始集合,首先用窗口左边界剪裁多边形,产生新的顶点序列。新的顶点集依次传给右边界、下边界和上边界进行处理。SH算法最终输出定义剪裁后的多边形边界的顶点序列。P.272图6.235152输入:ABCDEFGHABCDEFGH输出:A12DEFGH12用左边界裁剪ADGH1用上边界裁剪345678输入:A134D5678GH输出:K34D56789IHJ9IJK53沿多边形依次处理顶点有四种情况 剪裁情况一Sout,Pin;由外至内输出i和p
P:secondoutputSINOUTi:firstoutput54剪裁情况二S&Pbothin;由内至内输出PPolygonbeingclippedP:outputClipboundarySINOUT55剪裁情况三Sin,Pout由内至外输出iINOUTSioutputP56剪裁情况四S&Pbothout由外至外无顶点输出
(nooutput)PSINOUT57123456窗口左边界Example581234561'2'3'4'5'窗口左边界591234561'2'3'4'5'窗口左边界60算法改进
只有当窗口的四个边界都确定一个点在窗口内时才加入到输出顶点表中Example(P.274图6.27)程序实现(P.275)
V1V2V3V1’V2’V2’’V3’61例V1V2V3V2V1V3V1'V2'V3V2'V2''V3'62问题
SH
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年信息安全意识培训与宣传手册
- 财务报销及审核制度
- 办公室员工培训记录与档案制度
- 办公室保密文件查阅与审批制度
- 2026年灯湖第三小学面向社会招聘语文、数学临聘教师备考题库及1套参考答案详解
- 2026年西安交通大学电信学部管理辅助人员招聘备考题库及1套参考答案详解
- 2026年湖南蓉园集团有限公司公开招聘备考题库含答案详解
- 2026年江西兴宜全过程项目咨询有限公司招聘造价工程师备考题库完整参考答案详解
- 中国东方航空技术有限公司2026招聘备考题库带答案详解
- 2026年镇康县腾势口岸经营管理有限公司行政管理岗招聘备考题库及参考答案详解
- GB/T 46758-2025纸浆硫酸盐法蒸煮液总碱、活性碱和有效碱的测定(电位滴定法)
- (二模)大庆市2026届高三第二次教学质量检测英语试卷
- 二元思辨:向外探索(外)与向内审视(内)-2026年高考语文二元思辨作文写作全面指导
- 《中华人民共和国危险化学品安全法》全套解读
- 民航上海医院2025年度公开招聘工作人员参考题库附答案
- 医院护理科2026年度工作总结与2026年度工作计划(完整版)
- 学校教辅选用管理委员会成立方案
- 《记念刘和珍君》《为了忘却的记念》阅读练习及答案
- 《矩形的定义及性质》课件
- SBR污水处理工艺讲座ppt课件
- 授居家二众三皈、五戒仪规
评论
0/150
提交评论