gpt4 book ai didi

java - 在 OpenGL 中根据屏幕坐标绘制线条

转载 作者:行者123 更新时间:2023-12-01 14:01:15 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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

 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 会从您定义的近值缩放到定义的远值。

你想要做的是反转视口(viewport)映射操作;从屏幕空间坐标开始,然后返回 NDC。

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

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

这应该为您提供从屏幕(X,Y)生成NDC(X,Y)坐标的所有必要步骤。获得 NDC 坐标后,您可以使用模型、 View 和投影的单位矩阵将它们直接传递到着色器。

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com