我在OpenGL ES中绘制行星,并遇到一些有趣的性能问题。一般的问题是:如何最好地呈现"非常详细"球体上的纹理?
(球体有保证;我对球体特定的优化感兴趣)
基本情况:
限制:
问题:
...目前,我认为唯一可行的想法是:
......但似乎应该有更简单的方法/更好的选择?
答案 0 :(得分:0)
似乎没有办法在移动GPU的内存中安装如此巨大的纹理,甚至进入iPad 3。
所以你必须传输纹理数据。你需要的东西叫做 clipmap (由扩展的megatexture技术的id软件推广)。
请在此处阅读此文档,其中包含描述技术的文档链接:http://en.wikipedia.org/wiki/Clipmap
答案 1 :(得分:0)
这在ES中并不容易,因为还没有虚拟纹理扩展。您基本上需要实现虚拟纹理(某些ES设备实现ARB_texture_array)并以尽可能低的分辨率(视图相关)为您的球体进行流式传输。这样,可以在片段着色器中完成所有操作,不需要几何细分。有关如何实施此操作的详细信息,请参阅this presentation(和论文)。
如果进行数学计算,则无法实时传输1 GB(24,000 x 12,000像素x 4 B)。这也是浪费,因为用户永远不会同时看到它。