1

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

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

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

4

3 回答 3

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();
}
于 2013-08-29T12:03:40.090 回答
0

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

于 2013-08-29T11:56:27.270 回答
0

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

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

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

于 2013-09-10T10:07:29.310 回答