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

标签 android opengl-es-2.0

我是 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/

相关文章:

java - 无法使用 GAPID 在 Android 模拟器上启动跟踪

android - 在 Android 上将视频转码/转换为 Mp4

android - 无法使用包名称启动与我的应用程序不同的应用程序

android - Android Studio 1.3 中实验性 Gradle 构建工具的 lintOptions

android - 没有标题的自定义对话框弄乱了我的布局

android - glGetAttribLocation 在我的一个属性上返回 -1

opengl-es-2.0 - 哪些 OpenGL ES 2.0 纹理格式可进行颜色、深度或模板渲染?

android - MVVM+Kotlin+数据绑定(bind)最佳实践

linux - OpenGL ES 2 控制台帧缓冲区光标

ios - OpenGL Es 2.0 GLKit 绘制像素