现在的位置: 首页 > 综合 > 正文

Ogre 引擎四元数与三维向量相乘算法推导

2014年10月09日 ⁄ 综合 ⁄ 共 734字 ⁄ 字号 评论关闭

在Ogre引擎中数学模块里的四元数类中有一个四元数与三维向量相乘的函数。函数如下所示:

 Vector3 Quaternion::operator* (const Vector3& v) const
    {
// nVidia SDK implementation
Vector3 uv, uuv;
Vector3 qvec(x, y, z);
uv = qvec.crossProduct(v);
uuv = qvec.crossProduct(uv);
uv *= (2.0f * w);
uuv *= 2.0f;
return v + uv + uuv;
    }

我们看到该函数输入参数是一个 Vector3 三维向量,返回值同样是个三维向量故该函数功能是对该三维向量进行了某种变换再返回回去。让我们来推导下该函数所代表的公式。

首先该函数先构造了个名叫qvec的三维向量,语句Vector3 qvec(x, y, z); 这里的x,y,z是所在四元数的虚部。而四元数在引擎中用来旋转所以四元数一般表示为


始计算三维向量uv

  1. uv = qvec.crossProduct(v) <span lang="EN-US" style="font-family: 宋体; ">, </span><span style="font-family: 宋体; ">该句所代表的数学公式为</span>  


下面来算 uuv  代码为 

  1. uuv = qvec.crossProduct(uv);  



推导到这里发现此公式正是 绕任意轴n旋转theta角度的公式。则该函数的功能为将传进来的三维顶点围绕四元数所指代的旋转轴n旋转四元数所记录的theta角度,并将变换后的三维顶点返回。


【上篇】
【下篇】

抱歉!评论已关闭.