android opengl es 2.0将屏幕坐标转换为世界坐标

时间:2012-01-24 18:44:23

标签: android opengl-es-2.0

我是opengl es的新手,并试图找出如何将x,y屏幕坐标转换为其各自的opengl世界坐标。到目前为止我发现的所有例子都使用GLU.gluUnProject()在两个坐标系之间进行转换,但是,我不确定这个方法在opengl es 2.0中是否可用,如果是,我不知道如何检索投影和模型视图矩阵。使用gluUnProject的其他示例通过使用特定于opeX1.1X的MatrixGrabber类来访问矩阵。我还发现了使用顶点着色器在坐标系之间进行转换的iphone示例,但是我还没有能够使用这种技术。似乎有一种简单的方法可以将2D屏幕坐标转换为2D世界坐标。任何帮助将非常感激。谢谢。

1 个答案:

答案 0 :(得分:0)

您的假设不正确,没有简单的方法将屏幕坐标转换为世界坐标。

给定2d屏幕坐标和现有视图和投影矩阵,除了采样深度缓冲区之外,无法确定正确的z坐标(假设您有深度缓冲区)。

将2d点投影到视锥体中只会给你一条光线(或从投影在近剪裁平面上的点到投影在远剪裁平面上的点的线段)。

以下可能除了你使用java之外的一点,但我还是要提一下:如果你考虑使用c ++我建议你查看glm库:http://glm.g-truc.net/

它提供了已弃用的glu函数的替换,例如glm :: project和glm :: unproject。 它是opengl矩阵堆栈和glu函数的绝佳替代品。

我希望这有助于回答你的问题。祝你好运。