c++ - OpenGL 使用 Q 和 E 字符移动相机 GLFW 库
问题描述
我无法找出正确的命令来添加到此,并使 Q 和 E 命令直接上下移动相机。我尝试了很多事情都没有成功。
void processInput(GLFWwindow *window)
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
float cameraSpeed = 2.5 * deltaTime;
if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS)
cameraPos += cameraSpeed * cameraFront;
if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS)
cameraPos -= cameraSpeed * cameraFront;
if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS)
cameraPos -= glm::normalize(glm::cross(cameraFront, cameraUp)) * cameraSpeed;
if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS)
cameraPos += glm::normalize(glm::cross(cameraFront, cameraUp)) * cameraSpeed;
}
解决方案
如果cameraUp
垂直于cameraFront
:
if (glfwGetKey(window, GLFW_KEY_Q) == GLFW_PRESS)
cameraPos -= cameraSpeed * cameraUp;
if (glfwGetKey(window, GLFW_KEY_E) == GLFW_PRESS)
cameraPos += cameraSpeed * cameraUp;
如果cameraUp
不(完全)垂直于cameraFront
您必须计算由cross(cameraFront, cameraUp)
and定义的平面上的法线向量cameraFront
:
glm::vec3 lateral_vector = glm::normalize(glm::cross(cameraFront, cameraUp));
glm::vec3 up_vector = glm::normalize(glm::cross(lateral_vector, cameraFront));
if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS)
cameraPos -= cameraSpeed * cameraFront;
if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS)
cameraPos += cameraSpeed * cameraFront;
if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS)
cameraPos -= cameraSpeed * lateral_vector;
if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS)
cameraPos += cameraSpeed * lateral_vector;
if (glfwGetKey(window, GLFW_KEY_Q) == GLFW_PRESS)
cameraPos -= cameraSpeed * up_vector;
if (glfwGetKey(window, GLFW_KEY_E) == GLFW_PRESS)
cameraPos += cameraSpeed * up_vector;