OpenGL ES 2.0:在顶点着色器中是否存在缺少纹理访问的解决方法?

时间:2013-01-22 16:12:29

标签: android opengl-es-2.0 texture2d vertex-shader

我目前正在尝试使用Android的OpenGL ES 2.0进行游戏。我的地图是一个二维网格地图,每个位置都有一个高度值。现在我想在纹理中存储每个坐标的高度,以在顶点着色器中进行高度查找。

这个想法的好处是我可以生成一个通用三角网并将其(带偏移)放在用户当前正在查看的地图位置上。由于偏移,我可以省略每次用户移动其视图位置和我将从纹理读取的高度轮廓时创建新三角网的需要。

现在存在许多当前Android设备(甚至是Galaxy S3)不支持顶点着色器中的纹理查找的问题。可悲的是,这完全破坏了我目前的做法。

我的问题:是否有其他可能从顶点着色器中的图形卡内存中获取数据?如果不直接指定每个顶点的数据,每次用户更改视图位置时,会强制我(据我所知)重新创建高度贴图。 (每次用户更改视图位置时创建高度图都会变慢...)

感谢您的帮助+最好的问候,

安德烈亚斯

1 个答案:

答案 0 :(得分:2)

texture2DLod()函数用于在顶点着色器中进行纹理查找。

请参阅GLSL ES specs 8.7纹理查找功能部分。

根据 andy 的评论,在使用GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS之前不要忘记检查texture2DLod()。如果不支持顶点纹理查找,则应该回退到没有此功能的另一个着色器。