如何在ogl中获取触摸屏点的坐标?

时间:2013-08-29 11:53:13

标签: android opengl-es projection projection-matrix

我正在使用OpenGL绘制地图。我在读取XML文件并设置相应的缓冲区后绘制地图。此地图包含街道,高速公路和边界。我想要的是每当我触摸地图时,应该更改特定图层的颜色。

我面临的问题是每当我触摸屏幕时,我只是触及我触摸点的屏幕像素。我想将此点转换为OpenGL坐标,以便我可以将此点与绘制的地图匹配,并可以突出显示所选的点。

如何将此点转换为OpenGL坐标?

3 个答案:

答案 0 :(得分:2)

您需要将屏幕点取消投影到OpenGL世界空间:

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();
}

答案 1 :(得分:0)

您可以使用变换矩阵和相机位置将屏幕坐标转换为opengl。 请参阅:https://stackoverflow.com/a/11716990/1369222

答案 2 :(得分:0)

更好地覆盖GLSurfaceView类的onTouchEvent(MotionEvent e),并在onSurfaceChanged(GL10 gl,int width,int height)方法的Renderer类中使用以下代码。

GLU.gluOrtho2D(gl,0,width,0,height);

上面的代码会将屏幕坐标映射到openGL SurfaceView屏幕,您可以轻松地将这些点放在屏幕上。但这只是在2D视图中。