【问题标题】:android opengl es 2.0 converting screen coordinates to world coordinateandroid opengl es 2.0 将屏幕坐标转换为世界坐标
【发布时间】:2012-01-24 18:44:22
【问题描述】:
我是 opengl 的新手,想弄清楚如何将 x、y 屏幕坐标转换为其各自的 opengl 世界坐标。到目前为止,我发现的所有示例都使用 GLU.gluUnProject() 在两个坐标系之间进行转换,但是,我不确定此方法在 opengl es 2.0 中是否可用,如果可以,我不确定如何检索投影和模型视图矩阵。使用 gluUnProject 的其他示例通过使用特定于 opengl es 1.X 的 MatrixGrabber 类来访问矩阵。我还发现了使用顶点着色器在坐标系之间进行转换的 iphone 示例,但是,我也无法使用这种技术。似乎有一种简单的方法可以将 2D 屏幕坐标转换为 2D 世界坐标。任何帮助将非常感激。谢谢。
【问题讨论】:
标签:
android
opengl-es-2.0
【解决方案1】:
您的假设不正确,没有简单的方法可以将屏幕坐标转换为世界坐标。
鉴于 2d 屏幕坐标和现有视图和投影矩阵,除了对深度缓冲区进行采样(假设您有深度缓冲区)之外,无法确定正确的 z 坐标。
将 2d 点投影到视锥中只会给您一条射线(或从投影在近剪裁平面上的点到投影在远剪裁平面上的点的线段)。
在您使用 java 时,以下内容可能不是重点,但我还是要提一下:如果您考虑使用 c++,我建议您查看 glm 库:http://glm.g-truc.net/
它为已弃用的 glu 函数提供替代品,例如 glm::project 和 glm::unproject。
它是 opengl 矩阵堆栈和 glu 函数的绝佳替代品。
我希望这有助于回答您的问题。祝你好运。