四元数和翻译
Quaternions and translations
我创建了一个小程序,可以在空间中旋转3D对象。
为了快速总结,我创建了一个使用四元数执行矩阵旋转的函数:
void matrix_rotate(float matrix[][4], float angle, t_vec4 rotation_axis)
{
float rotate[4][4];
t_vec4 quat;
quat = quaternion_create(angle, rotation_axis); // Create a quaternion from an axis-angle representation
quaternion_to_matrix(rotate, quat); // Convert the quaternion to a rotation matrix
matrix_multiply(matrix, rotate); // Multiply the rotation matrix
}
例如,我可以在y轴上对模型矩阵进行90度旋转(t_vec4
是4D矢量,由4个浮点x、y、z、w组成):
matrix_rotate(model, 90.0, (t_vec4){0.0, 1.0, 0.0, 0.0});
到目前为止,它是有效的。但旋转与我的世界原点(0,0,0)有关。我想平移四元数的旋转轴。
如何平移四元数的旋转轴,使对象围绕其自己的轴而不是世界原点旋转?
首先,这里真的没有必要使用四元数。如果你只想创建一个围绕给定轴旋转给定角度的矩阵,那么你就可以这样做了。无论如何,你已经有效地做到了,只需通过在中间使用四元数的迂回…
四元数只能表示旋转。可以使用对偶四元数以统一的方式处理旋转和平移。然而,这在这里似乎是大材小用。要获得一个围绕穿过非原点点的轴旋转的矩阵,只需首先平移坐标系,使旋转轴穿过的点成为原点。然后应用旋转。然后你把所有的东西都翻译回来。因此,如果p是你希望旋转轴经过的点的坐标向量,你首先通过-p平移所有东西,然后旋转,然后通过p&hellip平移回来;
实现所需目标的最简单方法是首先在世界原点旋转对象,然后将其移动到所需位置。所以只要交换旋转和位置矩阵。
相关文章:
- 单元测试欧拉到四元数实现失败
- 零四元数和任何向量都不为零的特征积,这是一个错误吗?
- 将四元数旋转的游戏对象旋转另一个四元数时出现问题
- 在OpenGL(GLM/C++)中使用四元数旋转时出现问题
- 想要将 CGAL 与四元数相结合是否合乎逻辑
- Eigen::Quaternion FromTwoVectors() 不返回有效的四元数
- C++四元数方程程序
- 四元数旋转不起作用
- 四元数和翻译
- 使用四元数防止绕某个轴旋转
- 如何使用四元数来描述超过360度的旋转角度?
- 四元数旋转错误
- 为什么我简单的四元数乘法比SSE快
- 特征:将矩阵3d旋转转换为四元数
- 从四元数查看矩阵
- 用四元数绕轴旋转矢量
- 基于四元数的相机不需要的卷轴
- 在C++中使用1D FFT的四元数FFT
- 四元数到轴的角度
- 四元数 -> 欧拉角 -> 旋转矩阵问题 (GLM)