我正在尝试计算从我的opengl相机中指出的单位向量。给定一个旋转四元数(w,x,y,z),我如何计算该四元数周围单位向量的旋转?
在这种情况下,单位矢量可以限制为(0,0,-1)。
编辑:最终解决方案
旋转(0,0,1):
vec.x=2*x*z - 2*y*w;
vec.y=2*y*z + 2*x*w;
vec.z=1 - 2*x*x - 2*y*y;
请注意,矩阵需要转置才能与OpenGL一起使用。
答案 0 :(得分:3)
将四元数转换为3x3旋转矩阵,并将此旋转应用于矢量。
对于单位(w, x, y, z)
四元数,此矩阵为:
( 1 - 2 * ( y * y + z * z ) 2 * ( x * y - z * w ) 2 * (x * z + y * w ) )
R = ( 2 * ( x * y + z * w ) 1 - 2 * ( x * x + z * z ) 2 * (y * z - x * w ) )
( 2 * ( x * z - y * w ) 2 * ( y * z + x * w ) 1 - 2 * (x * x + y * y ) )
如果向量具有(0, 0, -1)
这样的简单形式,则不需要计算旋转矩阵的所有9个系数,因为矩阵向量乘法的结果仅使用一些系数(最后一列) R
)。