作物三(计算机图形学).pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
作物三(计算机图形学)

第4章 变换和裁剪 ;直线P0P1的参数方程;令;梁友栋-Barsky算法;设P0P1和两条始边的交点参数为t0’,t0”,令 t0 = max(t0’,t0”,0), 则t0就是P0P1和两条始边的交点与P0三点中最靠近P1的点的参数。 设P0P1和两条终边的交点参数为t1’,t1”,令 t1 = min(t1’,t1”,1), 则t1就是P0P1和两条终边的交点与P1三点中最靠近P0的点的参数。 当t1t0时,参数t?[t0,t1]的线段就是P0P1的可见部分 当t1t0时,整个线段为不可见。;初始化线段在边界内的端点参数为t0 = 0、t1 = 1。 计算出各个裁剪边界的q、d值。 当q = 0且d 0时,舍弃该线段;否则计算线段与边界的交点参数 t。 当q 0时,参数 t 用于更新 t0; 当q 0时,参数 t 用于更新 t1。 如果更新了 t0 或 t1 后,使t0 t1,则舍弃该线段。否则画出以t0和t1为参数的线段;梁友栋-Barsky算法;Cyrus-Beck裁剪算法(参数化裁剪算法);线段上的点和多边形的关系;现假设多边形有k条边,在每条边界Li上取1个点 Ai ,该点处的内法向量Ni(i=1,2,…,k),则可见线段的参数区间为下列不等式组的解; ;若对于某个i,有Ni ? (P2-P1)=0 ,这时,Ni ? P2-P1 ,P1P2 与对应边平行,如图所示。这时有两种情况:线段在区域外侧或内侧。前一种情况对应于 Ni ? (P1-Ai) 0 ;Cyrus-Beck算法;当凸多边形是矩形窗口,且矩形的边平行于坐标轴时,上述算法可简化为梁友栋-Barsky算法。由于每条边上法向量只有一个非零分量,所以任意一个向量与法向量求内积的运算很简单。; 多边形是由一组线段围成的封闭区域,线段裁剪是多边形裁剪的基础。下图(b)是多边形的线段被裁剪后的结果,但已不再是封闭的区域。正确的剪裁结果应是一个有边界的区域,即裁剪后的结果仍是一个(或多个)多边形 ,这就要求在裁剪过程中应当保留多边形的区域性质。;Sutherland-Hodgman算法;线段端点S、P与裁剪线的位置关系;Sutherland-Hodgman算法框图;1.从主函数得到待裁剪多边形的顶点序列P[][2]、顶点序列数n、窗口一条边界参数xl (假如为矩形窗口的左边界); 2.赋初值: 将顶点序列中的最后一个顶点赋给前一顶点S;   设置初始标志flag:   if (S在边界内侧) flag=0;   else flag=1; 设新的顶点序列数j=0;   ;3、对多边形各顶点进行裁剪规则处理,结果放入新的多边形顶点序列Q[][2]中:   for(对第一个顶点直到最后一个顶点,逐一处理){   if (Pi在边界内侧){     if (flag!=0){       flag=0;        求交点并放入新的多边形顶点序列Qj中; j++; }      将当前顶点放入新的多边形顶点序列Qj中:Qj=Pi; j++; }     else{      if (flag==0){        flag=1;        求交点并放入新的多边形顶点序列Qj中; j++; }    }    将当前顶点赋给S:S=Pi; } ;Sutherland-Hodgeman算法;字符裁剪;结 束;练习题;完整Sutherland-Hodgman算法;clip_single_edge(int edge, const int TYPE, int nin, int *xin, int *yin, int *nout, int *xout, int *yout) { int i, k; bool is_cross, is_in; int x, y, x_intersect, y_intersect; x = xin[nin-1]; y = yin[nin-1]; k=0; for(i=0; inin-1; i++){ test_intersect(edge, type, x, y, xin[i], yin[i], x_intersect, y_intersect, is_cross, is_in); if(is_cr

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档