C++ glm::给出一半期望值的取消项目

C++ glm::给出一半期望值的取消项目,c++,opengl,projection,glm-math,C++,Opengl,Projection,Glm Math,我对glm::unProject有问题。我正在尝试将QGLWidget中的光标位置转换为世界坐标。然而,从unProject出来的坐标是它们应该的一半 我在特定的坐标上画了一些形状,如果我把鼠标放在它们上面,坐标是它们被画的一半 在上图中,左立方体位于原点,右立方体位于(1,0,0),但unProject告诉我它位于(.5,0,0) 如果我在鼠标当前所在的位置绘制另一个立方体,它将在鼠标和原点之间渲染 glm::unProject(glm::vec3(mouse_x, window_heigh

我对glm::unProject有问题。我正在尝试将QGLWidget中的光标位置转换为世界坐标。然而,从unProject出来的坐标是它们应该的一半

我在特定的坐标上画了一些形状,如果我把鼠标放在它们上面,坐标是它们被画的一半

在上图中,左立方体位于原点,右立方体位于
(1,0,0)
,但unProject告诉我它位于
(.5,0,0)

如果我在鼠标当前所在的位置绘制另一个立方体,它将在鼠标和原点之间渲染

glm::unProject(glm::vec3(mouse_x, window_height - mouse_y, mouse_z),
               glm::lookAt(camera_position, camera_look_at, camera_up),
               glm::perspective(fov, window_width / window_height, near, far),
               glm::vec4(0, 0, window_width, window_height));

如果我将上述调用的结果加倍,那么我的结果坐标是确定的。然而,我认为这不是正确的解决方案,我怀疑我的参数有问题

你的
mouse_z
从何而来?它是使用glm::project在原点上计算的,使用的参数与我们在unProject中使用的参数相同。在一般情况下,仅将其用作z坐标将不起作用,因为窗口空间中的平面
z=mouse_z
不一定包含你的两个立方体中心。但是,在您的特定情况下,您的相机可能会以匹配的方式放置,因此我不认为这是问题所在。