计算机图形学中消隐的相关概念及算法

本文整理自西安交通大学软件学院祝继华老师的计算机图形学课件,请勿转载

基本概念

投影变换失去了深度信息,往往导致图形的二义性

  • 消隐:为了消除二义性,必须在绘制时消除被遮挡的不可见的线或面,习惯上称作消除隐藏线和隐藏面;
  • 经过消隐得到的投影图称为物体的真实图形
  • 消隐结果与观察物体有关,也与视点有关

image-20220213222629106

提高消隐算法效率的常见方法

  • 利用连贯性
  • 包围盒技术
  • 背面剔除
  • 空间分割技术
  • 物体分层表示

利用连贯性

相邻事物的属性之间有一定的连贯性,其属性值通常是平缓过渡的,如颜色值、空间位置关系等

  • 物体连贯性
    • 如果物体A与物体B是完全相互分离的,则在消隐时,只需比较A、B两物体之间的遮挡关系就可以了,无须对它们的表面多边形逐一进行测试。
  • 面的连贯性
    • 一张面内的各种属性值一般都是缓慢变化的,允许采用增量形式对其进行计算。
  • 扫描线的连贯性
    • 相邻两条扫描线上,可见面的分布情况相似。
  • 区域连贯性
    • 区域指屏幕上一组相邻的像素,它们通常为同一个可见面所占据,可见性相同。
    • 区域连贯性表现在一条扫描线上即为扫描线上的每个区间内只有一个面可见。
  • 深度连贯性
    • 占据屏幕上同一区域的不同表面的深度不同;
    • 但同一表面上的相邻部分深度是相近的,在判断表面间的遮挡关系时,只需取其上一点计算出深度值,比较该深度值即可得到结果。

包围盒技术

定义:一个形体的包围盒指的是包围它的简单形体

好的包围盒要具有两个条件:

  • 假设包围和充分
  • 紧密包围着形体;
  • 对其的测试比较简单。
  • 常用包围盒:长方体圆柱

例如:两个空间多边形A、B在投影平面上的投影分别为A’,B’ ,因为A’ 、B’的矩形包围盒不相交,则A’、B’不相交,无须进行遮挡测试。

image-20220213224043237

背面剔除

  • 外法向:规定每个多边形的外法向都是指向物体外部的。
  • 前向面:若多边形的外法向与投影方向(观察方向)的夹角为钝角(V· N<0),称为前向面。
  • 后向面:若多边形的外法向与投影方向(观察方向)的夹角为锐角(V· N>0),称为后向面(背面)。

后向面总是看不见的,不会由于后向面的遮挡,而使别的棱成为不可见的。因此计算时,可以把这些后向面全部去掉,这并不影响消隐结果

image-20220213224408709

空间分割技术

场景中的物体,它们的投影在投影平面上是否有重叠部分?

  • 依据:对于根本不存在相互遮挡关系的物体,应避免这种不必要的测试。
  • 原因:物体在场景中分散,有些物体的投影相距甚远,不存在遮挡关系。
  • 方法:将投影平面上的窗口分成若干小区域;为每个小区域建立相关物体表,表中物体的投影于该区域有相交部分;则在小区域中判断那个物体可见时,只要对该区域的相关物体表中的物体进行比较即可。

物体分层表示

表示形式:模型变换中的树形表示方式;

  • 依据:减少场景中物体的个数,降低算法复杂度;
  • 将父节点所代表的物体看成子节点所代表物体的包围盒,当两个父节点之间不存在遮挡关系时,就没有必要对两者的子节点做进一步测试;
  • 父节点之间的遮挡关系可用包围盒进行预测试。

image-20220213224550059

消隐的分类

按消隐对象和输出结果分类

  • 线消隐:消除的是物体上不可见的边。
  • 面消隐:消除的是物体上不可见的面。

image-20220213224622427

根据消隐空间分类

  • 物体空间的消隐算法:以场景中的物体为处理单元;

    for (场景中的每一个物体)

    ​ {将其与场景中的其它物体比较,确定其表面的可见部分;显示该物体表面的可见部分;}

    image-20220213224755936

  • 图像空间的消隐算法:以窗口内的每个像素为处理单元;

    for(窗口内的每一个像素)

    {确定距视点最近的物体,以该物体表面的颜色来显示像素}

    image-20220213224831889

消除隐藏线

坐标变换:通过坐标变换,将视点变换到Z轴的正无穷大处,视线方向变为Z轴的负方向

最基本的运算:线消隐中,判断面对线的遮挡关系:体分解成面,再判断面与线关系。判断过程中需反复地进行线线、线面之间的求交运算。

平面对直线段的遮挡判断算法

  1. 若线段的两端点及视点在给定平面的同侧,线段不被给定平面遮挡,转(7);
  2. 若线段的投影与平面投影的包围盒无交,线段不被给定平面遮挡,转(7);
  3. 求直线与相应无穷平面的交:
    • 无交点转(4);
    • 若交点在线段内部,交点将线段分成两段,与视点同侧一段不被遮挡,另一段在视点异侧转(4);
    • 若交点在线段外部,转(4)。
  4. 求所剩线段的投影与平面边界投影的所有交点。若无交点,转(7)。
  5. 以上所求得的各交点将线段的投影分成若干段,求出第一段中点。
  6. 若第一段中点在平面的投影内,则相应的段被遮挡,否则不被遮挡;其他段的遮挡关系可依次交替取值进行判断。
  7. 结束。

基本数据结构

面表(存放参与消隐的面) +线表(存放待显示的线)

消除隐藏面

  • 画家算法
  • Z缓冲算法
  • 扫面线Z缓冲算法
  • 区间扫面线算法
  • 区域子分割(Warnack)算法
  • 光线投射算法
  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
关于图形 的二次图形消隐相关文档 长方体的自隐藏线消隐上机指导 1. 实验目的与要求:掌握长方体的表面模型的建立;掌握三维图形的显示流程;掌握长方体自消隐算法。 2. 实验步骤: (1)长方体表面模型的定义 三维齐次坐标结构的定义,面结构的定义,面结构添加可见性属性;顶点表的定义,面表、与顶点表的关系。 (2)几何变换的实现 分别对顶点进行绕X轴旋转和绕Y轴旋转,旋转角度为参数,以实现轴测投影。 (3)消隐 计算每个面的外法向量,与视向量进行点积,给该面的可见性属性赋值。 (4)投影变换的实现 平行投影正投影的投影变换公式及矩阵,要求以XOY平面为投影平面,Z轴正方向为视线方向。 (3)窗口-视区变换的实现 窗口大小的选取——一般将所有图形都取在窗口内;注意投影变换时投影平面的选取,投影平面上的坐标与视区坐标x,y的对应。 (4)图形显示 显示面表的每一个面,对于不可见面用虚线绘制该面各边,对于可见面用实线绘制各边。 3. 具体任务 在已给出程序Draw3D2,在视图类分别添加绕X轴旋转和绕Y轴旋转的函数void RotateX(int angle)和void RotateY(int angle);在视图类添加计算外法向量的函数HOMOCOORD GetN(HOMOCOORD p1, HOMOCOORD p2, HOMOCOORD p3),其返回值为外法向量。注意面结构添加的可见性属性,注意显示图形时对于不可见和可见面的处理。 4. 说明 绕X轴的旋转变化的公式实现: 考虑到旋转变化不影响w分量,可得 其他变换类似。对顶点表每个顶点进行更新。 计算外法向量函数的: P1,p2,p3为面上逆时针依次相连的三个顶点,由此外法向量N=(p2-p1)×(p3-p2); 若令x1=p2.x-p1.x, y1=p2.y-p1.y, z1=p2.z-p1.z; x2=p3.x-p2.x, y2=p3.x-p2.x, z2=p3.x-p2.x; 则外法向量可以由下列行列式求出 即
### 回答1: 计算机图形学消隐是指在计算机图形学,为了避免多个物体在同一位置上重叠显示而产生的遮挡现象,需要对这些物体进行处理,使图像显示更加真实和清晰。 具体来说,消隐技术可以分为物理消隐算法消隐两种方法。 物理消隐主要通过硬件方面的处理来实现,如使用深度缓冲区(Depth Buffer)来存储像素的深度信息,当物体被绘制时,会与缓冲区的深度信息进行比较,如果当前物体的深度值小于缓冲区对应像素的深度值,则将该像素绘制出来,否则进行遮挡。 算法消隐则是通过计算机算法来实现,常见的算法有扫描线算法、边缘表算法和光线追踪等。扫描线算法通过扫描每一行像素,检查每个像素与物体的交点,来确定需要绘制的像素。边缘表算法则是通过记录轮廓边缘的交点信息,进行边缘的连接和填充。光线追踪是通过跟踪光线的路径,计算出物体表面各点的颜色和亮度值,从而确定需要显示的图像。 计算机图形学消隐对于实现真实感和视觉效果至关重要,可以使得图像在显示过程更加准确和逼真。不同的消隐方法适用于不同的应用场景,在实际应用需要根据需求和性能进行选择和优化。 ### 回答2: 计算机图形学消隐是指对于三维场景的隐藏面或者隐藏线的处理技术,以实现在计算机屏幕上绘制逼真的二维图像。在三维场景,物体之间可能会相互遮挡,如何准确地确定哪些物体显示在前面,哪些物体被其他物体遮挡,是图形学一个重要的问题。 消隐算法通常根据场景物体的深度信息来进行处理。其,深度缓冲是一种常用的技术。深度缓冲是一张与屏幕大小相同的二维数组,用于记录每个像素的深度值。在绘制三维物体时,会根据物体的深度信息将像素的深度值存储到对应位置的深度缓冲。当绘制下一个物体时,会对比当前像素的深度值与深度缓冲对应位置的深度值,若当前像素的深度值较小,则将其存储到深度缓冲,并覆盖之前的像素值。 除了深度缓冲,还有其他的消隐算法,如后背面消隐和边界绘制算法。后背面消隐算法基于物体的投影面的法向量来判断物体是面朝观察者还是背对观察者,只绘制面朝观察者的部分。而边界绘制算法则根据物体的边界信息来决定哪些像素需要绘制,减少不必要的绘制过程。 计算机图形学消隐概念是为了解决物体在三维场景的遮挡问题,使得在计算机屏幕上呈现出逼真的二维图像。通过合理的消隐算法,可以提高图形渲染的效率和真实感,使得观察者可以看到视觉上连续和逼真的场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hydrion-Qlz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值