java代码隐藏面消除算法_计算机图形学—— 隐藏线和隐藏面的消除(消隐算法)...

ed9005e92772198143adfe260b740772.png

一、概述

由于投影变换失去了深度信息,往往导致图形的二义性。要消除二义性,就必须在绘制时消除被遮挡的不可见的线或面,习惯上称作消除隐藏线和隐藏面(或可见线判定、可见面判定),或简称为消隐。经过消隐得到的投影图称为物体的真实感图形。

3677dbac844260c02e68e9a337879254.png

下面这个图就很好体现了这种二义性。

05eaee1716bad54f23fbd16f545a2d31.png

消隐后的效果图:

9b78156f2c1160e14bc91b5f7cba9647.png

消隐算法的分类

4d7bc097ddfd79cbf5064bd4e4d5ca82.png

所有隐藏面消隐算法必须确定:

在沿透视投影的投影中心或沿平行投影的投影方向看过去哪些边或面是可见的

30a8095853d69ce1a85b63f98a57f91b.png

两种基本算法

1、以构成图像的每一个像素为处理单元,对场景中的所有表面,确定相对于观察点是可见的表面,用该表面的颜色填充该像素.

适于面消隐。

a67e860bfd5f03167a7f5235cdd065f4.png

算法步骤:

a.在和投影点到像素连线相交的表面中,找到离观察点最近的表面;

b.用该表面上交点处的颜色填充该像素;

2、以三维场景中的物体对象为处理单元,在所有对象之间进行比较,除去完全不可见的物体和物体上不可见的部分.适于面消隐也适于线消隐。

53c311cc7e1da4fe1f879f06752d3b91.png

算法步骤:

a.判定场景中的所有可见表面;

b.用可见表面的颜色填充相应的像素以构成图形;

提醒注意

1.假定构成物体的面不能相互贯穿,也不能有循环遮挡的情况。

2.假定投影平面是oxy平面,投影方向为z轴的负方向。

4e1fa09e6d0b855a4700bad420661625.png

如果构成物体的面不满足该假定,可以把它们剖分成互不贯穿和不循环遮挡的情况。

例如,用图b中的虚线便可把原来循环遮挡的三个平面,分割成不存在循环遮挡的四个面。

二、可见面判断的有效技术

b6fe23b009aa5d712594d765ae25b144.png

1、边界盒

指能够包含该物体的一个几何形状(如矩形/圆/长方体等),该形状有较简单的边界。

26a22b9131248176bff95900b5c63981.png

d1b555cd8a1470f5dc162473bb460800.png

边界盒技术用于判断两条直线是否相交。

4b6cbae9a7a1a7d2fc3d5d22929aa04f.png

进一步简化判断

3de47c76b9874dfc2ee33cb104620228.png

2、后向面消除(Back-face Removal)

思路:把显然不可见的面去掉,减少消隐过程中的直线求交数目

f8274f51f433908afce6e0307d3eeecf.png

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值