gpt4 book ai didi

ios - 在 OpenGL ES 中绘制一个非常高分辨率的纹理对象(球体)

转载 作者:技术小花猫 更新时间:2023-10-29 11:08:50 26 4
gpt4 key购买 nike

我在 OpenGL ES 中绘制行星,遇到了一些有趣的性能问题。普遍的问题是:如何最好地在球体上渲染“非常详细”的纹理?

(球体是有保证的;我对球体特定的优化很感兴趣)

基本案例:

  • 窗口大约是。 2048 x 1536(例如 iPad3)
  • 地球的纹理贴图为 24,000 x 12,000 像素(美国一半大小的区域适合整个屏幕宽度)
  • Globe 显示在从放大(美国全屏)到缩小(整个地球可见)的所有位置
  • 我至少需要 3 个纹理层(1 个用于行星表面,1 个用于昼夜差异,1 个用于用户界面(突出显示不同区域)
  • 一些图层是动画的(即它们必须在运行时快速加载和删除它们的纹理)

限制:

  • 高端平板电脑仅限于 4096x4096 纹理
  • 高端平板电脑限制为 8 个同步纹理单元

问题:

  • 总共有 5 亿像素的纹理数据
  • 拆分成较小的纹理效果不佳,因为设备只有 8 个单元;只有一个纹理层,我可以分成 8 个纹理单元,所有纹理都将小于 4096x4096 - 但这只允许一个层
  • 将图层渲染为单独的几何体效果不佳,因为它们需要使用片段着色器进行混合

...目前,我唯一觉得可行的想法是:

  1. 将球体分成 NxM 个“球体”并将每个球体渲染为单独的几何体
  2. 在缩小时使用 mipmap 渲染低分辨率纹理
  3. ...依靠简单的剔除在放大时切掉大部分纹理,并在无法剔除时使用 mipmaping 来使用较小的(呃)纹理

...但似乎应该有更简单的方法/更好的选择?

最佳答案

似乎没有办法在移动 GPU 的内存中容纳如此巨大的纹理,即使是在 iPad 3 中也是如此。

所以你必须流式传输纹理数据。您需要的东西称为clipmap(由具有扩展的巨型纹理技术的 id 软件推广)。

请在这里阅读相关内容,这里有描述技术的文档链接:http://en.wikipedia.org/wiki/Clipmap

关于ios - 在 OpenGL ES 中绘制一个非常高分辨率的纹理对象(球体),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15732082/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com