所以我在玩opengl的时候遇到了一个小问题。我希望能够一次性使用大量(超过15k)的小(128x128)2D纹理(在一次绘制调用中)。问题是我不知道如何有效地做到这一点。以下是我目前发现的方法和它们的问题:
1.据我所知,多个纹理的标准解决方案是GL_TEXTURE_2D_ARRAY,但它通常没有一个足够大的最大尺寸
1.作为一个替代方案,我可以使用GL_TEXTURE_3D,它通常有一个更大的允许深度,但是,正如我所理解的,我将不得不手动生成mipmap(或者甚至根本不使用它们?),如果有数千个图层,由于浮点错误,图层之间可能会有颜色溢出
1.我可以尝试使用一个GL_TEXTURE_2D_ARRAY的纹理Map集,但我也必须考虑如何解决mipmapping或 Package 问题以及颜色出血。如果有一个更好的方法,请有人推荐一个更好的方法,或者说我概述的哪一个更好,如果我忽略了什么?
1条答案
按热度按时间hpcdzsge1#
如果有人有同样的问题,我会跟进一下。
我选择尝试问题中概述的第三个选项(使用TEXTURE_2D_ARRAY,其中每个层都是在启动时从单独的纹理生成的纹理Map集),并且确实可以确认,虽然不是理想的并且有些不合常规,但它至少是有效的。此外,虽然将纹理Map集阵列当作单个Map集使用是不寻常的,纹理Map本身是非常好的实践和容易研究的。
到目前为止,我总共只使用了几个纹理进行了测试,但是,理论上,使用一个典型的8192x8192x2048 2D纹理数组,我可以拥有多达800万个128x128纹理(当然,由于VRAM的限制,实际数量会少得多)