【问题标题】:Converting screen coordinates to world coordinates将屏幕坐标转换为世界坐标
【发布时间】:2012-02-17 11:03:48
【问题描述】:

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

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

这些是我的 openGL 1.0 正方形的垂直:

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 变量而不是 verticles,那我绝对是一派胡言。我的问题是:我应该使用什么公式将屏幕坐标 x 和 y 转换为世界坐标,以便我可以使用它们将我的正方形定位到触摸点?

编辑:

糟糕,我忘了说,这是一款 2D 游戏……

【问题讨论】:

  • 我不知道 OpenGL,但您是否考虑过使用 getRawX()(返回绝对坐标)而不是 getX()

标签: java android opengl-es


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    有一个名为“gluunproject”的函数可以为您完成这项工作。链接在这里。

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

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

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

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

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

    萨蒂什

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多