繁体   English   中英

如何使用GLFW在openGL中旋转相机?

[英]How to rotate camera in openGL using GLFW?

我正在使用GLFW在c ++中创建一个OpenGL应用程序。 根据教程,我设法创建了像相机一样的FPS(WASD移动+鼠标移动的偏航)。

我正在使用相机鼠标移动

glfwSetCursorPosCallback(window, mouse_callback);
void mouse_callback(GLFWwindow* window, double xpos, double ypos)
{
    if (firstMouse)
    {
        lastX = xpos;
        lastY = ypos;
        firstMouse = false;
    }

    float xoffset = xpos - lastX;
    float yoffset = lastY - ypos; 
    lastX = xpos;
    lastY = ypos;

    float sensitivity = 0.1f;
    xoffset *= sensitivity;
    yoffset *= sensitivity;

    yaw += xoffset;
    pitch += yoffset;

    if (pitch > 89.0f)
        pitch = 89.0f;
    if (pitch < -89.0f)
        pitch = -89.0f;

    glm::vec3 front;
    front.x = cos(glm::radians(yaw)) * cos(glm::radians(pitch));
    front.y = sin(glm::radians(pitch));
    front.z = sin(glm::radians(yaw)) * cos(glm::radians(pitch));
    cameraFront = glm::normalize(front);
}

这工作正常,但是问题是我的应用程序窗口不是全屏,所以如果我想旋转鼠标光标离开窗口,则很难控制摄像机。

是否可以执行与glfwSetCursorPosCallback相同的操作,但前提是必须按下左键? 我希望相机执行与现在相同的操作,但前提是我按下了左键。

是否可以执行与glfwSetCursorPosCallback相同的glfwSetCursorPosCallback ,但glfwSetCursorPosCallback是必须按下左键? 我希望相机执行与现在相同的操作,但前提是我按下了左键。

glfwSetMouseButtonCallback设置一个回调,当按下鼠标按钮时会收到通知。
当前的鼠标(光标)位置可以通过glfwGetCursorPos获取。

添加鼠标按钮回调:

glfwSetMouseButtonCallback(window, mouse_button_callback);

并获得鼠标在回调中的位置:

void mouse_button_callback(GLFWwindow* window, int button, int action, int mods)
{
    if (button == GLFW_MOUSE_BUTTON_LEFT && action == GLFW_PRESS)
    {
        double xpos, ypos;     
        glfwGetCursorPos(window, &xpos, &ypos); 

        // [...]
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM