查看和剪辑


计算机图形学中剪裁的主要用途是删除查看窗格之外的对象、线条或线段。观看变换对点相对于观看体积的位置不敏感——尤其是观看者后面的那些点——并且有必要在生成视图之前删除这些点。

点剪裁

从给定窗口剪切一个点非常容易。考虑下图,其中矩形表示窗口。点裁剪告诉我们给定点(X,Y)是否在给定窗口内;并决定是否使用窗口的最小和最大坐标。

如果 X 位于 Wx1 ≤ X ≤ Wx2 之间,则给定点的 X 坐标位于窗口内。同样,如果 Y 位于 Wy1 ≤ Y ≤ Wy2 之间,则给定点的 Y 坐标位于窗口内。

点剪裁

线裁剪

线裁剪的概念与点裁剪相同。在线条裁剪中,我们将剪切窗口外部的线条部分,仅保留窗口内部的部分。

科恩-萨瑟兰线剪报

该算法使用如下图所示的裁剪窗口。剪切区域的最小坐标为 $(XW_{min,} YW_{min})$,剪切区域的最大坐标为 $(XW_{max,} YW_{max})$。

科恩-萨瑟兰线剪裁

我们将使用 4 位来划分整个区域。这 4 位代表区域的顶部、底部、右侧和左侧,如下图所示。这里,TOPLEFT位被设置为 1,因为它是左上角

左上角

该行有 3 种可能性 -

  • 线可以完全在窗口内(这条线应该被接受)。

  • 线可以完全在窗口之外(这条线将被完全移出区域)。

  • 线条可以部分位于窗口内部(我们将找到交点并仅绘制位于区域内部的那部分线条)。

算法

步骤 1 - 为每个端点分配区域代码。

步骤 2 - 如果两个端点的区域代码都是0000,则接受此行。

步骤 3 - 否则,对两个区域代码执行逻辑AND运算。

步骤 3.1 - 如果结果不是0000,则拒绝该行。

步骤 3.2 - 否则你需要剪辑。

步骤 3.2.1 - 选择窗口外线的端点。

步骤 3.2.2 - 找到窗口边界处的交点(基于区域代码)。

步骤 3.2.3 - 将端点替换为交点并更新区域代码。

步骤 3.2.4 - 重复步骤 2,直到我们找到一条被简单接受或简单拒绝的剪裁线。

步骤 4 - 对其他线路重复步骤 1。

Cyrus-Beck 线裁剪算法

该算法比 Cohen-Sutherland 算法更高效。它采用参数线表示和简单的点积。

赛勒斯贝克线剪裁

直线的参数方程为 -

P0P1:P(t) = P0 + t(P1 - P0)

令 N i为向外法线边 E i。现在选取边缘 E i上的任意点 P Ei,然后点积 Ni . [P(t) – P Ei ] 确定点 P(t) 是“剪辑边缘内部”还是“剪辑边缘外部”或剪辑边缘“上”。

如果 N i .[P(t) – P Ei ] < 0,则点 P(t) 位于内部

如果 N i .[P(t) – P Ei ] > 0,则点 P(t) 位于外部

如果Ni .[P(t) – P Ei ] = 0(交点),则点 P(t) 位于边缘上

Ni . [P(t) – P Ei ] = 0

Ni . [ P 0 + t(P 1 - P 0 ) – P Ei ] = 0(将 P(t) 替换为 P 0 + t(P 1 - P 0 ))

Ni . [P 0 – P Ei ] + Ni .t [P 1 - P 0 ] = 0

Ni . [P 0 – P Ei ] + Ni tD = 0(用 D 代替 [P 1 - P 0 ])

Ni . [P 0 – P Ei ] = - Ni tD

t 的方程变为,

$$t = \tfrac{N_{i}.[P_{o} - P_{Ei}]}{{- N_{i}.D}}$$

它在以下条件下有效 -

  • N i ≠ 0(错误不会发生)
  • D ≠ 0 (P 1 ≠ P 0 )
  • Ni ∙D ≠ 0 (P 0 P 1平行E i )

多边形裁剪(Sutherland Hodgman 算法)

还可以通过指定剪切窗口来剪切多边形。Sutherland Hodgeman多边形裁剪算法用于多边形裁剪。在此算法中,多边形的所有顶点都针对裁剪窗口的每条边进行裁剪。

首先,将多边形剪裁到多边形窗口的左边缘,以获得多边形的新顶点。这些新顶点用于根据剪切窗口的右边缘、顶部边缘、底部边缘来剪切多边形,如下图所示。

填充前的多边形

在用裁剪窗口处理多边形的边缘时,如果边缘不完全在裁剪窗口内,则找到交点,并剪掉从交点到外侧边缘的部分边缘。下图显示了左、右、上、下边缘剪裁 -

剪裁四个边

文本剪辑

使用各种技术来提供计算机图形中的文本剪辑。这取决于用于生成字符的方法和特定应用程序的要求。下面列出了三种文本剪辑方法 -

  • 全部或无字符串剪辑
  • 全部或无字符剪辑
  • 文字剪裁

下图显示了全部或无字符串剪辑 -

全部或无字符串剪辑

在全或无字符串剪切方法中,我们要么保留整个字符串,要么根据剪切窗口拒绝整个字符串。如上图所示,STRING2 完全位于剪切窗口内,因此我们保留它,而 STRING1 仅部分位于窗口内,我们拒绝。

下图显示了全部或无字符剪辑 -

全部或全部字符剪辑

这种剪切方法基于字符而不是整个字符串。在此方法中,如果字符串完全位于剪切窗口内,则我们保留它。如果它部分位于窗外,则 -

  • 您仅拒绝字符串外部的部分

  • 如果字符位于剪切窗口的边界上,则我们丢弃整个字符并保留其余字符串。

下图显示了文本剪辑 -

文本剪辑

这种裁剪方法是基于字符而不是整个字符串。在此方法中,如果字符串完全位于剪切窗口内,则我们保留它。如果部分位于窗外,则

  • 您仅拒绝字符串位于外部的部分。

  • 如果字符位于剪切窗口的边界上,则我们仅丢弃位于剪切窗口之外的字符部分。

位图图形

位图是描述图像的像素的集合。它是计算机图形学的一种,计算机用来存储和显示图片。在这种类型的图形中,图像是一点一点地存储的,因此被称为位图图形。为了更好地理解,让我们考虑以下示例,其中我们使用位图图形绘制笑脸。

笑脸

现在我们来看看这张笑脸是如何在计算机图形学中一点一点存储起来的。

笑脸的位存储

仔细观察原来的笑脸,我们可以看到有两条蓝色的线,分别表示为上图中的B1、B2和E1、E2。

同样,笑脸分别用A4、B5、C6、D6、E5和F4的组合位来表示。

位图图形的主要缺点是 -

  • 我们无法调整位图图像的大小。如果您尝试调整大小,像素会变得模糊。

  • 彩色位图可能非常大。