【发布时间】:2019-05-30 09:25:04
【问题描述】:
我创建了一个可以在空间中旋转 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)有关。我想平移四元数的旋转轴。
如何平移四元数的旋转轴以围绕其自己的轴而不是世界原点旋转对象?
【问题讨论】:
标签: c++ c opengl math quaternions