【发布时间】:2013-01-22 16:12:29
【问题描述】:
我目前正在尝试一些带有 Android 的 OpenGL ES 2.0 游戏。我的地图是一个二维网格地图,每个位置都有一个高度值。现在我想将每个坐标的高度存储在纹理中,以便在顶点着色器中进行高度查找。
这个想法的好处是我可以生成一个通用的三角网并将它(带有偏移)放置在用户当前正在查看的地图的位置上。由于偏移,我可以省略每次用户移动其视图位置和我将从纹理中读取的高度轮廓时创建一个新三角网的需要。
现在存在的问题是许多当前的 Android 设备(甚至是 Galaxy S3)不支持顶点着色器中的纹理查找。可悲的是,这完全破坏了我目前的做法。
我的问题:在顶点着色器中是否还有其他可能从显卡内存中获取数据?在不直接指定每个顶点的数据的情况下,每次用户更改视图位置时,会迫使我(据我所知)重新创建高度图。 (每次用户更改视图位置时创建高度图会很慢......)
感谢您的帮助 + 最好的问候,
安德烈亚斯
【问题讨论】:
-
我自己没有尝试在顶点着色器中进行纹理查找,但文档指出; 纹理查找函数可用于顶点着色器和片段着色器。 OpenGL ES 着色语言规范 1.00 rev 17。
-
遗憾的是似乎有一个后门。请参阅此线程stackoverflow.com/questions/11398114/… 他们只是指定零 GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS。
-
我通过输入图像像素作为顶点数据来解决这个限制when doing RGB histogram generation on iOS,但这在这里没有太大帮助。在您的情况下,仅发送顶点数据而不是尝试根据高度图转换顶点会不会有那么大的损失?
标签: android opengl-es-2.0 texture2d vertex-shader