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

时间:2014-07-16 14:27:49

标签: opengl projection coordinate-systems glm-math coordinate-transformation

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

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

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

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


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

1 个答案:

答案 0 :(得分:7)

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

gl_x = mouse_x;
gl_y = windowHeight - mouse_y;