OpenGL:使用2500 * 2500像素的纹理是否可以接受?

时间:2010-08-18 13:11:14

标签: c++ memory opengl textures

当然,纹理在屏幕上不会完全可见。我可以让它总是只绘制可见部分(使用glTexCoord2f然后glVertex2f)。 (这是一个很大的“水平” - 图像,我必须四处移动才能使用滑动相机)。请注意,此渲染必须在我的游戏中是实时的(游戏是用C++编写的)。

简短计算:

2,500 * 2,500 = 6,250,000 pixels
6,250,000 pixels * 4 bytes / pixel = 25,000,000 bytes
25,000,000 bytes = 23.8 MiB

那么,23.8 MiB对于跨平台的商业游戏来说是不是很重要?知道人们可以拥有各种图形卡。

2 个答案:

答案 0 :(得分:3)

这对于一个纹理来说很重要。如果视频卡有足够的内存来保存它(至少32MB,那就是你的游戏中没有别的东西!128MB实际上更合理),不应该是一个太大的问题,但如果没有那么只要它在屏幕上,系统就必须将每个位推送到视频卡。这可能导致大幅放缓。

如果你可以让纹理更小,我强烈推荐它。如果可能的话,因为它不会立刻全部可见,你可以尝试将其分解成几个部分 - 只有可见部分必须在视频内存中,这意味着如果你在右边分解它会占用更少的内存地方。

答案 1 :(得分:1)

我相信支持SM3的卡可以保证4Kx4K纹理的效果(但无法找到确认)。

支持DX10的卡可以保证8Kx8k纹理的效果。

正如其他人所说,两种纹理的力量应该是首选。

最后但并非最不重要的是,最大尺寸不仅与使用的内存有关,而且直接影响硬件处理纹理坐标的精度。从DX10开始,例如要求您可以访问高达6位的子纹素精度,硬件必须处理纹理坐标,格式可以解决19 = 13(对于8k纹素)+6位(对于子纹素寻址)(忽略重复包装模式)目前)。