【问题标题】:Glm rotate object by timeglm 按时间旋转对象
【发布时间】:2017-11-04 17:41:38
【问题描述】:

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

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() 相同。怎样才能不耽误?

【问题讨论】:

    标签: opengl rotation glfw glm-math


    【解决方案1】:

    您应该跟踪是否按下了键:

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

    【讨论】:

    • 谢谢,延迟是固定的,但因为我想左右旋转,我会pressedLastTick = -glfwGetTime(); 以防旋转到另一边,这不起作用,因为我是减去时间值。我该如何避免呢?
    • 我已经重写了答案以考虑多个键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多