用鼠标按钮旋转相机而不重置?

问题描述 投票:0回答:1

我想使用鼠标按钮使相机旋转。

相机旋转得很好,但问题出在鼠标按钮上。当我释放鼠标按钮并再次按下时,旋转重置回中心(0.0,0.0f,0.0f):

void mouse_input(GLFWwindow* window, int key, int action, int mods)
{
    if (key == GLFW_MOUSE_BUTTON_MIDDLE && action == GLFW_PRESS)
    {
        mousemovement = true;
        glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
    }
    if (key == GLFW_MOUSE_BUTTON_MIDDLE && action == GLFW_RELEASE)
    {
        mousemovement = false;
        glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
    }
}
void cursor_callback(GLFWwindow* window, double xpos, double ypos)
{
    float lastposx = 1920.0f / 2;
    float lastposy = 1080.0f / 2;
    if (mousemovement)
    {
        if (firstMouse) {
            lastposx = xpos;
            lastposy = ypos;
            firstMouse = false;
        }
        float speed = 0.05f;
        float offsetx= 0.0f;
        float offsety = 0.0f;
        offsetx = (xpos - direction.x);
        offsety = (direction.y - ypos);
        float jaw = 0.0f;
        float pitch = -90.0f;
        offsetx *= speed;
        offsety *= speed;
        jaw += offsetx;
        pitch += offsety;
        if (pitch < -90.0f)
        {
            pitch = -90.0f;
        }
        if (90.0f < pitch)
        {
            pitch = 90.0f;
        }
        direction.x = cos(glm::radians(jaw)) * cos(glm::radians(pitch));
        direction.y = sin(glm::radians(pitch));
        direction.z = sin(glm::radians(jaw)) * cos(glm::radians(pitch));
        cameraFront = glm::normalize(direction);
        lastposx = xpos;
        lastposy = ypos;
    }
    else
    {
        previouscamerafront = direction;

    }
} 

我尝试使用前面的前置摄像头创建另一个 vec3 变量。

我希望使用鼠标中键来旋转相机。

有人可以帮我吗?

c++ opengl camera glfw glm-math
1个回答
0
投票

GLFW:输入指南-光标模式

glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);

这将隐藏光标并将其锁定到指定的窗口。然后,GLFW 将处理“光标重新居中”和偏移计算的所有细节,并为应用程序提供虚拟光标位置。该虚拟位置通常通过光标位置回调和轮询提供。

每次禁用光标(即每次按下中键时),光标的位置将设置为窗口的中心。

因此,要么不要禁用光标,要么保持禁用状态,要么处理重新居中。

© www.soinside.com 2019 - 2024. All rights reserved.