c++ - 使用增量时间的对象动画

标签 c++ glfw opengl-3

我正在尝试制作球运动的动画。我想在用户按下空格键时启动动画。

现在,动画很奇怪。

//global
float delta_time = 0.0f;
float last_frame = 0.0f;

// render loop
    while (!glfwWindowShouldClose(window))
    {
        float current_frame = glfwGetTime();
        delta_time = current_frame - last_frame;
        last_frame = current_frame;

        if (isAnimate)
        {
            delta_time += 1.0f;
        }

        processInput(window);

        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        // render
        render_scene();

        glfwSwapBuffers(window);
        glfwPollEvents();
    }

void render_scene(Shader inShader,
                  float radius)
{
    ...

    float x_pos = 0;
    float y_pos = 0;
    float z_pos = 0;

    x_pos +=  vx * delta_time;
    y_pos +=  vy * delta_time - (g / 2.0f) * delta_time * delta_time;
    z_pos +=  0.0f;

    model = glm::translate(model, glm::vec3(x_pos, y_pos, z_pos));

    draw_s();

}

void processInput(GLFWwindow *window)
{
    if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
        glfwSetWindowShouldClose(window, true);

    if(glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS)
    {
        if (isAnimate) isAnimate = 0;
        else
        {
            isAnimate = 1;
        }

    }

    if(glfwGetKey(window, GLFW_KEY_R) == GLFW_PRESS)
    {
        isAnimate = 0;
        delta_time = 0.0f;

    }
...
}

最佳答案

当您不想让动画运行时,“停止时间”怎么样?像这样的东西:

float current_frame = glfwGetTime();

if (isAnimate)
    delta_time = current_frame - last_frame;
else
    delta_time = 0;

last_frame = current_frame;

关于c++ - 使用增量时间的对象动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57901979/

相关文章:

linux - 通过 YaST 在 openSuse linux 上安装 GLFW3

c++ - 做一个循环 "slow down"

c++ - glVertexAttribPointer 提高 GL_INVALID_OPERATION

objective-c - 带 NSOpenGLView 的 OpenGL 3.2

c++ - 是否有 C++ 方法允许在不创建临时变量的情况下多次使用函数指针?

c++ - 如何组织 C++ 项目

c++ - 如何与程序的其余部分同时显示计时器?

c - OpenGL+GLFW glGenVertexArrays 返回 GL_INVALID_OPERATION

c++ - 如何仅给定相应的 id 来确定 GL 帧缓冲区对象的宽度和高度

c++ - 凯特安装问题