这不是一个直接的答案,但我不能直接回答,因为你一次问了很多问题。我将尽力为您提供有关相关主题的尽可能多的信息。
以下是您的注意事项列表,可让您重新思考您的优先事项是什么以及您希望如何执行它们。
首先,根据我的经验(!!),使用纹理数组比使用纹理图集容易得多,并且性能大致相同。纹理数组完全按照您的想法执行,您可以根据变量名称和索引在着色器中对它们进行采样,而不仅仅是名称(即:mytexarray[0])。一大缺点包括数组中所有纹理的纹理大小相同,优点是:子纹理的轻松索引和一次绘制调用中的绑定。
其次,始终使用 2 的幂。我不知道最近的一些系统是否允许完全没有问题的非 2 纹理,但是(再次根据我的经验)最好在任何地方使用 2 的幂。我在 500*500 纹理中遇到的问题之一是在绘制带纹理的四边形时出现黑线,这些黑线正好是填充到最接近的 2 次幂所需的大小(x 和 y 上的 12 个像素)。因此,即使在最近的硬件上,OpenGL 也会在一定程度上为您制造这个问题。
第三(这甚至是英语吗?),关于大小。你所有的问题似乎都是处理图像、纹理。您可能想查看纹理缓冲区,它们允许将大量数据流式传输到您的 GC,并且比纹理更容易更新(这允许 LOD 贴图系统)。如果您使用纹理但只需要以颜色表示其中的数据,而不是直接用颜色表示,这将非常好。
最后你可能想看看“纹理飞溅”,这是一种在不增加数据的情况下增加细节的方法。我不知道你在做什么,所以我不知道你是否可以使用它,但它很简单,并且在游戏行业中被大量使用。您可以创建一组随处使用的纹理(岩石、沙子、草等),并创建一个大纹理来跟踪哪个较小的纹理应用在何处。
我希望我在这里写的至少一件事能帮助你,祝你好运!
PS:openGL 纹理大小限制取决于用户的显卡,因此请注意大于 2048*2048 的大小,即使您的计算机运行良好,其他人也可能会遇到严重问题。安全值最大为 1024*1024。
PSS:请原谅任何语法错误,如果需要请要求澄清。另外,这是我的第一个答案,请原谅我缺乏协议。