土木搬砖工图形学学习之路——射线与包围盒的相交测试
本人土木转计算机,目前刚刚开始研究生生涯。最近喜欢上了三维计算机图形学,被射线与包围盒的相交测试函数卡了许久,以下分享一些个人的学习理解。
一、结构体定义
包围盒定义为三维空间中一个立方体,其六个面分别与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是否成立即可判定相交关系。
土木搬砖工图形学学习之路——射线与包围盒的相交测试相关推荐
- Java Nio 之高级搬砖工(FileChannel)二
Java Nio 系列 Java Nio 之Buffer Java Nio 之直接内存 Java Nio 之高级搬砖工(FileChannel) 一 Java Nio 之高级搬砖工(FileChann ...
- 又到年底了,想知道你在互联网圈混到什么级别了吗?初级搬砖工还是极品精英?...
又到年底了,想知道你在互联网圈混到什么级别了吗?初级搬砖工还是极品精英? 我测试出来竟然是IT名媛-- 亲们,手机扫码块测测,还有机会获得免费套餐邀请码,就是可以免费开通30余款云产品的那个邀请码哦! ...
- 从搬砖工到亿万富豪,这些年他经历了什么?
在福建,有个人从工地搬砖工做到了拥有亿万财富的老板.而这其中的缘由竟然是因为茶油. 2015年,林龙生转行回老家,接手一个破产的工厂,还承包了8000亩山地.林龙生看中的这块地,其实里面种着一种别人都 ...
- Java Nio 之高级搬砖工(FileChannel) 一
Java Nio 系列 Java Nio 之Buffer Java Nio 之直接内存 Java Nio 之高级搬砖工(FileChannel) 一 前言 大家对搬砖都很熟悉吧:小绿和小蓝是搬砖工, ...
- 搬砖工php什么意思,醒工砖是什么意思什么梗 醒工砖是醒醒工头喊你起来搬砖的意思...
醒工砖是什么意思什么梗?醒工砖,网络流行词,原句是"醒醒,工头喊你起来搬砖","醒工砖"是缩写形式.下面就跟360常识网一起具体看看醒工砖等相关内容. 醒工砖词 ...
- 普通二/三本学校程序员(搬砖工)的出路?
突然很羡慕那些985,211学校的学生,敲门砖是那么的响,机会是那么的多,路是那么的明确. 我上大学以来,努力的路就没停过,先是狂刷ACM,然后自学用cocos2d开发PC课件,然后赶上jsp,疯狂加 ...
- JAVA多线程终止线程、退出线程、Interrupt()方法、苦逼的搬砖工
方式一: 设置标志位退出 public class Interrupt1 {public static void main(String[] args) throws InterruptedExcep ...
- 搬砖工php什么意思,我要去搬砖了是什么意思什么梗? 搬砖的几种含义了解一下...
川北在线核心提示:原标题:我要去搬砖了是什么意思什么梗? 搬砖的几种含义了解一下 网络流行语,是现如今网络时代最常见的一种语言,随着网络使用人数越来越多,网络流行语也变得越来越丰富. 最近,在网上评论 ...
- CPU:别再拿我当搬砖工!
来源 | 编程技术宇宙 责编 | 晋兆雨 封图 | CSDN 下载自视觉中国 数据搬运工 Hi,我是CPU一号车间的阿Q,有段日子没见面了. 还记得上回说到咱们厂里用上了DMA技术(太慢不能忍!CPU ...
最新文章
- 未来几年自动驾驶预测(上)
- 学术前沿 | 基于深度学习的视觉三维重建研究总结
- html兼容不同屏幕 代码,rem的正确使用姿势 -- 完美解决H5页面不同尺寸屏幕的适配问题...
- Fiddler抓包使用教程-过滤
- VC编写的程序不能在其他机器上运行的解决方案
- 修改linux文件夹密码忘记,Linux中如何重新获取丢失的密码
- 【solr专题之一】Solr快速入门
- input 框 去掉下面的提示文字、提示选项
- windows 2008 r2 AD域控服务器部署
- C#通过反射动态加载dll,读取module、类、方法、特性,并通过反射+简单工厂+配置文件 实现ioc
- centos7 删除zabbix_Zabbix服务器端运行中显示为“不”的解决方式
- Sqoop 数据增量导出,--update-key添加多个字段
- MR室内室外用户区分
- python gif压缩_压缩gif的正确姿势
- 3d打印英语文献_万华推出可3D打印PP粉末材料
- 教你自制一款简单的助听器
- 2020.08.10多态
- 科学计数法e/E?计算机?表示?
- G1D17-研究方向rce45-49不快乐就去敲敲代码
- Arrays.stream()
热门文章
- word自带公式编辑_关于Word内置公式编辑器不能使用的解决方法,请收藏
- 弹出窗口与选择器(二)
- 种植牙的突出优点是什么?
- 建立企业的目标---团队凝聚力的开始
- 网络的几种分层体系结构
- java rollback用法,junit/spring-test @Rollback的使用
- “新角度”学习微积分:阿基米德是如何称出球的体积的?
- 计算机专业打游戏哪个笔记本好,玩游戏笔记本电脑配置推荐有什么_玩游戏用什么笔记本电脑好-系统城...
- Python基础学习第三天——条件控制与while循环语句
- Python安装超详细教程