0

我有一个在 OpenGL-ES 2.0 中创建的 2D 地图。现在我想画一个比例尺。

因为当用户平移地图时它不会被移动,所以我需要以某种方式在屏幕坐标中绘制它。

我可以就如何完成这样的事情提出一些建议。

4

1 回答 1

1

为此,您只需要知道视口的尺寸。要知道视口变换是一个非常简单的缩放和偏置操作,它的工作原理如下:

 NDC    Screen
 ---    ------
-1.0 -> x          \_ X  (Passed using glViewport (...))
 1.0 -> x + width  /

-1.0 -> y          \_ Y  (Passed using glViewport (...))
 1.0 -> y + height /

-1.0 -> near       \_ Z  (Passed using glDepthRange (...))
 1.0 -> far        /

我为丑陋的 ASCII 艺术道歉,我希望 Stack Overflow 支持 LaTeX。

换句话说,对于 X 和 Y,标准化设备坐标 (NDC) 被缩放以适应许多单位的宽度和高度,并且最左下角的点由 (x,y) 定义。对于您可能不关心的 Z,NDC 从您定义的近值缩放到定义的远值。

您要做的是反转视口映射操作;从屏幕空间坐标开始,然后回到 NDC。

  • NDC X = (2.0 * (屏幕X - 视口X ) / 视口W ) - 1.0;

  • NDC Y = (2.0 * (屏幕Y - 视口Y ) / 视口H ) - 1.0;

这应该为您提供从 Screen (X,Y)生成 NDC (X,Y)坐标的所有必要步骤。一旦有了 NDC 坐标,就可以使用模型、视图和投影的单位矩阵将它们直接传递给着色器。

另一种方法是跳过所有这些并使用正交投影矩阵,该矩阵定义投影和窗口(屏幕空间的另一个名称)坐标之间的 1:1 映射,但我认为最好教授 NDC 以及视口映射如何在长跑 :)

于 2013-10-16T23:17:53.543 回答