计算机图形学 学习笔记(五):多边形裁剪(Suther land-Hodgeman),文字裁剪

来源:互联网 发布:ubuntu 笔记本 编辑:程序博客网 时间:2024/06/08 16:17

接上文 计算机图形学 学习笔记(四):直线裁剪算法:Cohen-Suther land,中点分割法,Liang-Barsky


光栅图形学算法

3.4 多边形裁剪

之前上一篇文章中,我们介绍了直线段的裁剪算法。现在我们要对多边形进行裁剪,如果还是使用直线段的裁剪算法,我们会得到一系列不连续的直线段。如下所示:

这里写图片描述

而我们想要得到的结果或者说应该得到的结果,如下所示:

这里写图片描述

多边形裁剪算法的输出的应该是裁剪后的多边形边界的顶点序列。那么我们需要构造一个能产生一个或多个封闭区域的多边形裁剪算法。

Suther land-Hodgeman 多边形裁剪

算法思想:将多边形作为一个整体,每次用窗口的一条边对要裁剪的多边形和中间结果多边形进行裁剪,体现一种分而治之的思想

例子:用窗口的左边界进行裁剪,左图是未被裁剪过的,右图是裁剪后的图形。

这里写图片描述

再用裁剪窗口的下边界进行裁剪。

这里写图片描述

从裁剪得到的结果,可发现多边形的顶点由两部分组成

  1. 落在可见一侧的原多边形顶点
  2. 多边形的边与裁剪窗口边界的交点

根据多边形每一边与窗口边所形成的位置关系,沿着多边形依次处理顶点会遇到四种情况:

(1)第一点 S 在不可见侧面,而第二点 P 在可见侧。处理方法:交点 I 和点 P 均被加入到输出顶点表中。

这里写图片描述

(2)S 和 P 都在可见侧。处理方法:P 被加入到输出顶点表中

这里写图片描述

(3)S 在可见侧,而 P 在不可见侧。处理方法:交点 I 被加入到输出顶点表中

这里写图片描述

(4)如果 S 和 P 都在不可见侧。处理方法:输出顶点表中不增加任何顶点

这里写图片描述

在窗口的一条裁剪边界处理完所有顶点后,其输出顶点表将用窗口的下一条边界继续裁剪。

例子:

这里写图片描述

Suther land-Hodgeman 算法不足之处

利用 Suther land-Hodgeman裁剪算法对凸多边形进行裁剪可以获得正确的裁剪结果,但是对于凹多边形则不行,如下图:

这里写图片描述

多余线段产生的原因是:因为 Suther land-Hodgeman裁剪算法 裁剪后的仍然是多边形。

3.5 文字裁剪

屏幕上显示的不仅仅是多边形和直线等,还显示字符。字符如何来处理?

字符并不是由直线段组成的。文字裁剪包括以下几种:

  • 串精度裁剪
  • 字符精度裁剪
  • 笔划/像素精度裁剪

串精度裁剪

当字符串中的所有字符都在裁剪窗口内时,就全部保留它,否则舍弃整个字符串。

这里写图片描述

字符精度裁剪

在进行裁剪时,任何与窗口有重叠或落在窗口边界以外的字符都被裁剪掉。

这里写图片描述

笔划/像素精度裁剪

将笔划分解成直线段对窗口做裁剪。需要判断字符串中各字符的哪些像素、笔划的哪一部分在窗口内。保留窗口内的部分,裁剪掉窗口外的部分。

这里写图片描述

直线裁剪算法 Liang-Barsky 作业参考答案

题目:

这里写图片描述

答案:

这里写图片描述

阅读全文
0 0
原创粉丝点击