隐藏面消除

17 Mar 2025 | 5 分钟阅读
  1. 计算机图形学中最具挑战性的问题之一是从实体对象的图像中去除隐藏部分。
  2. 在现实生活中,这些对象的不透明材料会阻挡来自隐藏部分的光线,使我们无法看到它们。
  3. 在计算机生成中,当对象投影到屏幕坐标系上时,不会发生这种自动消除。
  4. 相反,每个对象的所有部分,包括许多应该不可见的部分,都会被显示出来。
  5. 为了去除这些部分以创建更逼真的图像,我们必须将隐藏线或隐藏面算法应用于对象集合。
  6. 该算法适用于不同种类的场景模型,生成各种形式的输出,或处理不同复杂度的图像。
  7. 所有算法都使用某种形式的几何排序来区分对象的可见部分和隐藏部分。
  8. 就像字母排序用于区分字母表中靠前的单词和靠后的单词一样。
  9. 几何排序定位靠近观察者的对象,因此这些对象是可见的。
  10. 隐藏线和隐藏面算法利用各种形式的相干性来减少生成图像所需的计算量。
  11. 不同类型的相干性与图像中不同的顺序或规律性形式相关。
  12. 扫描线相干性产生的原因是光栅图像中扫描线的显示通常与前一条扫描线的显示非常相似。
  13. 帧相干性 在旨在显示运动的图像序列中,它认识到连续的帧非常相似。
  14. 对象相干性 源于不同对象之间或同一对象的不同部分之间的关系。
  15. 隐藏面算法通常设计为利用一种或多种这些相干性属性来提高效率。
  16. 隐藏面算法与二维扫描转换非常相似。

隐藏面检测算法的类型

  1. 对象空间方法
  2. 图像空间方法

对象空间方法: 在这种方法中,会比较对象的各个部分。 比较之后,确定可见、不可见或几乎不可见的表面。 这些方法通常确定可见表面。 在线框模型中,这些方法用于确定可见线。 因此,这些算法是基于线的,而不是基于表面的。 该方法通过确定对象的哪些部分被其他对象遮挡,并以相同的颜色绘制这些部分来继续进行。

图像空间方法: 这里确定了各个像素的位置。 它用于定位可见表面而不是可见线。 检测每个点的可见性。 如果一个点是可见的,那么像素是亮的,否则是灭的。 因此,确定最靠近观察者的、穿过像素的投影线所刺穿的对象。 然后,该像素被绘制成适当的颜色。

这些方法也称为可见表面确定。在计算机上实现这些方法需要大量的处理时间和计算机的处理能力。

图像空间方法需要更多的计算。 每个对象都定义得很清楚。 还需要确定每个对象表面的可见性。

区分对象空间方法和图像空间方法

对象空间图像空间
1. 图像空间是基于对象。它侧重于场景中对象之间的几何关系。1. 这是一种基于像素的方法。 它关注的是最终图像,即每个光栅像素中可见的内容。
2. 在这里确定表面可见性。2. 在这里确定线可见性或点可见性。
3. 它以定义每个对象的精度执行,不考虑分辨率。3. 它使用显示设备的分辨率来执行。
4. 计算不是基于显示器的分辨率,因此可以轻松调整对象的更改。4. 计算是基于分辨率的,因此很难调整更改。
5. 这些是为矢量图形系统开发的。5. 这些是为光栅设备开发的。
6. 基于对象的算法对连续对象数据进行操作。6. 这些对对象数据进行操作。
7. 用于对象方法的矢量显示具有较大的地址空间。7. 用于图像空间方法的光栅系统具有有限的地址空间。
8. 对象精度用于需要速度的应用。8. 这些适用于需要精度的应用。
9. 如果要放大图像,则需要大量的计算。9. 可以放大图像而不会损失精度。
10. 如果场景中的对象数量增加,则计算时间也会增加。10. 在这种方法中,复杂度随着可见部分的复杂度而增加。

对象空间方法和图像空间方法的相似性

在这两种方法中,排序都用于深度比较单个线,表面根据它们与视平面的距离进行对象化。

Hidden Surface Removal
Hidden Surface Removal

选择或设计隐藏面算法的注意事项: 考虑以下三个因素

  1. 排序
  2. 相干性
  3. 引擎

排序: 所有表面分为两类,即可见和不可见。 像素相应地着色。 有几种排序算法可用,即

  1. 冒泡排序
  2. 希尔排序
  3. 快速排序
  4. 树排序
  5. 基数排序

不同的排序算法应用于不同的隐藏面算法。 使用 x 和 y、z 坐标对对象进行排序。 大多数字z坐标用于排序。 排序算法的效率会影响隐藏面消除算法。 对于排序复杂的场景或数百个多边形,使用复杂的排序,即快速排序、树排序、基数排序。

对于简单的对象选择,插入,气泡排序被使用。

相干性

它用于利用场景表面的恒定值。 它基于场景中存在的规则性。 当我们从一个对象的一个多边形移动到同一对象的另一个多边形时,颜色和剪切将保持不变。

相干性的类型

  1. 边缘相干性
  2. 对象相干性
  3. 面相干性
  4. 区域相干性
  5. 深度相干性
  6. 扫描线相干性
  7. 帧相干性
  8. 隐式边缘相干性

1. 边缘相干性: 边缘的可见性会在它穿过另一个边缘或它也穿透可见边缘时发生变化。

2. 对象相干性: 每个对象被认为与其他对象分开。 在对象中,相干性比较是使用对象而不是边缘或顶点来完成的。 如果 A 对象比对象 B 更远,那么就没有必要比较边缘和面。

3. 面相干性: 在这种情况下,面或多边形通常与图像的大小相比很小。

4. 区域相干性: 它用于覆盖相同可见面的像素组。

5. 深度相干性: 各种多边形的位置将深度作为分离的基础。 计算一个点处表面的深度,通常可以通过一个简单的差分方程来确定表面其余部分的点的深度。

6. 扫描线相干性: 使用一条扫描线扫描对象,然后使用第二条扫描线。 第一条线的截距。

7. 帧相干性: 它用于动画对象。 当图像从一帧到另一帧变化很小时,它被使用。

8. 隐式边缘相干性: 如果一个面穿透另一个面,则可以从两个交点确定相交线。

用于隐藏线表面检测的算法

  1. 背面消除算法
  2. Z缓冲区算法
  3. 画家算法
  4. 扫描线算法
  5. 细分算法
  6. 浮动地平线算法

下一个主题背面消除算法