本人土木转计算机,目前刚刚开始研究生生涯。最近喜欢上了三维计算机图形学,被射线与包围盒的相交测试函数卡了许久,以下分享一些个人的学习理解。

一、结构体定义

包围盒定义为三维空间中一个立方体,其六个面分别与XOY、YOZ、XOZ面平行,用min_x、max_x、min_y、max_y、min_z、max_z六个参数来标识其边界,其中min_x<max_x、min_y<max_y、min_z<max_z,在图形学中一般用O+tD来表示射线。

class Bound
{
public:float min_x, max_x, min_y, max_y, min_z, max_z;Bound(float x1, float x2, float y1, float y2, float z1, float z2) {min_x = x1;max_x = x2;min_y = y1;max_y = y2;min_z = z1;max_z = z2;};
};
struct Ray { Vec o, d;Ray(Vec o_, Vec d_) : o(o_), d(d_) {}
};

二、函数原理解释

为避免射线起点O与原点O产生重义,将射线起点用P代替。

当Dx、Dy、Dz>0,首先对X轴进行分析,如下图所示:

同理可求得t_Ymin、t_Ymax、t_Zmin、t_Zmax。

假设射线与包围盒相交,则必存在至少一个t值使得t_Xmin<=t<=t_Xmax、t_Ymin<=t<=t_Ymax、t_Zmin<=t<=t_Zmax同时满足。

取t_min=max{t_Xmin,t_Ymin,t_Zmin},t_max=min{t_Xmax,t_Ymax,t_Zmax},

当t_min>t_max时,t值不存在;

当t_min=t_max时,t值仅可取t_min;

当t_min<t_max是,t取值范围为[t_min,t_max]。

因此,仅需判断t_min与t_max两值大小就可判断射线与包围盒是否相交。

当Dx<0时(其他轴向同理),则公式变为

当Dx=0时(其他轴向同理),判定min_x<=Px<=max_x是否成立即可判定相交关系。

土木搬砖工图形学学习之路——射线与包围盒的相交测试相关推荐

  1. Java Nio 之高级搬砖工(FileChannel)二

    Java Nio 系列 Java Nio 之Buffer Java Nio 之直接内存 Java Nio 之高级搬砖工(FileChannel) 一 Java Nio 之高级搬砖工(FileChann ...

  2. 又到年底了,想知道你在互联网圈混到什么级别了吗?初级搬砖工还是极品精英?...

    又到年底了,想知道你在互联网圈混到什么级别了吗?初级搬砖工还是极品精英? 我测试出来竟然是IT名媛-- 亲们,手机扫码块测测,还有机会获得免费套餐邀请码,就是可以免费开通30余款云产品的那个邀请码哦! ...

  3. 从搬砖工到亿万富豪,这些年他经历了什么?

    在福建,有个人从工地搬砖工做到了拥有亿万财富的老板.而这其中的缘由竟然是因为茶油. 2015年,林龙生转行回老家,接手一个破产的工厂,还承包了8000亩山地.林龙生看中的这块地,其实里面种着一种别人都 ...

  4. Java Nio 之高级搬砖工(FileChannel) 一

    Java Nio 系列 Java Nio 之Buffer Java Nio 之直接内存 Java Nio 之高级搬砖工(FileChannel) 一 前言  大家对搬砖都很熟悉吧:小绿和小蓝是搬砖工, ...

  5. 搬砖工php什么意思,醒工砖是什么意思什么梗 醒工砖是醒醒工头喊你起来搬砖的意思...

    醒工砖是什么意思什么梗?醒工砖,网络流行词,原句是"醒醒,工头喊你起来搬砖","醒工砖"是缩写形式.下面就跟360常识网一起具体看看醒工砖等相关内容. 醒工砖词 ...

  6. 普通二/三本学校程序员(搬砖工)的出路?

    突然很羡慕那些985,211学校的学生,敲门砖是那么的响,机会是那么的多,路是那么的明确. 我上大学以来,努力的路就没停过,先是狂刷ACM,然后自学用cocos2d开发PC课件,然后赶上jsp,疯狂加 ...

  7. JAVA多线程终止线程、退出线程、Interrupt()方法、苦逼的搬砖工

    方式一: 设置标志位退出 public class Interrupt1 {public static void main(String[] args) throws InterruptedExcep ...

  8. 搬砖工php什么意思,我要去搬砖了是什么意思什么梗? 搬砖的几种含义了解一下...

    川北在线核心提示:原标题:我要去搬砖了是什么意思什么梗? 搬砖的几种含义了解一下 网络流行语,是现如今网络时代最常见的一种语言,随着网络使用人数越来越多,网络流行语也变得越来越丰富. 最近,在网上评论 ...

  9. CPU:别再拿我当搬砖工!

    来源 | 编程技术宇宙 责编 | 晋兆雨 封图 | CSDN 下载自视觉中国 数据搬运工 Hi,我是CPU一号车间的阿Q,有段日子没见面了. 还记得上回说到咱们厂里用上了DMA技术(太慢不能忍!CPU ...

最新文章

  1. 未来几年自动驾驶预测(上)
  2. 学术前沿 | 基于深度学习的视觉三维重建研究总结
  3. html兼容不同屏幕 代码,rem的正确使用姿势 -- 完美解决H5页面不同尺寸屏幕的适配问题...
  4. Fiddler抓包使用教程-过滤
  5. VC编写的程序不能在其他机器上运行的解决方案
  6. 修改linux文件夹密码忘记,Linux中如何重新获取丢失的密码
  7. 【solr专题之一】Solr快速入门
  8. input 框 去掉下面的提示文字、提示选项
  9. windows 2008 r2 AD域控服务器部署
  10. C#通过反射动态加载dll,读取module、类、方法、特性,并通过反射+简单工厂+配置文件 实现ioc
  11. centos7 删除zabbix_Zabbix服务器端运行中显示为“不”的解决方式
  12. Sqoop 数据增量导出,--update-key添加多个字段
  13. MR室内室外用户区分
  14. python gif压缩_压缩gif的正确姿势
  15. 3d打印英语文献_万华推出可3D打印PP粉末材料
  16. 教你自制一款简单的助听器
  17. 2020.08.10多态
  18. 科学计数法e/E?计算机?表示?
  19. G1D17-研究方向rce45-49不快乐就去敲敲代码
  20. Arrays.stream()

热门文章

  1. word自带公式编辑_关于Word内置公式编辑器不能使用的解决方法,请收藏
  2. 弹出窗口与选择器(二)
  3. 种植牙的突出优点是什么?
  4. 建立企业的目标---团队凝聚力的开始
  5. 网络的几种分层体系结构
  6. java rollback用法,junit/spring-test @Rollback的使用
  7. “新角度”学习微积分:阿基米德是如何称出球的体积的?
  8. 计算机专业打游戏哪个笔记本好,玩游戏笔记本电脑配置推荐有什么_玩游戏用什么笔记本电脑好-系统城...
  9. Python基础学习第三天——条件控制与while循环语句
  10. Python安装超详细教程