小编the*_*lkf的帖子

使用 SDL2 和 OpenGL 的非瞬时/急动运动

我一直在研究一个小的 3D 引擎,试图修复相机并使其不那么生涩。我一直在使用 SDL 作为输入,当它工作时,它正在做这件事,如果我按住一个按钮,它会立即移动一次然后暂停然后开始正确移动,使移动感觉没有反应。

我录制了它的 GIF 动图,虽然可能很难看出发生了什么,但希望它能给一些想法:

gif

向前移动然后向右移动就像:

w wwwwwwwwwwwwwwww aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

重要的代码在这里,但如有必要,请随时要求更多:

//Poll events
    SDL_Event event;
    while (m_EngineState != EngineState::EXIT)
    {
        m_last = m_current;
        m_current = SDL_GetPerformanceCounter();
        deltaTime = (double)((m_current - m_last) * 1000 / SDL_GetPerformanceFrequency());

        while (SDL_PollEvent(&event))
        {
            switch (event.type) {
            case SDL_QUIT:
                m_EngineState = EngineState::EXIT;
                break;

            case SDL_MOUSEMOTION:
                break;

            case SDL_KEYDOWN:
                m_Keys[event.key.keysym.sym] = true;
                break;
            case SDL_KEYUP:
                m_Keys[event.key.keysym.sym] = false;
                break;
            }
            ProcessEvents();
        }

void Engine::ProcessEvents()
{
    if (m_Keys[SDLK_w])
    {
        m_Camera->MoveForward(5.0f*(deltaTime*0.001));
    }
    if (m_Keys[SDLK_s])
    {
        m_Camera->MoveForward(-5.0f*(deltaTime*0.001));
    } …
Run Code Online (Sandbox Code Playgroud)

c++ opengl events camera sdl

0
推荐指数
1
解决办法
941
查看次数

标签 统计

c++ ×1

camera ×1

events ×1

opengl ×1

sdl ×1