我使用OpenGL繪製地圖。讀取XML文件並設置相應的緩衝區後,繪製地圖。這張地圖包含街道,高速公路和邊界。我想要的是每當我觸摸地圖時,特定圖層的顏色應該改變。如何獲取ogl中觸摸屏點的座標?
我面臨的問題是,只要我觸摸屏幕,我只是得到我觸摸點的屏幕像素。我想將此點轉換爲OpenGL座標,以便我可以將此點與繪製的地圖匹配,並且可以突出顯示所選點。
如何將此點轉換爲OpenGL座標?
我使用OpenGL繪製地圖。讀取XML文件並設置相應的緩衝區後,繪製地圖。這張地圖包含街道,高速公路和邊界。我想要的是每當我觸摸地圖時,特定圖層的顏色應該改變。如何獲取ogl中觸摸屏點的座標?
我面臨的問題是,只要我觸摸屏幕,我只是得到我觸摸點的屏幕像素。我想將此點轉換爲OpenGL座標,以便我可以將此點與繪製的地圖匹配,並且可以突出顯示所選點。
如何將此點轉換爲OpenGL座標?
您需要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();
}
您可以使用轉換矩陣和相機位置將屏幕協調轉換爲opengl。 見:https://stackoverflow.com/a/11716990/1369222
如何使用這個是Java/android? –
更好的覆蓋的onTouchEvent(MotionEvent五)GLSurfaceView類,並在onSurfaceChanged渲染器類中使用下面的代碼(GL10 gl,int width,int height)方法。
GLU.gluOrtho2D(gl,0,width,0,height);
上面的代碼將映射屏幕座標的openGL的SurfaceView屏幕,你可以把點很容易在屏幕上。但這隻會在2D視圖中顯示。
@Muneem Habib請檢查這個,如果這不起作用,請讓我知道並告訴我這個問題。 –
先生,我是新的OpenGL,所以我想知道我應該如何使用vec3? –
@MuneemHabib:這是您在C++代碼中使用的矢量類。它不是OpenGL或GLSL。 –
我如何在java/android中使用它? –