第四讲  消隐算法

一、消隐

消隐:(消除二义性)就是必须在绘制时消除被遮挡的不可见的线或面,习惯上称作消除隐藏线和隐藏面;

消隐不仅与消隐对象有关还与观察者的位置有关。

1.1消隐的分类

1.1.1按消隐对象分类
(1)线消隐:消隐对象是物体上的边,消除的是物体上不可见的边。
(2)面消隐:消隐对象是物体上的面,消除的是物体上不可见的面,通常做【真实感图形】消隐时用面消隐。

1.1.2按消隐空间分类
(1)物体空间消隐算法:以场景中的【物体】为处理单元,假设场景中有k个物体,将其中一个物体与其余k-1个物体逐一比较,仅显示它可见表面以达到消隐的目的,通常用于【线框图】的消隐。
1.Roberts算法:要求所有被显示的物体都是凸的,对于凹体要先分割成多个凸体的组合。【计算量甚大】
2.光线投射法:一条视线与场景中的物体可能有许多交点,求出这些交点后需要排序,在前面的才能被看到。
      光线投射:是求光线(视线,如视点与象素连成的线)与场景的交点。

(2)图像空间消隐算法:以屏幕窗口内的每个【象素】为处理单元。确定在每一个象素处,场景中的k个物体哪一个距离观察点【最近】,从而用它的颜色来显示该象素。【消隐算法的主流】

画家算法:要做到去除隐藏面的最简单的方法。如果一个场景中有许多物体,就是先画远的东西,再画近的东西。这样一来,近的东西自然就会盖住远的东西。

这张图片由于三个部分互相叠加,无法判断谁最远谁最近,所以用画家算法就无法解决。
——>画家算法只能解决【简单场景】的消隐问题。

1.Z-buffer算法(深度缓冲器算法)

帧缓冲器对应数组:intensity(x,y)——>属性数组(帧缓冲器)
            存储图像每个空间可见象素的光强或颜色
深度缓冲器对应数组:depth(x,y)——>深度数组(z-buffer)
           存放图像空间每个可见象素的z坐标

假设xoy面为投影面,z轴为观察方向,过屏幕上任意象素点(x,y)做平行于z轴的射线R,与物体表面相交于p1,p2点,p1和p2点的z值称为该点的深度值,z-buffer算法比较p1和p2的z值,将最大的z值存入z缓冲器中,显然屏幕上(x,y)显示p1点的颜色。

【算法思想】
先将Z缓冲器中各单元的初始值置为最小值,当要改变某个象素的颜色值时,首先检查当前多边形的深度值是否大于该象素原来的深度值(保存在该象素所对应的Z缓冲器的单元中),如果大于原来的Z值,说明当前多边形更靠近观察点,用它的颜色替换原象素的颜色。

【优点】

(1)Z-buffer算法比较简单,直观;
(2)在象素上以近物取代远物,与物体在屏幕上的出现顺序无关,有利于硬件实现。

【缺点】
(1)占用空间大;
(2)没有利用图形的相关性与连续性;
(3)该算法是在象素级上的消隐算法。

对缺点进行改进:
【1>并不需要开辟一个与图像大小相等的深度缓存数组,只用一个深度缓存变量zb的改进算法】
【关键问题】
1.判断象素点(i,j)是否在pk的投影多边形之内,不是一件容易的事,节省了空间但牺牲了时间。
2.计算多边形pk在点(i,j)处的深度。设多边形pk的平面方程

【点与多边形的包含性检测】
(1)射线法

由被检测点p处向y=负无穷方向作射线,交点个数为奇数,则被检测点在多边形内部,交点个数为偶数表示在多边形外部。

若射线正好经过多边形的顶点, 则采用“左开右闭”的原则来实现,也就是,当射线与某条边的顶点相交时,若边在射线的左侧,交点有效,计数,若边在射线的右侧交点无效,不计数。

【射线法弊端】
 1.计算量大

2.不稳定

(2)弧长法

以p点为圆心,作单位圆,把边投影到单位圆上,对应一段段弧长,规定逆时针为正,顺时针为负,计算弧长代数和。
代数和为0,点在多边形外部;
代数和为2π,点在多边形内部;
代数和为π,点在多边形边上。
【稳定——>假如算出来代数和不是0,而是0.2、0.1,那么基本上可以断定这个点在外部,可以认为是计算误差引起的,实际上是0】
【效率不高——>弧长并不容易求】

(3)以顶点符号为基础的弧长累加方法


p是被测点,按照弧长法,p点的代数和为2π,现在,不计算角度,以如下规定取代原来的弧长计算

同一个象限认为是0,跨过一个象限是π/2,跨过两个象限是π。

转载于:https://www.cnblogs.com/Penglimei/p/9708052.html

消隐算法(一)——Z-buffer算法相关推荐

  1. 莫队算法(小Z的袜子)

    目前的题型概括为三种:普通莫队,树形莫队以及带修莫队. 例题一:小Z的袜子 ·述大意: 进行区间询问[l,r],输出该区间内随机抽两次抽到相同颜色袜子的概率. ·分析: 对于L,R的询问.设其中颜色为 ...

  2. 经典算法:Z算法(z algorithm)

    经典算法:Z算法(z algorithm) 1. 算法简介 2. 算法原理 3. 代码实现 4. 推广应用 5. 参考链接 1. 算法简介 Z algorithm是我今天做leetcode的时候偶然得 ...

  3. Z Buffer(Z 缓存)

    Z Buffer(Z 缓存),Z-buffering是在为物件进行着色时,执行"隐藏面消除"工作的一项技术,所以隐藏物件背后的部分就不会被显示出来. 在3D环境中每个像素中会利用一 ...

  4. 第八课.EM算法的合理性与算法推导

    目录 EM算法背景 EM算法迭代的合理性 EM算法推导 EM算法的E步和M步 分析EM算法的由来 EM算法背景 在硬币投掷和班级身高问题中,引入了隐变量问题,模型变成了混合模型,我们不能直接利用极大似 ...

  5. Surf算法学习心得(一)——算法原理

    Surf算法学习心得(一)--算法原理 写在前面的话: Surf算法是对Sift算法的一种改进,主要是在算法的执行效率上,比Sift算法来讲运行更快!由于我也是初学者,刚刚才开始研究这个算法,然而网上 ...

  6. raft算法mysql主从复制_Raft算法赏析

    前言 最近抽空看了大名鼎鼎的Raft算法论文,看完后就一个感觉:如此复杂的算法居然可以设计得如此简洁.巧妙. 反复看了几遍,非常过瘾,原文不仅通俗易懂,而且非常严谨,所有异常情况都做了充分的考虑以及给 ...

  7. python 查找算法_七大查找算法(Python)

    查找算法 -- 简介 查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素. 查找表(Search Table):由同一类型的数据元素构成的集合 关键字(Ke ...

  8. 前向传播算法和反向传播算法

      最近在看神经网络中的前向传播算法(FP)和反向传播算法(BP),特地进行总结一下,方便以后理解. 1.基本概念   上图是一张自己画的神经网络的图.假设每一层都添加了偏度单元(即值为1的神经元), ...

  9. pm模型matlab算法,18基于遗传算法(粒子群算法、人工鱼群算法等)的投影寻踪模型MATLAB源代码...

    基于遗传算法(粒子群算法.人工鱼群算法等)的投影寻踪模型 MATLAB源代码 投影寻踪是一种处理多因素复杂问题的统计方法,其基本思路是将高维数据向低维空间进行投影,通过低维投影数据的散布结构来研究高维 ...

  10. python实现排列组合公式算法_Python实现卡尔曼滤波算法之贝叶斯滤波

    Python实现卡尔曼滤波算法之贝叶斯滤波 作者:yangjian 卡尔曼滤波器属于贝叶斯滤波器的一种特例,本文主要讲解贝叶斯滤波原理及其算法的python实现. 先来看下贝叶斯公式 贝叶斯公式 :后 ...

最新文章

  1. [nRF51822] 8、基础实验代码解析大全 · 实验11 - PPI
  2. 云计算调查显示 希望与问题同在
  3. 软件工程期末考试复习(四)
  4. M1 macbook值得购买吗?关于M1芯片macbook的三点购买建议
  5. 京东:618 期间遭「黑公关」恶意抹黑;Adobe 回应“杀死Flash”;Bootstrap 5.0 Alpha 发布 |...
  6. mysql 5.6.15_mysql5.6.15问题如何解决
  7. Excel空值导入mysql_excel导入sqlserver时,数据为null的处理方法分享
  8. 学习Globle和window对象学习心得+jquery中的$(#id)与document.getElementById(id)的区别+成功激活win10的方法
  9. HTMLpre代码美化
  10. 利用tcp三次握手,使用awl伪装MAC地址进行多线程SYN Flood
  11. 程序员如何利用空闲时间挣零花钱
  12. Java输出PPT文件(二) - 占位符数据替换
  13. 2018 届互联网校招高薪清单曝光:25 万年薪只是白菜价?
  14. redis关于set的常用命令
  15. 计算机课件制作软件,浅谈计算机课件制作
  16. 2021国家开放大学计算机网络安全技术形成性考核二
  17. 兄弟连新版ThinkPHP视频教程
  18. JAVA计算机毕业设计园艺生活网站Mybatis+源码+数据库+lw文档+系统+调试部署
  19. 新电脑改win7系统如何调整bois的方法总结
  20. java的Intersect用法_SQL INTERSECT的用法

热门文章

  1. 论文笔记: 基于 BMF 和 GreConD 的推荐
  2. docker 删除镜像image报错 Error response from daemon: conflict: unable to remove repository reference
  3. 微信公众号利用客服接口主动给用户发送消息的方法
  4. 戴尔服务器开机显示dhcp,新买的戴尔笔记本,如何解决开机显示DHCP?
  5. 茅台市值超LV,在它的产业链地下,有着一个月赚300万的暴利链条
  6. 刷脸支付实现刷脸即会员的新亮点
  7. the input device is not a TTY. If you are using mintty, try prefixing the command with ‘winpty’ 解决方案
  8. 台达DVP-MC运动控制器不完整笔记-目录
  9. 坑系列 --- 高可用架构的银弹 1
  10. C#进行AutoCAD二次开发实例之倒角功能实现原理介绍