我已经使用OpenGL创建了一个地平面,并尝试在按W键时向前移动"相机",在按S键时向后移动,在按D键时向右看,在按A键时向左看。我希望在地平面上移动,而不是沿z轴移动。
以下是我在display函数中设置的值:
cx = 0.0f + eyex;
cy = 0.0f + eyey;
cz = 0.0f;
view = glm::lookAt(glm::vec3(eyex, eyey, eyez),
glm::vec3(cx, cy, cz),
glm::vec3(0.0f, -1.0f, 0.0f));
其中(cx,cy,cz)是摄像机观察的方向。
这些是我在main函数中设置的初始值:
eyex = 0.0;
eyey = 0.0;
eyez = 5.0;
theta = 3.14f;
r = 50.0;
这是我的key_callback函数
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
const float cameraSpeed = 1.0f;
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
glfwSetWindowShouldClose(window, GLFW_TRUE);
if (key == GLFW_KEY_A && action == GLFW_PRESS)
theta -= 0.5;
cx = r*sin(theta);
cy = r*cos(theta);
if (key == GLFW_KEY_D && action == GLFW_PRESS)
theta += 0.5;
cx = r*sin(theta);
cy = r*cos(theta);
if (key == GLFW_KEY_W && action == GLFW_PRESS)
eyex = eyex + cameraSpeed * r * sin(theta);
eyey = eyey + cameraSpeed * r * cos(theta);
if (key == GLFW_KEY_S && action == GLFW_PRESS)
eyex = eyex - cameraSpeed * r * sin(theta);
eyey = eyey - cameraSpeed * r * cos(theta);
}
- 问题**
当我按W和S键时,我只能沿x轴移动,而不能沿y轴移动,而且我无法使用A和D键环顾四周,摄像机看的方向几乎没有什么不同。
1条答案
按热度按时间ndasle7k1#
如果你已经正确地格式化了你的函数,它 * 实际上 * 看起来应该是这样的:
(我还放了一些新行,使问题更明显)。
在C/C++中,缩进并不重要,因此,你应该在if-arm语句的两边加上大括号: