📜  计算机图形学– 3D扫描线算法(隐藏表面去除)

📅  最后修改于: 2021-08-29 11:51:41             🧑  作者: Mango

该算法基于图像空间方法和相干概念。顾名思义,它本身就是扫描线算法,因此它一次只处理一行,而不是一次处理一个像素(光栅显示中的一个点)。该算法的工作原理如下:

  1. 在此,从左到右检查(处理)扫描线与多边形表面相交的每个点。
  2. 进行深度计算(如果找到重叠的表面)以识别更靠近视平面的多边形的隐藏区域(可见表面)。
  3. 一旦可见表面(隐藏表面)被识别,则当且仅当相应表面的标记处于打开状态时,相应的颜色强度值才会更新到刷新缓冲区(帧缓冲区)中。
  4. 该算法可有效地处理一个或多个多边形表面,并且该算法只是“多边形填充”的“扫描线”算法的扩展。

扫描线算法使用的数据结构

扫描线算法使用以下数据结构:

1.边缘列表表(列表):此列表通过存储所有边缘的端点坐标来维护所有边缘的记录。我们选择的x坐标,其Y坐标= Y min。

边缘列表表

图。1

2.活动边表(列表):此表包含当前扫描线相交(相交)的多边形的所有那些边。边以排序方式(x的递增值)放入表中。

活动边列表

图2

3.多边形表(列表):此列表包括:

  • 多边形ID。
  • 平面方程。
  • 表面的颜色信息。
  • 表面标记(开/关)。
多边形表

图3

让我们通过图4下图所示的示例进一步了解:

扫描线算法

图4

在此,给出两个分别由三条扫描线S 1 ,S 2 ,S 3相交的重叠多边形。因此,如果应用扫描线算法以识别隐藏表面(可见表面)会发生什么?

1.首先,检查扫描线(S 1 ),

  • 活动边缘表(Aet)包含:[AD,BC,RS,PQ]和
  • 曲面(S 1 )和曲面(S 2 )的标志设置为“ on”,而BX和RX之间的区域的标志设置为“ off”,因为它是多边形表面的外部区域,并且在视图中不投影-port(显示设备),现在
  • 将相应表面的颜色强度放入帧缓冲区(刷新缓冲区)中。

2.然后,处理扫描线(S 2 ),其

  • 活动边缘表(Aet)包含:[AD,BC,RS,PQ]和
  • 曲面(ABCD)和曲面(PQRS)的标志设置为“ on”,
  • 两个多边形表面彼此重叠,因此对于该重叠区域,应考虑哪一个表面强度?因此要回答这个问题,可以计算出表面(S 1 )和表面(S 2 )的深度(Z min) 在这个重叠部分中,接下来,
  • 如果深度(S 1 )>深度(S 2 ),则将表面S 1的标志=“ on”和表面S 1的强度视为S 2 ,现在
  • 将其标志设置为on的相应表面的颜色强度放到帧缓冲区(刷新缓冲区)中。

3.作为 扫描线(S3)从其中的扫描线(S2)被传递,S 3也具有同样的活性边缘表(AET)成分为S 2具有通过相同的部分和无需计算的深度(S1)和深度(S2)再次使S 3可以利用相干性的概念。

注意:连贯性是一种概念,它利用了场景所具有的规则性和均匀性。

扫描线算法

  • 使用所有具有其相应端点的边来初始化Edge表。
  • 初始化活动边表,使所有沿当前扫描线相交的边按排序顺序(x的递增顺序)
  • 使用[多边形ID,平面方程,表面的颜色信息,表面的标志(打开/关闭)]初始化多边形表。
  • 现在,对所有扫描线重复以下步骤:
    • 使用Y坐标作为值,按排序顺序在活动边列表中输入相应的值。
    • 使用扫描多边形,直到Flag =“ on”,然后执行color_intensity = background color。
    • 当一个多边形的Flag =“ on”时,相应的多边形表面(S i)的颜色强度将插入到帧缓冲区(刷新缓冲区)中。
    • 当两个或两个以上的多边形表面重叠且其Flag =“ on”时,找出多边形表面相应区域的深度,并设置Color_intensity = min [depth(S1),depth(S2)]。
    • 对其余平面使用“相干性”概念。