我有一个对象,我想使用此功能在按键保持时旋转
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()
也是如此。我怎能没有延迟?
答案 0 :(得分:2)
您应该跟踪是否按下了键:
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});