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