Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >三维空间中的轴向包围盒与三角形碰撞

三维空间中的轴向包围盒与三角形碰撞
EN

Stack Overflow用户
提问于 2012-09-04 09:04:56
回答 1查看 2.6K关注 0票数 0

我已经读了很多关于“分离轴测试”的文章,从所有的帖子和文章中,我都认为它们都是二维碰撞的,而不是3D的。我听说这更像是3D空间中的“分离平面定理”,但是我不清楚在哪里可以找到这种方法与2D版本有什么不同的信息。

我应该使用SAT,因为我试图计算三角形是否与轴对齐边界盒(AABB)相交。我不需要知道交集发生在哪里,只是一个布尔结果,如果它发生了或没有发生。

我实现SAT的主要尝试位于这里:实施尝试

如果SAT需要修改,那么需要修改什么才能成功地在3D空间中实现?据克里斯特·埃里克森从他的书“实时碰撞检测”中说,由于目前有13根轴需要测试。如果需要改变SAT,我认为会有更多的轴需要测试,因为其中涉及到第三轴。

  1. AABB的三张脸法线
  2. 一张从三角形向外的脸
  3. 双边组合的交叉积给出的九个轴

我需要了解SAT是否需要修改,以及向何处修改和为什么修改的方向前进。如果不需要修改,我哪里出错了?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-07 17:00:44

在阅读了许多不同的文章、文章和论文(其中最好的资源是文章)之后,我现在知道,对于三维碰撞检测,不需要对SAT做任何修改。

虽然我的实现仍然有一些问题,但我可以说对于AABB (多维数据集),您必须测试3个曲面法线,对应于x、y和z轴。对于三角形,看起来需要4个法线,每个边一个,曲面一个(我不完全确定三角形法线,因为我还需要测试。我试了一个正常的,有80%的工作)。

对于AABB (立方体),通过得到曲面的两条垂直边和这两条边的交叉积来计算法线。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Surface 1/3 (x, y, z - one surface for each)
Vector3d edge1 = new Vector3d();
Vector3d edge2 = new Vector3d();
Vector3d normal1 = new Vector3d();
// Get the edges, the two edges must be perpendicular to one another.
edge1.sub( point0, point1 );
edge2.sub( point0, point4 );
normal1.cross( edge1, edge2 );
normal1.normalize();

用同样的方法计算三角形曲面法线。

在此之后,SAT取AABB和三角形的投影,测试AABB轴(法线)上的投影,然后在三角形轴(法线)上重复这一点,如果其中任何一个测试检测到间隙,就不会发生碰撞。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12268200

复制
相关文章
【笔记】《计算机图形学》(12)——图形学的数据结构
之前我的笔记都是在OneNote上记录的,苦于OneNote羸弱的跨平台性,我决定抛弃OneNote,今后的笔记都用Markdown记录,方便迁移也方便调整格式。文章一开始编辑后会保存在我的Github仓库中(https://github.com/ZFhuang/Study-Notes),整理完后会发到公众号上,并延时同步到我的腾讯云。
ZifengHuang
2021/02/04
6.1K0
LayaAir负责人李嵘参加中国图学大会并分享3.0引擎技术
首先,李嵘强调了LayaAir 3.0引擎是面向泛行业元宇宙大型项目的全平台高性能3D引擎。
Layabox Charley
2023/03/04
4720
LayaAir负责人李嵘参加中国图学大会并分享3.0引擎技术
Ray-AABB交叉检测算法
  最近在解决三维问题时,需要判断线段是否与立方体交叉,这个问题可以引申为:射线是否穿过立方体AABB。   在3D游戏开发中碰撞检测普遍采用的算法是轴对齐矩形边界框(Axially Aligned Bounding Box, AABB)包装盒方法,其基本思想是用一个立方体或者球体完全包裹住3D物体对象,然后根据包装盒的距离、位置等相关信息来计算是否发生碰撞。 slab的碰撞检测算法   本文接下来主要讨论射线与AABB的关系,主要对box2d碰撞检测使用的slab的碰撞检测算法(Slabs method
waylon
2018/03/08
5.1K0
Ray-AABB交叉检测算法
Mesh的平面切割算法
看了一下UKismetProceduralMeshLibrary::SliceProceduralMesh的代码实现, 发现也没想像中的复杂, 只要把网格/三角形/顶点/边的关系理清楚, 逐步分解问题就可以把复杂问题给简化成一个个的小问题, 然后各个击破. 把注释和代码的步骤整理了一下, 变成了人话: 把切割面从World转换到Local空间 对于每个Section(SubMesh), 计算包围盒与切割面的关系 如果在背面, 移动到另一半(新产生Mesh)里去 如果在正面, 保留不动 如果相交,
逍遥剑客
2018/05/09
2.7K0
最小三角形包围框
area= 14663.580078125 trgl: [[[173. -28.444445]] [[173. 147.5 ]] [[339.6842 64.1579 ]]]
裴来凡
2022/05/28
3490
最小三角形包围框
Unreal学习笔记2-绘制简单三角形
之所以写这个绘制简单三角形的实例其实是想知道如何在Unreal中通过代码绘制自定义Mesh,如果你会绘制一个三角形,那么自然就会绘制复杂的Mesh了。所以这是很多图形工作者的第一课。
charlee44
2023/03/07
9360
Unreal学习笔记2-绘制简单三角形
Direct3D学习(六):动画基础(3)网格模型基础
ID3DXMesh继承自ID3DXBaseMesh接口 ID3DXBaseMesh包含一个顶点缓存和一个索引缓存 一个mesh是由一组子集(subset)组成的 子集是具有相同属性的一组三角形 这里的属性指材质,纹理,渲染状态 属性ID存在mesh的属性缓存中,DWORD类型 子集i与材质和纹理数组的第i项对应 Mesh的顶点和索引缓存可以被重组以便更快地渲染,如根据属性把三角形重新排一下序 优化有时要用到邻接数组 Mesh可以被拷贝,拷贝的同时可以改变顶点格式 Mesh不包括顶点法线数据时,可以
逍遥剑客
2018/05/23
5150
【十天自制软渲染器】DAY 03:画一个三角形(向量叉乘算法 & 重心坐标算法)
本文主要讲解三角形绘制算法的推导和思路(只涉及到一点点的向量知识),最后会给出代码实现,大家放心的看下去就好。
卤代烃
2021/03/03
1.3K0
【十天自制软渲染器】DAY 03:画一个三角形(向量叉乘算法 & 重心坐标算法)
一文 get 入门 canvas 的最佳路径
要绘制一个多边形,多边形图形的基本元素是路径。路径是通过不同颜色和宽度的线段或曲线相连形成的不同形状的点的集合。一个路径,甚至一个子路径,都是闭合的。使用路径绘制图形需要一些额外的步骤。
前端迷
2020/08/07
9210
一文 get 入门 canvas 的最佳路径
坐席辅助系统中语音与文本的碰撞
 点击上方“LiveVideoStack”关注我们 ▲扫描图中二维码或点击阅读原文▲ 了解音视频技术大会更多信息 编者按:在贷后催收行业中,每个公司每天的录音量可达上万小时,因此语音识别功能对其非常重要。今天LiveVideoStack大会邀请到了洞听智能的张玉腾老师,为我们介绍在坐席辅助系统中,语音与文本的碰撞。 文/张玉腾 整理/LiveVideoStack‍‍ 大家好!我是青岛洞听智能的算法工程师张玉腾,我们公司在去年四月份成立。在2016年,我们已经是联信集团的一个智能化部门,一直在做语音与文本相
LiveVideoStack
2023/02/23
6640
坐席辅助系统中语音与文本的碰撞
一个有趣的例子带你入门canvas
要绘制一个多边形,多边形图形的基本元素是路径。路径是通过不同颜色和宽度的线段或曲线相连形成的不同形状的点的集合。一个路径,甚至一个子路径,都是闭合的。使用路径绘制图形需要一些额外的步骤。
刘小夕
2020/08/04
9060
Kotlin 与 Scratch 的碰撞
https://kotlinlang.org/docs/tutorials/quick-run.html#using-scratches
一个会写诗的程序员
2019/05/14
8610
Kotlin 与 Scratch 的碰撞
冰冰教你用“四叉树”手写“碰撞检测”,太感动了!
引入脚本 QuadtreeCollision.ts , 新建一个 QuadtreeCollision ,并初始化为世界坐标系下的对齐轴向的包围盒(AABB)。
张晓衡
2020/07/09
3.2K0
冰冰教你用“四叉树”手写“碰撞检测”,太感动了!
图形学入门(二):光栅化
光栅化(Rasterize)就是将一些矢量形状转换为位图(Raster Image)形式。经过这样的变换后,这些形状才可以在屏幕上进行显示,也可以被打印机打印出来。
zhiruili
2021/08/10
4.2K0
图形学入门(二):光栅化
粗略的物体碰撞预测及检测
  该博客实时更新于我的Github。   在机器人局部路径规划中,需要实时躲避运动或者静态的障碍物,这个过程涉及到碰撞检测这个问题,本文主要讨论这个问题。   碰撞检测问题也是游戏开发中经常遇到的问题,一个游戏场景中可能存在很多物体,它们之间大多属于较远位置或者相对无关的状态,那么一个物体的碰撞运算没必要遍历这些物体,我们可以使用一个包围一个或多个物体的多边形来讨论碰撞问题,这样子可以节省重要的计算量和时间。   在真实的物理系统中,一般需要在运算速度和精确性上做取舍。尽管非常精确的碰撞检测算法可以
waylon
2018/03/08
2.8K0
粗略的物体碰撞预测及检测
粗略的物体碰撞预测及检测
  该博客实时更新于我的Github。
waylon
2018/01/27
1.9K0
碰撞检测的向量实现
注:1、本文只讨论2d图形碰撞检测。2、本文讨论圆形与圆形,矩形与矩形、圆形与矩形碰撞检测的向量实现
WecTeam
2019/12/16
1.6K0
碰撞检测的向量实现
【材料力学】二:轴向拉伸与压缩
上图中a,b,c三个图两边受力都不同,但在杆中间截面上的内力时相同的,所以上图三种不同的组合,因为静力等效,所以可以都换为a图的形式进行计算。
周旋
2020/06/05
2K0
点击加载更多

相似问题

轴向包围盒尺寸的计算

22

用包围盒检测碰撞

12

与二维相机XNA的包围盒碰撞

12

包围盒与矩形

24

三维物体不同方位的轴向包围盒计算

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文