Glm 按时间旋转对象

Glm rotate object by time

我有一个对象,我想使用此功能在按键按住时旋转它

if (key == GLFW_KEY_S && action == GLFW_REPEAT) {
            timer = glfwGetTime();
}

timer 发送到此旋转

auto rotateMat = rotate(mat4{}, timer * 0.4f, {0, 1, 0});

但问题是,我按住 S 键,物体在旋转,但是当我松开它时,时间当然在变化,因为 glfwGetTime() 是实时的。然后我再次按下 S 并按住它旋转,但它从不同的物体角度开始旋转,就像它停止时一样。有什么解决办法吗?

编辑:

我已经通过使用修复了它 timer += 0.1;

但是当我按住S时,它有大约1秒的延迟,直到物体开始旋转。这与使用真实 glfwGetTime() 相同。怎样才能不耽误?

如果按键被按下,您应该跟踪:

if (action == GLFM_PRESS) {
    keysPressed[key] = true;
}
if (action == GLFM_RELEASE) {
    keysPressed[key] = false;
}

在渲染循环中:

now = glfwGetTime();
double delta = now - lastTime;
lastTime = now;

if (keysPressed[GLFW_KEY_S]) {
    timer += delta;
}
if (keysPressed[GLFW_KEY_A]) {
    timer -= delta;
}
auto rotateMat = rotate(mat4{}, timer * 0.4f, {0, 1, 0});