我可不是标题党哦,来!聪明的你请停下脚步,听我灵魂一问:
你知道AABB是什么吗?
哈哈哈,我猜你大概率一脸懵逼。
不服气的你赶紧打开百度:
然后你愣住了。“好家伙,沐洒你一个技术人员,跟我在这玩成语?”“不不不,沐老师肯定不是在教我们成语。”一些不相信百度的高端玩家,于是打开小火箭🚀,在Google上再次搜索:
嚯!好嘛,Google给我搜出个非盈利性组织……
好啦,不卖关子啦,我今天既不是要说成语接龙,更不是要聊什么非盈利组织,我要说的AABB其实是这个:
AABB,全称Axis-Aligned Bounding Boxes,中文直译出来就是“轴对齐包围盒”,参考下MDN的解释:如图所示,AABB呢,其实是一个立体几何概念,起源于数学,但成熟于游戏开发,主要是用于解决3D空间里不同实体的碰撞检测问题。前阵子看过一个视频,讲虚幻引擎5(Unreal Engine)的作品为什么画面如此真实自然,其中一个原因说,是因为虚幻5实现了非常优秀的光线追踪算法。没错,光线追踪(Ray Tracing),这门高深的学问,也是基于AABB来展开的。总之,AABB是3D问题的基础,虽然AABB本身不是什么高难度的东西,但是你如果不知道这个概念,那么你面对3D空间的很多问题都是抓瞎的,很容易陷入用2D思维解决3D问题的陷阱,进而产生很离谱的错误。那我作为一个前端,为什么会关注到这个领域的知识的呢?那当然是因为我在做的项目(自动驾驶点云标注)啦!之前我写过一篇文章《当前端遇到了自动驾驶》,非常详细的介绍了我在这个项目里遇到的一个3D问题的整体解决过程。
由于内容过于干燥,在公众号这里的阅读量并不高,但在知乎上,却意外获得了大量的收藏。
虽然有人反馈太技术了看不懂,但也有不少小伙伴在后台给我留言,说那篇文章很有意思,前端在自动驾驶领域的实践很新鲜有趣,让我多写点相关的东西。
恰好最近又遇到了一个又意思的场景:碰撞检测,我感觉这东西又可以跟大家聊聊了。
不过考虑到这件事本身也是有一定的理解门槛,所以我今天打算先水一篇,给大家入个门,介绍下AABB是个啥,然后丢点学习链接。感兴趣的朋友可以先私下研究研究,同时可以期待下我的下一篇文章,给你们聊聊我这次又遇到了什么难题,以及整体的解决思路。好啦,文章标题没唬人吧?有多少前端小伙伴是第一次听说AABB的?评论区告诉我。
学习资料:
- 3D collision detection —— (https://developer.mozilla.org/en-US/docs/Games/Techniques/3D_collision_detection)
- Bounding volume collision detection with THREE.js —— (https://developer.mozilla.org/en-US/docs/Games/Techniques/3D_collision_detection/Bounding_volume_collision_detection_with_THREE.js)
- BVH:Bounding volume hierarchy —— (https://en.wikipedia.org/wiki/Bounding_volume_hierarchy)
- Collision detection —— (https://en.wikipedia.org/wiki/Collision_detection)
全文完。