【问题标题】:Skybox OpenGL ES2.0天空盒 OpenGL ES2.0
【发布时间】:2015-07-31 11:56:21
【问题描述】:

我正在我的 OpenGL 应用程序中实现 Skybox。

one这样使用单个纹理并使用UV映射拉出六个面是否更常见。

或者更常见的是使用this 网站提供的东西为六个面中的每一个使用一个纹理。

使用一种纹理对我来说的好处是可以通过不使用不必要的纹理单元来节省开销。然而,这里的牺牲显然是图像分辨率。如果您使用单个 2048x2048 纹理,则天空盒的每一侧只有 512x512 像素可供使用。每边的一个纹理使可用像素增加四倍......

有什么见解吗?

【问题讨论】:

    标签: android opengl-es


    【解决方案1】:

    像这样使用单一纹理并使用 UV 是否更常见? 映射拉出六面

    建议使用单个纹理,因为它会减少状态切换的数量,从而在大多数情况下产生更好的性能。将多个纹理合并到一个大纹理中称为“纹理图集”https://en.wikipedia.org/wiki/Texture_atlas,并在很多应用程序中使用,以减少单独纹理的数量。

    如果您使用单个 2048x2048 纹理显示天空盒的每一侧 只有 512x512 像素可供使用。每一面都有一个纹理 使可用像素翻两番......

    这并不是真正的争论,因为您可以将六个 2048x2048 纹理组合成一个大纹理。

    我个人对环境贴图的建议(天空盒也是环境贴图)是使用立方体贴图https://www.opengl.org/wiki/Cubemap_Texture。使用立方体贴图,您可以结合两种优点(只有一个纹理绑定 + 简单的纹理坐标),并且立方体贴图有更多用途,例如简单的反射。

    【讨论】:

    • 对可以绑定的纹理大小没有限制吗?我在手机上知道它是 4096x4096。我会研究立方体贴图。
    • 是的,有一个特定于设备的最大纹理大小。由于在一个 4096x4096 中组合六个 2048x2048 是一项非常困难的任务,因此您需要在此处使用立方体贴图或 3D 纹理。但是在移动设备上使用巨型纹理之前,如果真的有必要,您真的需要三思而后行,因为内存带宽在许多应用程序中是瓶颈,并且可能会真正影响您的性能。
    • 我一直在研究立方体贴图。对于 Android,您似乎需要使用 glTexImage2D 调用,这需要您传递所有像素数据。而在我使用 texImage2D 之前,它只是一个指向位图对象的指针。这似乎是内存密集型...
    • 得到它的工作谢谢。购买/下载高分辨率预制天空盒的地方有什么线索吗?
    猜你喜欢
    • 2012-11-09
    • 2020-02-29
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 2014-03-11
    • 1970-01-01
    相关资源
    最近更新 更多