我正在尝试沿 glm::quat 中定义的方向转换相机的位置。
void Camera::TranslateCameraAlongZ(float distance) {
glm::vec3 direction = glm::normalize(rotation * glm::vec3(0.0f, 0.0f, 1.0f));
position += direction * distance;
}
当旋转是身份四元数时,这很好用。当旋转是其他东西时,X 和 Z 平移不起作用。当相机向左旋转 45 度并且我打电话TranslateCameraAlongZ(-0.1f)
时,当我应该向后和向右移动时,我被向后和向左平移。所有不是完美 90 度增量的翻译都同样混乱。我在这里做错了什么,最简单的解决方法是什么?如果它们可能相关,这里是生成我的视图矩阵的函数和旋转我的相机的函数:
glm::mat4 Camera::GetView() {
view = glm::toMat4(rotation) * glm::translate(glm::mat4(), position);
return view;
}
void Camera::RotateCameraDeg(float x, float y, float z) {
rotation = glm::normalize(glm::angleAxis(x,glm::vec3(1.0f, 0.0f, 0.0f)) * rotation);
rotation = glm::normalize(glm::angleAxis(y,glm::vec3(0.0f, 1.0f, 0.0f)) * rotation);
rotation = glm::normalize(glm::angleAxis(z,glm::vec3(0.0f, 0.0f, 1.0f)) * rotation);
std::cout << glm::eulerAngles(rotation).x << " " << glm::eulerAngles(rotation).y << " " << glm::eulerAngles(rotation).z << "\n";
}