1

我正在研究 OBB 算法的碰撞检测算法,并且我已经达到了它的工作点,但是我通过一些被砍掉的代码(使用 Ogre3d 节点)以一种非常无效的方式找到了在盒子空间中等效的线但是我真的希望用一些小算法尽可能容易地完成它。

基本上我有 2 个点和一个盒子(为简单起见,每个点都可以使用 1 点解决方案),这两个点组成一条线。盒子可以随心所欲地旋转,所以我需要旋转盒子使其轴对齐。为此,我还需要将点旋转到相同的轴对齐空间。当我在 2 维中工作时,我能够做到这一点,但我无法找到 3d 的解决方案。

我理解这个概念很容易通过考虑将铅笔插入粘土盒子然后将盒子旋转到轴对齐然后计算它是轴对齐使它更容易但是让线条旋转背后的代码给我带来了麻烦. 任何帮助,将不胜感激 :)

4

1 回答 1

0

如果你有 3D 的盒子,那么你可以认为它是由三个单位向量 a、b 和 c 生成的,每个向量都存在于 3 空间中,以及一些原点 O。作为预处理步骤,让我们开始通过假设 O 是原点,因此您在框中的点由两个向量 u = (x0, y0, z0) 和 v = (x1, y1, z1) 定义。您现在有兴趣回答的问题是 - 假设我们应用了旋转变换来旋转框,以便 a、b 和 c 分别与 x、y 和 z 轴对齐,那么这些点会是什么?你和v是?

我可能错了,但我认为这可以通过一些简单的数学来完成。您可以首先考虑从正常的规范基础到由框的向量定义的基础的转换。该矩阵由下式给出

      | | | 
M = ( a b c )
      | | | 

即列为 a、b 和 c 的矩阵。

现在我们有了矩阵 M,我们可以考虑将这个变换(即,将单位向量 a、b 和 c 映射到轴对齐的单位向量)的矩阵作为 M, M -1的逆矩阵。但是,如果您选择定义边界框的向量 a、b 和 c 是正交的(假设向量是正交的,您可以通过对它们进行归一化来做到这一点),那么 M -1 = M T,转置的 M,由下式给出

        - a -
M^T = ( - b - )
        - c -

即第一行是a,第二行是b,第三行是c的矩阵。给定这些向量,如果将框旋转为 M T u 和 M T v,您可以计算出点 u 和 v 的位置,这两个表达式都不应该太难计算。

希望这可以帮助!

于 2011-01-18T06:46:35.260 回答