C++ 四元数旋转未按预期工作
Posted
技术标签:
【中文标题】C++ 四元数旋转未按预期工作【英文标题】:C++ Quaternion rotation not working as intended 【发布时间】:2016-11-27 00:42:29 【问题描述】:我正在尝试使用四元数围绕其中一个轴旋转模型 例如 Y。 我正在使用这个算法,非常简单 轴 = (0,1,0) 角度+= 0.01f(辐射)
quat.w = cos(angle);
quat.x = axis.x* sin(angle / 2.0);
quat.y = axis.y* sin(angle / 2.0);
quat.z = axis.z* sin(angle / 2.0);
它可能适用于前 60 度(编辑:说实话可能是 90 度),而不是模型只是表现得奇怪并在其中心伸展。我正在使用 GLUT 和 c++
这是我用来再次将其转换为矩阵的方法,而不是在模型视图透视矩阵中使用它。 我做了一些调试,数学看起来还不错,我可能遗漏了一些明显的东西(四元数的新手)
void Quaternion::QuatToMatrix(Quaternion& a, GLfloat* matrix)
// First row
matrix[0] = 1.0f - 2.0f * (a.y * a.y + a.z * a.z);
matrix[1] = 2.0f * (a.x * a.y - a.w * a.z);
matrix[2] = 2.0f * (a.x * a.z + a.w * a.y);
matrix[3] = 0.0f;
// Second row
matrix[4] = 2.0f * (a.x * a.y + a.w * a.z);
matrix[5] = 1.0f - 2.0f * (a.x * a.x + a.z * a.z);
matrix[6] = 2.0f * (a.y * a.z - a.w * a.x);
matrix[7] = 0.0f;
// Third row
matrix[8] = 2.0f * (a.x * a.z - a.w * a.y);
matrix[9] = 2.0f * (a.y * a.z + a.w * a.x);
matrix[10] = 1.0f - 2.0f * (a.x * a.x + a.y * a.y);
matrix[11] = 0.0f;
// Fourth row
matrix[12] = 0;
matrix[13] = 0;
matrix[14] = 0;
matrix[15] = 1.0f;
希望你能帮助我,如果这是一个愚蠢的问题,对不起 提前致谢。
【问题讨论】:
如何使用矩阵?你是否使用glMultMatrixf()
以及如何使用?
【参考方案1】:
四元数的实部也应该用半角:
quat.w = cos(angle / 2.0);
【讨论】:
以上是关于C++ 四元数旋转未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章