我正在使用OpenGL绘制地图。我在读取XML文件并设置相应的缓冲区后绘制地图。此地图包含街道,高速公路和边界。我想要的是每当我触摸地图时,应该更改特定图层的颜色。
我面临的问题是每当我触摸屏幕时,我只是触及我触摸点的屏幕像素。我想将此点转换为OpenGL坐标,以便我可以将此点与绘制的地图匹配,并可以突出显示所选的点。
如何将此点转换为OpenGL坐标?
答案 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视图中。