Glm按时间旋转对象

时间:2017-11-04 17:41:39

标签: opengl rotation glfw glm-math

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

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()也是如此。我怎能没有延迟?

1 个答案:

答案 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});