将鼠标转换为世界坐标

时间:2015-04-11 16:51:15

标签: c++ opengl window coordinates mouse

我试图在OpenGL(C ++)中使用鼠标来制作光源。在世界坐标中,我的屏幕中心是(4, 1.5f),我得到中心的鼠标坐标为(640, 360)(窗口res为1280,720)。我设法只转换中心的坐标,但我无法弄清楚如何让其余的转换。

用于转换中心坐标:

shader.SetUniform("lightPos", fs::Vector2f((float) x * 8 / 1280, (float) (y * 4.5f / 720) - 0.75f));

我尝试的另一个转化是(x * 16.0f / 1280.0f), (9.0f - y * 9.0f / 720.0f)

其中x和y是鼠标坐标。

我在网上找到的所有解决方案到目前为止都没有发挥作用。

如果重要,这是我的投影矩阵:

fs::Matrix4f ortho = fs::Matrix4f::Orthographic(0, 16, 0, 9, -1, 1);

参数:float left, float right, float bottom, float top, float near, float far

为了澄清,这里有一些图像,其中黄色矩形是我的鼠标,这是我想要光渲染的地方

Center coordinate being correct

Now its not correct

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

关闭此问题,我的问题是,在我完成gl_Position = projectionMatrix * viewMatrix * modelMatrix * position;后,我忘记了下一行将更新的位置数据发送到我的片段着色器,所以我不得不更改我的行pos = position;(pos作为一个外向的vec4和位置是pos = modelMatrix * position;

的vec4)