【发布时间】:2021-10-17 03:22:39
【问题描述】:
我正在尝试围绕全局轴旋转我的模型。这就是我所拥有的:
我创建了一个处理用户输入的方法。如果用户按下 A 或 D,模型将围绕 Z 轴向左或向右旋转 90 度。如果用户按下 W 或 S,它将围绕 X 轴向前或向后旋转 90 度。最后,如果用户按下 Q 或 E,它将围绕 Y 轴向左或向右旋转。但是如果我先在 x 轴上旋转,然后尝试在 y 轴上旋转,它会根据模型的局部轴旋转,而不是围绕全局轴旋转。
有人可以帮我解决这个问题吗?
以下是我处理模型输入的代码:
if (glfwGetKey(window, GLFW_KEY_1) == GLFW_PRESS) {
// reposition camera
heartModel1 = true;
heartModelX -= 30.0f;
heartWallX -= 30.0f;
heartModelZ += 30.0f;
heartWallZ += 30.0f;
}
if (heartModel1) {
// Rotate model
// D -> Rotate Right
if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS) {
heartAngleZ -= 90.0f;
}
// A -> Rotate left
if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS) {
heartAngleZ += 90.0f;
}
// S -> Rotate back
if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS) {
heartAngleX += 90.0f;
}
// W -> Rotate forward
if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS) {
heartAngleX -= 90.0f;
}
// Q -> Rotate left on Y axis
if (glfwGetKey(window, GLFW_KEY_Q) == GLFW_PRESS) {
heartAngleY += 90.0f;
}
}
以下是我的模型:
glm::mat4 modelHeart = glm::mat4(1.0f);
modelHeart = glm::translate(modelHeart, glm::vec3(heartModelX + 30, heartModelY, heartModelZ - 30));
modelHeart = glm::rotate(modelHeart, glm::radians(heartAngleX), glm::vec3(1.0f, 0.0, 0.0)); // Rotate on X axis
modelHeart = glm::rotate(modelHeart, glm::radians(heartAngleY), glm::vec3(0.0, 1.0f, 0.0)); // Rotate on Y axis
modelHeart = glm::rotate(modelHeart, glm::radians(heartAngleZ), glm::vec3(0.0, 0.0, 1.0f)); // Rotate on Z axis
modelHeart = glm::scale(modelHeart, glm::vec3(heartModelScale, heartModelScale, heartModelScale));
【问题讨论】: