规范化设备坐标映射到2d数组索引

时间:2016-02-25 14:03:37

标签: java arrays opengl lwjgl

我在opengl中创建了一个棋盘/棋盘,它有100个盒子。从逻辑上讲,我在2D阵列中表示该板(10乘10)。现在我希望用户单击opengl窗口中的任意位置,我可以确定该框中该框所属的索引,以便我可以进行一些处理。我怎样才能做到这一点?

我使用LWJGL作为opengl的java包装器。我知道我必须得到鼠标坐标,我知道它们是在规范化设备坐标中返回的(范围为1到-1)如何将NDC映射到索引?我一直在寻找,但没有找到。

我知道每个盒子的NDC范围。那是因为我通过给出顶点来绘制它们所以我知道每个盒子在NDC中的开始和结束位置。但是以键值对的形式输入范围及其各自的索引会非常麻烦。

目前,我正在尝试通过基本算法创建公式,以便转换NDC并为我提供索引。这可能吗?还是有其他可行的方法吗?

对于那些正在考虑如何制作棋盘的人,我画了从-1到1的垂直线,距离为0.2。水平的情况也是如此。

1 个答案:

答案 0 :(得分:0)

如果您直接在屏幕空间绘图,则可以很容易地计算NDC坐标的方框索引:

index.x = (int) ((ndc.x/2.0f + 0.5f) * boardSize.x)
index.y = (int) ((ndc.y/2.0f + 0.5f) * boardSize.y)
if (index.x == boardSize.x) // in case ndc.x was exactly 1
    --index.x;
if (index.y == boardSize.y) // in case ndc.y was exactly 1
    --index.y;