📜  查看和剪辑

📅  最后修改于: 2021-01-13 09:36:05             🧑  作者: Mango


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

点裁剪

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

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

点裁剪

剪线

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

科恩-萨瑟兰剪报

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

科恩-萨瑟兰剪线

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

左上角

这条线有3种可能性-

  • 行可以完全在窗口内(应接受此行)。

  • 线可以完全在窗口之外(该线将从该区域中完全删除)。

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

算法

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

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

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

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

步骤3.2-否则您需要裁剪。

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

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

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

步骤3.2.4-重复步骤2,直到找到一条被接受或被拒绝的剪切线。

步骤4-对其他行重复步骤1。

赛勒斯贝克线截断算法

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

赛勒斯贝克线截断

线的参数方程为-

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

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

如果N i 。[P(t)– P Ei ] <0,则点P(t)在内部

如果N i 。[P(t)– P Ei ]> 0,则点P(t)在外部

如果N i 。[P(t)– P Ei ] = 0(交点),则点P(t)在边上。

N i 。[P(t)– P Ei ] = 0

N i 。[P 0 + t(P 1 -P 0 )– P Ei ] = 0(用P 0 + t(P 1 -P 0 )代替P(t))

N i 。[P 0 – P Ei ] + N i .t [P 1 -P 0 ] = 0

N i 。[P 0 – P Ei ] + N i ∙tD = 0(用D代替[P 1 -P 0 ])

N i 。[P 0 – P Ei ] =-N i ∙tD

t的等式变为

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

在以下条件下有效-

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

多边形裁剪(Sutherland Hodgman算法)

也可以通过指定剪切窗口来剪切多边形。 Sutherland Hodgeman多边形裁剪算法用于多边形裁剪。在此算法中,将多边形的所有顶点都剪切到剪切窗口的每个边缘上。

首先,将多边形剪切到多边形窗口的左边缘以获取该多边形的新顶点。这些新顶点用于将多边形裁剪到裁剪窗口的右边缘,上边缘,下边缘,如下图所示。

填充前的多边形

在使用裁剪窗口处理多边形的边缘时,如果边缘不完全位于裁剪窗口内部,则会找到相交点,并且会裁剪从相交点到外部边缘的部分边缘。下图显示了左,右,顶部和底部边缘剪裁-

修剪四个边缘

文字剪裁

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

  • 全部或不截断字符串
  • 全部或不剪裁字符
  • 文字剪裁

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

全部或无字符串剪切

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

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

全部或无字符剪切

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

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

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

下图显示了文本剪辑-

文字剪裁

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

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

  • 如果字符在剪切窗口的边界上,那么我们只丢弃字符在剪切窗口之外的部分。

位图图形

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

笑脸

现在,我们将看到如何在计算机图形图像中一点一点地存储这个笑脸。

笑脸的位存储

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

以相同的方式,分别使用A4,B5,C6,D6,E5和F4的组合位表示笑脸。

位图图形的主要缺点是-

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

  • 彩色位图可能非常大。