计算机图形与OpenGL学习六(二维观察3.二维点与二维线段的裁剪)

    二维点与二维线段的裁剪

一般情况下,任何用来消除指定区域内或区域外的图形部分的过程称为裁剪算法,简称裁剪。尽管裁减可以使用任何形状,但通常使用正则矩形。

裁剪最多应用于观察流水线,目的是为了从场景中提取制定部分显示在输出设备上。

在二维观察函数中的裁剪算法用来识别出裁剪窗口中的图形部分。任何位于裁剪窗口外的内容都从将要送到输出设备上显示的场景中消除

 

1.   二维点裁剪

假设裁剪窗口是一个在标准位置的矩形,如果点p=(x,y)满足下列不等式,则保存该点用于显示:

计算机图形与OpenGL学习六(二维观察3.二维点与二维线段的裁剪)

否则,裁剪掉该点

线段裁剪算法通过一系列的测试和求交计算(求交计算比较耗时)来判断是否整条线断或其中的某部分可以保存下来。减少交点计算是每一种线段裁剪算法的主要目标。我们可以先进行测试,确定线段是否完整地在裁剪窗口的内部或完整地位于内部。如果不能确定,则必须通过交点计算来确定是否该线段有一部分落在窗口内部。

计算机图形与OpenGL学习六(二维观察3.二维点与二维线段的裁剪)

我们可以使用点裁剪的判断方式,测试一线段是否完整地落在所指定的裁剪窗口内部,如果线段两个端点P1,P2都在四条裁剪边界内,则该线段完全在裁剪窗口内;如果线段两个端点P1,P2都在四条裁剪边界中任意一条边界的外侧,则该线段完全在裁剪窗口外。否则,则该线段必定和至少一条边界线相交。

那么我们如何确定一条直线是否与边界线相交?下面介绍几种算法,请直达以下链接:

Cohen-Sutherland线段裁剪算法

梁友栋-Barsky裁剪算法