将屏幕坐标转换为世界坐标

时间:2012-02-17 11:03:49

标签: java android opengl-es

我正在使用它获取屏幕坐标:

@Override
public boolean onTouchEvent(MotionEvent ev) {
x = ev.getX(0);
y = ev.getY(0);
return true;
}

这些是我的openGL 1.0 square的顶点:

private float vertices[] = {
        -1.0f, -1.0f,  0.0f,        // V1 - bottom left
        -1.0f,  1.0f,  0.0f,        // V2 - top left
         1.0f, -1.0f,  0.0f,        // V3 - bottom right
         1.0f,  1.0f,  0.0f         // V4 - top right
};

每个使用过openGL的人都知道,如果我要粘贴x和y变量而不是Verticle,我会得到绝对的废话。我的问题是:我应该使用什么公式将屏幕坐标x和y转换为世界坐标,以便我可以使用它们将我的方块定位到触摸点?

编辑:

哎呀,我忘了说,这是2D游戏......

2 个答案:

答案 0 :(得分:3)

其实我自己找到了一种方式,而glUunProject并不是Android平台上的最佳方式...... http://magicscrollsofcode.blogspot.com/2010/10/3d-picking-in-android.html

答案 1 :(得分:1)

有一个名为'gluunproject'的功能,可以为你做这个。链接在这里。

http://www.opengl.org/sdk/docs/man/xhtml/gluUnProject.xml

顺便说一下,屏幕坐标对应于从相机中心穿过屏幕坐标(图像平面)的3D线。

可以通过查询OpenGL当前矩阵来获取ModelView,投影和视口输入。请参阅相同的链接(指定函数调用)。

除x和y屏幕参数外,您还需要深度参数或z参数。您可以使用深度范围将方块放置在特定的z平面中。或者给出一个默认值。但要确保它在可见区域内。

收到物体坐标后,将其视为正方形的中心并绘制所需长度的正方形。

萨蒂什南比亚