C++ 如何通过鼠标移动使OpenGL相机在SFML中移动

C++ 如何通过鼠标移动使OpenGL相机在SFML中移动,c++,linux,opengl,C++,Linux,Opengl,我的“游戏引擎”中的FPS摄像头模块工作良好(这可能很重要)。现在我使用WASD和上/下/左/右。我想增加用鼠标移动相机的可能性。这是我写的代码: if (event.type == sf::Event::MouseMoved) { static glm::vec2 lastPos; glm::vec2 mousePos(event.mouseMove.x, event.mouseMove.y); glm::vec2 delta(lastPos - mousePos);

我的“游戏引擎”中的FPS摄像头模块工作良好(这可能很重要)。现在我使用WASD和上/下/左/右。我想增加用鼠标移动相机的可能性。这是我写的代码:

if (event.type == sf::Event::MouseMoved)
{
    static glm::vec2 lastPos;
    glm::vec2 mousePos(event.mouseMove.x, event.mouseMove.y);
    glm::vec2 delta(lastPos - mousePos);
    delta *= -0.01;
    cam->addRotation(delta);

    sf::Vector2i center(parentWnd->getSFMLWindow()->getSize().x/2, parentWnd->getSFMLWindow()->getSize().y/2);
    lastPos.x = center.x;
    lastPos.y = center.y;

    sf::Mouse::setPosition(center, *parentWnd->getSFMLWindow());
}

如何在屏幕上移动光标的情况下移动相机?它工作了几秒钟,相机锁定(所以我不能移动鼠标,那个么我必须终止进程)。我宁愿得到鼠标移动事件而不是鼠标位置,但SFML不支持这一点。

我自己解决了这个问题。以下是代码:

if (event.type == sf::Event::MouseMoved) {
    static glm::vec2 lastMousePos;
    glm::vec2 mousePos(event.mouseMove.x, event.mouseMove.y);

    glm::vec2 deltaPos(mousePos - lastMousePos);
    const float mouseSensitivity = 0.1f;
    deltaPos *= mouseSensitivity;
    deltaPos.y *= -1;
    cam->addRotation(deltaPos);

    sf::Window const& sfWindow = *parentWnd->getSFMLWindow();
    auto windowSize = sfWindow.getSize();

    uint32_t maxMousePosRadius = glm::min(windowSize.x, windowSize.y) / 3;
    glm::vec2 windowCenter(windowSize.x / 2, windowSize.y / 2);

    if (glm::length(mousePos - windowCenter) > maxMousePosRadius) {
        sf::Mouse::setPosition(sf::Vector2i((int)windowCenter.x, (int)windowCenter.y), sfWindow);
        lastMousePos = windowCenter;
    }
    else {
        lastMousePos = mousePos;
    }
}