2013-08-30 359 views
0

我是opengl的新手。我正在使用opengl ES2.0在android中繪製地圖。當我觸摸屏幕時,我正在獲取屏幕座標。我希望這些座標轉換成世界座標。我通過研究發現的代碼如下:如何從opengl es2.0的屏幕座標獲取世界座標?

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

但android不允許我使用vec3和vec4? 我也使用內置的gluunproject函數,但這個功能也沒有給我正確的結果。

回答

0

我建議你只是使用直接投影法。 這在我的這個例子2D項目工作對我來說:

然後:Matrix.multiplyMM(...拿在前述知情人士一看 在頂點着色器,你然後只需使用:

gl_Position = uMVPMatrix * vPosition; 

圖形 整個應用程序邏輯與屏幕座標和這些被投射到OpenGL圖像內的座標頂點着色器。

我只是一個OpenGL noob,所以我不知道這是否是一個最佳解決方案。

順便說一句:在本書的第111頁上:Graphics Gems V.可以找到這種轉換的一般方法。

HTH

相關問題