【发布时间】: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