glm :: unProject似乎混合了屏幕Y坐标

Bou*_*les 1 opengl projection coordinate-systems coordinate-transformation glm-math

我正在尝试将我的OpenGL视口中鼠标的光标位置转换为世界坐标.我正在使用glm::unProject()这个.但是,似乎鼠标位置的Y坐标以某种方式被否定.

如果我定向我的相机使世界的Y轴朝上并X指向右方,向左/向右移动鼠标会给我正确的坐标,但是上下移动鼠标Y我得到的"世界"坐标是相反的(正向Y下) .

如果我重新调整相机的方向,那么X现在正在向上移动,那Y就是向左走.向左/向右移动鼠标会给出正确的Y坐标,但向上/向下移动会给出相反的X坐标.我定向时的行为相同Z.

这个页面提到设备坐标使用LHS,也许这是原因?我需要做些什么来处理设备坐标在不同系统中的情况吗?有没有办法确定?


我也注意到我的变换坐标是他们应该的一半(鼠标放在(1,0,0)显示的对象上,(0.5,0,0)但我认为这是一个单独的问题,所以一旦我解决了这个问题,我会问另一个问题.

Dre*_*all 7

基本问题是OpenGL将原点定义为窗口的左下角,而大多数窗口系统使用左上角.解决方案很简单:从窗口高度中减去鼠标Y坐标:

gl_x = mouse_x;
gl_y = windowHeight - mouse_y;
Run Code Online (Sandbox Code Playgroud)