2009-05-22 71 views
5

在我的3D应用程序中,我将对象的位置存储在向量中,并且它围绕四元数的原点进行旋转。我需要围绕一个具有任意原点的矢量旋转对象。我尝试将位置 - vectorOrigin和旋转转换为矩阵,旋转矩阵,然后将矩阵的位置和旋转作为矢量和四元数提取出来。位置正常,但旋转保持不变(对象围绕给定矢量旋转,但始终朝向同一方向)。如何使用四元数在一个点周围旋转物体?

我的方法错了还是有错误?

回答

7

我不确定你为什么期望轮换改变。你有程序化的“生物”代表原点,目标点和旋转。根据其他两个“生物”计算目标点不应该影响它们。

通常的做法如何?如果需要旋转点(a,b,c)周围的位置(x,y,z),请首先平移位置以便旋转将围绕原点:使用(xa,yb,zc)作为位置,像往常一样围绕原点旋转以获得新的平移位置(x'-a,y'-b,z'-c),然后转回并获取新的位置(x',y',z')。

+0

这就是我正在做的。对象围绕具有任意原点的矢量移动,但始终朝向相同的方向。我应该面对矢量的起源。 我编辑了这个问题来澄清我的算法。 – user17544 2009-05-22 18:43:06

+0

如果我理解正确,您需要添加另一个旋转,围绕一个与您所提到的平行的向量平行移动,但是它会穿过对象的* center *。 – 2009-05-22 19:18:15

1

我对四元数不熟悉,也许这是完全偏离主题的,但不能围绕一个点旋转3d对象,旋转轴必须是一条线。