【发布时间】:2020-02-21 20:05:31
【问题描述】:
是否可以从glm::mat4 中提取yaw、pitch 和roll 信息?
(这是一个已经应用了平移、旋转和缩放的世界变换矩阵)
这是我正在试验的一些代码:
float yawDeg = 0;
float pitchDeg = 20;
float rollDeg = 80;
glm::mat4 transform = glm::eulerAngleYXZ(glm::radians(yawDeg), glm::radians(pitchDeg), glm::radians(rollDeg));
glm::quat rotation(transform); // Is this a correct way?
// glm::quat rotation(glm::quat_cast(transform)); // Gives the same results.
printf("pitch: %f\n", glm::degrees(glm::pitch(rotation))); // Output: 3.616443
printf("yaw: %f\n", glm::degrees(glm::yaw(rotation))); // Output: -19.683496
printf("roll: %f\n", glm::degrees(glm::roll(rotation))); // Output: 79.372414
但是我得到了一些奇怪的结果,这里有一些值:
yawDeg=92, pitchDeg=0, rollDeg=0 结果yaw: 88.0, pitch: 180.0, roll: 180.0
yawDeg=0, pitchDeg=92, rollDeg=0 结果yaw: 0.0, pitch: 92.0, roll: 0.0 - 看起来不错。
yawDeg=0, pitchDeg=0, rollDeg=92 结果yaw: 0.0, pitch: 0.0, roll: 92.0 - 看起来不错。
yawDeg=0, pitchDeg=10, rollDeg=92 结果yaw: -9.993845, pitch: -0.352578, roll: 92.030830
我想我的glm::mat4 到glm::quat 的转换可能不正确?
【问题讨论】:
标签: matrix glm quaternions glm-math