♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥

 

♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥

1.曲面消隐

消除隐藏的曲面。

原图:

14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树)

此时很难判断物体之间的位置关系。

消除隐藏的线和面:

14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树)

对于曲面消隐算法,根据消隐空间可以分为两种:

  • 图像空间消隐
  • 景物空间消隐/对象空间消隐

2.曲面消隐算法——图像空间算法

图像空间消隐是在图像坐标系进行设备变换(已经完成了投影变换,已经从三维转换为了二维)时的消隐。是二维坐标系下的消隐。

图像空间算法的特点为:

  • 受分辨率限制
  • 算法复杂为O(nN),n是多边形的数目(图元的数目),N是像素的数量

常用的算法有Z-buffer、扫描线算法。

(1)Z-buffer

Z-buffer算法,称为Z缓冲算法,即存储了Z轴的深度信息。选择离视点最近的点将其绘制。

投影面为z=0,投影类型为平行投影。

举例:

14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树)

紫色的三角形为第一个多边形,它是一个深度均匀的图形,深度均为5.

14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树)

橘色的多边形为第二个多边形,它的深度是不均匀的,在第一个多边形的基础上,更新颜色信息。

如果某个像素点已经是紫色了,但是橘黄色多边形离视点更近,则将其用橘黄色多边形替换。如果橘黄色多边形离视点更远,则该点的颜色不变。

如果某个像素点还没有颜色,则将其绘制为橘黄色。

可以看出,Z-buffer算法的思想为:选择离视点最近的点进行绘制。

其算法流程为:

z_buffer_init()//初始化

{

        对所有的像素点遍历进行初始化;

       {

               将所有的像素点绘制为背景色

               将所有像素点的z值初始化为正无穷

       }

}

z_buffer_draw()

{

       从第一个多边形开始遍历,到最后一个多边形

       {

              对该多边形的每个像素进行遍历

              {

                     如果该像素的Z值小于画布对应位置的像素的Z轴,

                     则将画布上该位置的Z值更新,同时更新颜色值。

              }

       }

}

注意:如果Z值是非正数,即负数和0,则在初始化的时候Z值应该是负无穷,然后取Z值最大的值。即总是取离视点最近的Z值。

Z_buffer算法的优缺点

  • 计算复杂度为O(nN),双重循环进行遍历
  • 优:不需要排序
  • 优:对多边形的几何形状没有限制,几何形状可以是任意的
  • 硬件加速
  • 缺:占显存
  • 缺:容易走样
  • 缺:不好处理透明物体

(2)扫描线算法

3.曲面消隐算法——对象空间算法

对象空间消隐是在视点坐标系进行投影变换时的消隐。

14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树)

对象空间算法的特点为:

  • 适合于精密的CAD工程领域
  • 算法复杂度为O(n^2),n是物体的数目。

常用算法为向后面剔除(back face culling )、列表优先级算法(list priority methods)。

3.1 向后面剔除

14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树)

如上图,是向后面剔除算法的示意图。

V:从物体到摄像机(视点)的视线方向。

N:物体表面的垂直方向。

14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树):该物体是不可见的。

14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树):该物体是可见的。

算法的不足:

  • 仅限于凸多面体。
  • 不能处理遮挡的物体。

3.2 列表优先级算法

原理:离视点远的物体不会遮挡离视点近的物体。

关键:确定景物空间中物体的可见性顺序。

条件:场景中物体在Z方向上没有相互重叠。

深度排序算法

这里采用画家算法,也被称为优先填充算法。

14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树)

如图是画家算法的示意图。

画家算法的主要思想是,先绘制距离较远的场景,然后用距离较近的场景替代距离较远的场景。

14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树)

如上图,可以看出多边形P的Zmax小于多边形Q的Zmin,则表明多边形Q更加接近视点(沿着Z轴负方向观察)。

则应该先画P,后画Q。

但是上图中,不同多边形的Z值范围是不重叠的,如果物体间的Z值范围是重叠的,则还需要判断多边形P是否遮挡多边形Q。

需要做以下5个判别步骤:

(1)多边形P和Q的x坐标范围是否不重叠。

14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树)

(2)多边形P和Q的y坐标范围是否不重叠。

14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树)

(3)从视点上看,多边形P是否完全位于多边形Q的背面。

14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树)

(4)从视点上看,多边形Q是否完全位于P的同一侧。

14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树)

(5)多边形P和Q在xy平面上的投影是否不重叠。

14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树)

上述五种情况只要有一种成立,则表明多边形P和Q是互相不遮挡的(如下图,物体是互相遮挡的)。则多边形P的绘制优先级低于Q。

如果仍旧无法判断其优先级顺序,则要对物体做多边形剖分。

14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树)14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树)

二叉空间剖分树算法(BSP树)

二叉空间剖分树算法的思想是:如果场景中多边形可以被一个平面分割成两部分,则与视点同侧的物体不会被异侧物体遮挡。

之后对位于分割平面两侧的多边形继续进行递归分割,直到每一个分割平面两侧或者一侧只有一个多边形。

可以看二叉空间剖分算法可以用一个二叉树的数据结构来表示。

举例:

14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树)

空间ABCABC三个独立的房间组成,首先,分割平面1将空间分成了平面正向的A房间和平面负向的BC空间,BC空间被2紧接着分割为平面2正向的C房间和负向的B房间。注意这里平面的方向一般由墙壁面向的方向而定。

另一个实例:

14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树)

14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树)

上图是为了说明二叉空间剖分树不是唯一的。

BSP树的遍历:

视点位于分割平面的正侧,则遍历顺序为:负侧分支->根节点多边形->正侧分支

视点位于分割平面的负侧,则遍历顺序为:正侧分支->根节点多边形->负侧分支

3.3 常见的消隐算法

  • Back-Face Detection
  • Painter's Algorithm
  • Ray Casting
  • Scan-Line
  • Z-Buffer
  • Area Subvision

 

 

♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥

广告时间:

本宝宝开通了一个公众号,记录日常的深度学习和强化学习笔记。

希望大家可以共同进步,嘻嘻嘻!

求关注,爱你呦!

14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树)

相关文章:

  • 2021-06-11
  • 2021-07-03
  • 2022-02-01
  • 2022-12-23
  • 2022-12-23
  • 2021-11-13
  • 2021-06-04
猜你喜欢
  • 2022-12-23
  • 2021-12-17
  • 2022-12-23
  • 2022-12-23
  • 2021-08-10
  • 2021-10-17
  • 2022-12-23
相关资源
相似解决方案