Tag: 四元数

四元数“lookAt”function

我正在努力解决以下问题。 我正在使用骨骼动画,我希望(即)玩家的头部跟随太空中的另一个物体。 我的上轴是+ Z我的前轴是+ Y,四元数的大小是W.我试图使用gluLookAt的mesa代码并使用3×3矩阵转换为四元数但它不能按预期工作所以我走向另一个方向…… 到目前为止,我得到了以下代码“几乎”工作,至少玩家的头部正在旋转(但是X角度似乎影响Y旋转轴)在良好的方向上,但它直视向上而不是跟随一个物体约65度的地板: qt LookRotation( v3 lookAt, v3 upDirection ) { qt t; v3 forward = lookAt; v3 up = upDirection; OrthoNormalize( &forward, &up ); v3 right = v3_cross( up, forward ); mat3 m = mat3_make( right.x, up.x, forward.x, right.y, up.y, forward.y, right.z, up.z, forward.z ); tw = sqrtf( 1.0f + mr[ […]

如何用最少的指令乘以两个四元数?

经过一番思考后,我想出了以下代码,用于使用SSE乘以两个四元数: #include /* SSE3 intrinsics */ /* multiplication of two quaternions (x, y, z, w) x (a, b, c, d) */ __m128 _mm_cross4_ps(__m128 xyzw, __m128 abcd) { /* The product of two quaternions is: */ /* (X,Y,Z,W) = (xd+yc-zb+wa, -xc+yd+za+wb, xb-ya+zd+wc, -xa-yb-zc+wd) */ __m128 wzyx = _mm_shuffle_ps(xyzw, xyzw, _MM_SHUFFLE(0,1,2,3)); __m128 baba = _mm_shuffle_ps(abcd, abcd, _MM_SHUFFLE(0,1,0,1)); […]