Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用GLFW在openGL中旋转摄影机? 我用GLFW在C++中创建OpenGL应用程序。根据教程,我成功地创建了类似FPS的相机(WASD移动+鼠标移动的俯仰偏航)_C++_Opengl_Camera_Glfw - Fatal编程技术网

如何使用GLFW在openGL中旋转摄影机? 我用GLFW在C++中创建OpenGL应用程序。根据教程,我成功地创建了类似FPS的相机(WASD移动+鼠标移动的俯仰偏航)

如何使用GLFW在openGL中旋转摄影机? 我用GLFW在C++中创建OpenGL应用程序。根据教程,我成功地创建了类似FPS的相机(WASD移动+鼠标移动的俯仰偏航),c++,opengl,camera,glfw,C++,Opengl,Camera,Glfw,对于相机鼠标移动,我正在使用 glfwSetCursorPosCallback(window, mouse_callback); void mouse_回调(GLFWwindow*窗口,双XPO,双YPO) { 如果(第一个鼠标) { lastX=xpos; lastY=ypos; firstMouse=false; } float xoffset=xpos-lastX; 浮动yoffset=lastY-ypos; lastX=xpos; lastY=ypos; 浮动灵敏度=0.1f; xof

对于相机鼠标移动,我正在使用

glfwSetCursorPosCallback(window, mouse_callback);
void mouse_回调(GLFWwindow*窗口,双XPO,双YPO)
{
如果(第一个鼠标)
{
lastX=xpos;
lastY=ypos;
firstMouse=false;
}
float xoffset=xpos-lastX;
浮动yoffset=lastY-ypos;
lastX=xpos;
lastY=ypos;
浮动灵敏度=0.1f;
xoffset*=灵敏度;
yoffset*=灵敏度;
偏航+=xoffset;
音高+=音高偏移;
如果(节距>89.0f)
螺距=89.0f;
如果(节距<-89.0f)
螺距=-89.0f;
glm::vec3锋;
front.x=cos(glm::弧度(偏航))*cos(glm::弧度(俯仰));
front.y=sin(glm::弧度(节距));
front.z=sin(glm::弧度(偏航))*cos(glm::弧度(俯仰));
cameraFront=glm::规格化(前);
}
这工作正常,但问题是我的应用程序窗口不是全屏的,所以若我想旋转鼠标光标,那个么很难控制相机

是否可以执行与GLFWSETCURSOR OSCALLBACK相同的操作,但仅当按下左键单击时才可以?我想让相机做和现在一样的事情,但前提是我按下左键

是否可以执行与
glfwSetCursorPosCallback
相同的操作,但仅当按下左键时才可以?我想让相机做和现在一样的事情,但前提是我按下左键

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

添加鼠标按钮回调:

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); 

        // [...]
    }
}
并获取回调中的鼠标位置:

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); 

        // [...]
    }
}

我不太明白你到底在问什么,你如何在glfw中旋转相机,或者你如何在窗口外接收鼠标位置?我已经根据鼠标光标的移动进行了旋转,我想做的是只在按下鼠标左键时进行旋转