我是opengl的新手。我正在使用opengl ES2.0在android中绘制地图。当我触摸屏幕时,我正在获得屏幕坐标。我希望将这些坐标转换为世界坐标。我通过研究发现的代码如下:
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 :(得分:0)
这称为对象选择。 SO上有很多类似的问题:https://stackoverflow.com/search?q=opengl+object+picking
答案 1 :(得分:0)
我建议你只使用一个ortographic投影。 在我的第二个示例项目中,这对我有用:
然后:Matrix.multiplyMM(...看一下前面提到的来源。 在顶点着色器中,您只需使用:
gl_Position = uMVPMatrix * vPosition;
图形 整个应用程序逻辑与屏幕坐标一起使用,并将它们投影到该顶点着色器中的OpenGL坐标上。
我只是一个OpenGL菜鸟,所以我不知道这是否是最佳解决方案。
BTW:在本书的第111页:Graphics Gems V.可以找到这种转换的一般方法。
HTH