首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算AABB冲突

计算AABB冲突
EN

Stack Overflow用户
提问于 2011-12-07 23:00:01
回答 2查看 1.8K关注 0票数 2

我正在用OpenGL做一个游戏。这个游戏由一架在3D世界上自由飞行的飞机组成,它必须通过一些特定的区域,比如穿过窗户。现在,我正在尝试计算飞机与上面提到的“窗口”的碰撞。我认为作为第一种方法,对飞机的轨迹有一个扫描的AABB,对于每个窗口都有一些AABB,比如如果这些AABB重叠,就会有飞机穿过它的可能情况。但当我试图计算AABB时,问题就开始了,因为我所知道的每个算法都需要知道同一参考系中两个对象(plane+window)的坐标。我的程序绘制世界就好像它是在移动的东西,而不是平面,它总是以原点为中心(实际上,在z=-10处,所以它被渲染了)。真正的问题是如何计算从平面上看的每个“窗口”的坐标。这是我用来绘制场景的代码:

代码语言:javascript
复制
glLoadIdentity();

//these are the rotations of the plane of the ground
glRotatef(RotHorizont, 0.0f, 0.0f, 1.0f);
glRotatef(-directionX, 1.0f, 0.0f, 0.0f);
glRotatef(-directionY, 0, 1.0f, 0);

//and these are the movement of the plane
//(the multiplication by 0.0174532925f is to convert the angles to radians
Tx -= (float)Math.sin(directionY * 0.0174532925f) * velocity;
Tz -= (float)Math.cos(directionY * 0.0174532925f) * velocity;
Ty -= (float)Math.sin(directionX * 0.0174532925f) * velocity;

glTranslatef(-Tx, Ty, -Tz);

/*
here I draw the ground and the windows
*/
....

//and now I draw the plane
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -10.0f);
/* draw the plane */

那么,我怎么才能得到“窗口”的坐标呢?或者有没有其他方法来计算碰撞?我真的需要你的帮助,我会非常感激的。谢谢大家!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-07 23:55:45

您可以通过位置(3坐标矢量)及其大小(3坐标矢量)定义AABB,并应用任何AABB碰撞检测算法来解决您的问题。

正如您所指出的,计算必须在相同的坐标系中完成。但是,由于您处理的是AABB (而不是OBB),因此不需要处理方向(要么计算AABB,以便对象在旋转后仍保留在其中,要么在每次对象旋转后重新计算它)。因为"AA“的意思是”轴对齐“,所以你通常已经在处理一个共同的参照系(否则就是OBBs)。因此,唯一需要的“转换”就是翻译。

如果平面的中心是坐标系的中心,则平面的AABB位置将为(0,0,0) (或(0,0,-10))。对于你的窗口,这取决于你如何定义它们,但是找到它们的中心应该是相当容易的(使用OpenGL,你要处理的是products of transformation matrices,找到那些将你从原始坐标系带到窗口的坐标系)。如果您提供更多信息,我们可以为您提供有关如何实现此目标的更多详细信息。

链接:

  • Another documentation on transformations in OpenGL
票数 2
EN

Stack Overflow用户

发布于 2011-12-07 23:10:12

这是一本关于这个主题的非常好的书:http://realtimecollisiondetection.net/

或者,这个站点也有一个很好的方法集合,用于计算不同类型之间的碰撞:http://www.realtimerendering.com/intersections.html

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

https://stackoverflow.com/questions/8417410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档