首页 > 解决方案 > 在按键上增加模型的加速度?

问题描述

我正在尝试在开放空间中旋转单个立方体。起初,它从静止开始,然后在按键时它应该在特定按键的特定访问中增加旋转速度。

我的初始代码如下所示:

model = glm::rotate(model, glm::radians(rotationAngle.x * glfwGetTime()), glm::vec3(1.0f, 0.0f, 0.0f));
model = glm::rotate(model, glm::radians(rotationAngle.y * glfwGetTime())), glm::vec3(0.0f, 1.0f, 0.0f));
model = glm::rotate(model, glm::radians(rotationAngle.z * glfwGetTime())), glm::vec3(0.0f, 0.0f, 1.0f)

在一般的按键上,比如 A,代码看起来像这样:

if(glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS){
    rotationAngle.x += 0.01;
}

这会增加旋转速度,但由于glfwGetTime()不断增加,当我按住键时它会非常快速地旋转,然后当未按下键时,它会恢复到正常旋转速度。

我可能做错了什么?

标签: c++openglglfwglm-math

解决方案


您可能想使用增量时间(自上一帧以来的时间变化)而不是时间。我不确定 GLFW 是否有特定的功能,但你可以这样做:

time = glfwGetTime();
delta = time - lastTime;

// do stuff with delta ...

lastTime = time;

推荐阅读