【问题标题】:Converting Mouse Coords to World Coords将鼠标坐标转换为世界坐标
【发布时间】:2015-04-11 16:51:15
【问题描述】:

我正在尝试在 OpenGL (C++) 中使光源跟随鼠标。在世界坐标中,我的屏幕中心是(4, 1.5f),我的鼠标坐标为(640, 360)(窗口分辨率为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

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

有什么想法吗?

【问题讨论】:

  • 你是如何设置你的视图矩阵以便你的世界坐标中心是(4, 1.5)?仅从投影矩阵来看,它应该位于(8, 4.5)(假设Matrix4f::Orthographic 像标准正交函数一样工作)。
  • @derhass 我发现了一些不同的计算,但我发现这个是最多的:snip.redthirddivision.com/snip/view/…(将其添加到粘贴中,因为评论一直搞乱格式),还应该注意这是一个正在开发的 2D 游戏引擎
  • @derhass 再次 PS,如果它也有助于我的光照位置在 gl_Position = projectionMatrix * viewMatrix * modelMatrix * position 的着色器中计算,其中 viewMatrix 当前仅填充 1,而 modelMatrix 是带有 x = 4, y = 3, z = 0 的平移矩阵投影是我的正射
  • 好吧,那么您混淆了这些术语。如果您想考虑模型矩阵,您似乎需要对象空间,而不是世界空间。某个窗口空间点的世界空间位置仅由投影和视图矩阵定义。
  • @derhass 我该怎么做? google 搜索只能找到关于世界空间的东西

标签: c++ opengl window coordinates mouse


【解决方案1】:

刚刚关闭这个,我的问题是,在我做了gl_Position = projectionMatrix * viewMatrix * modelMatrix * position; 之后,我忘记在下一行将更新的位置数据发送到我的片段着色器,所以我不得不改变我的行pos = position;(pos 是一个 out vec4并且位置是 vec4) 到 pos = modelMatrix * position;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 2013-12-16
    相关资源
    最近更新 更多