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

由于在用户平移地图时不会移动此位置,因此我需要以某种方式在屏幕坐标中绘制它。

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

最佳答案

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

 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。


NDCX =(2.0 *(ScreenX-ViewportX)/ ViewportW)-1.0;
NDCY =(2.0 *(ScreenY-ViewportY)/ ViewportH)-1.0;


这应该为您提供所有必要的步骤,以便从Screen(X,Y)生成NDC(X,Y)坐标。获得NDC坐标后,可以使用“模型”,“视图”和“投影”的标识矩阵将它们直接传递到着色器。

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

关于java - 根据OpenGL中的屏幕坐标绘制线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19331394/

10-10 13:54