如何在opengl es2.0中从屏幕坐标中获取世界坐标



我是opengl的新手。我正在android中使用opengl ES2.0绘制地图。当我触摸屏幕时,我得到的是屏幕坐标。我想把这些坐标转换成世界坐标。我通过研究发现的代码如下:

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函数,但这个函数也没有给我正确的结果。

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

  • 矩阵.othoM(mtrxProjection,0,左,右,下,上,近,远)

然后:矩阵。multiplyMM(…看看前面提到的来源。在顶点着色器中,只需使用:

gl_Position = uMVPMatrix * vPosition;

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

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

BTW:在这本书的第111页:图形宝石五。人们可以找到这种转换的通用方法。

HTH

最新更新