【问题标题】:How to get world coordinates from screen coordinates in opengl es2.0?如何从opengl es2.0中的屏幕坐标获取世界坐标?
【发布时间】:2013-08-30 06:42:42
【问题描述】:

我是opengl的新手。我正在使用 opengl ES2.0 在 android 中绘制地图。当我触摸屏幕时,我正在获取屏幕坐标。我希望将这些坐标转换为世界坐标。我通过研究找到的代码如下:

vec3 UnProjectPoint( const vec3& Point, const max4& Projection, const mat4& ModelView )
{
    vec4 R( Point, 1.0f );

    R.x = 2.0f * R.x - 1.0f;
    R.y = 2.0f * R.y - 1.0f;
    R.y = -R.y;

    R.z = 1.0f;

    R = Projection.GetInversed() * R;
    R = ModelView.GetInversed() * R;

    return R.ToVec3();
}

但是 android 不允许我使用 vec3 和 vec4? 我也使用了内置的 gluunproject 函数,但这个函数也没有给我正确的结果。

【问题讨论】:

    标签: android opengl-es projection


    【解决方案1】:

    我建议您只使用正投影。 这在我的这个 2d 示例项目中对我有用:

    然后:Matrix.multiplyMM(... 看看前面提到的源代码。 在顶点着色器中,您只需使用:

    gl_Position = uMVPMatrix * vPosition;
    

    图形 整个应用程序逻辑与屏幕坐标一起工作,并将这些坐标投影到该顶点着色器中的 OpenGL 坐标上。

    我只是一个OpenGL菜鸟,所以我不知道这是否是最佳解决方案。

    顺便说一句:在本书的第 111 页上:Graphics Gems V. 可以找到这种转换的一般方法。

    HTH

    【讨论】:

      猜你喜欢
      • 2017-12-11
      • 2021-10-22
      • 2016-02-29
      • 2019-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-29
      • 2017-02-25
      相关资源
      最近更新 更多