2013-08-29 77 views
1

我使用OpenGL繪製地圖。讀取XML文件並設置相應的緩衝區後,繪製地圖。這張地圖包含街道,高速公路和邊界。我想要的是每當我觸摸地圖時,特定圖層的顏色應該改變。如何獲取ogl中觸摸屏點的座標?

我面臨的問題是,只要我觸摸屏幕,我只是得到我觸摸點的屏幕像素。我想將此點轉換爲OpenGL座標,以便我可以將此點與繪製的地圖匹配,並且可以突出顯示所選點。

如何將此點轉換爲OpenGL座標?

回答

2

您需要unproject屏幕點到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(); 
} 
+0

先生,我是新的OpenGL,所以我想知道我應該如何使用vec3? –

+0

@MuneemHabib:這是您在C++代碼中使用的矢量類。它不是OpenGL或GLSL。 –

+0

我如何在java/android中使用它? –

0

更好的覆蓋的onTouchEvent(MotionEvent五)GLSurfaceView類,並在onSurfaceChanged渲染器類中使用下面的代碼(GL10 gl,int width,int height)方法。

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

上面的代碼將映射屏幕座標的openGL的SurfaceView屏幕,你可以把點很容易在屏幕上。但這隻會在2D視圖中顯示。

+0

@Muneem Habib請檢查這個,如果這不起作用,請讓我知道並告訴我這個問題。 –

相關問題