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

and*_*ndy 5 android texture2d vertex-shader opengl-es-2.0

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

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

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

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

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

安德烈亚斯

kea*_*ine 3

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

请参考 GLSL ES规范8.7节纹理查找函数

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