我有在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/