2013-08-30 312 views
0

我是opengl的新手。我正在使用opengl ES2.0在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函数,但这个功能也没有给我正确的结果。

回答

0

我建议你只是使用直接投影法。 这在我的这个例子2D项目工作对我来说:

然后:Matrix.multiplyMM(...拿在前述知情人士一看 在顶点着色器,你然后只需使用:

gl_Position = uMVPMatrix * vPosition; 

图形 整个应用程序逻辑与屏幕坐标和这些被投射到OpenGL图像内的坐标顶点着色器。

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

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

HTH

相关问题