我正在使用OpenGL制作蠕虫式位图可破坏地形游戏。我想知道在视频内存方面的限制对于世界的大小。OpenGL:纹理大小和视频内存
目前,我为地形使用512 * 512 RGBA纹理块。
- 多少内存,非常粗略地说,我可以期待这样的512 * 512 RGBA纹理占用多少?
- 是否有任何内部自动压缩?
- 我希望大多数用户的电脑有多少视频内存可以免费使用?
我正在使用OpenGL制作蠕虫式位图可破坏地形游戏。我想知道在视频内存方面的限制对于世界的大小。OpenGL:纹理大小和视频内存
目前,我为地形使用512 * 512 RGBA纹理块。
随着32位色(4个字节),你获得4 * 512 * 512 = 1 MB
见这对于纹理压缩:http://www.oldunreal.com/editing/s3tc/ARB_texture_compression.pdf
我不会担心非常多。即使是8192 * 2048的世界(4个屏幕宽,2个屏幕高,这对于蠕虫风格的游戏来说非常大),您只需要8 * 2 * 4 = 64Mb(添加mipmap,其他纹理,帧缓冲)界限。就我所知,即使是较老的GPU也有这种内存(我们没有谈论GeForce4卡,对吧?)。
旧的GPU可能会限制每个纹理可能有多大,但由于您已将您的世界分割为512x512块,因此这不会成为问题。
如果视频内存成为问题,您可以允许用户使用半角大小的纹理(即将世界缩减到4096 * 1024和256x256的缝隙),并根据需要提取新的/丢弃未使用的区域。
我可以期待这样一个512 * 512 RGBA纹理占用多少内存,非常粗略?
没有足够的信息。你应该总是使用大小OpenGL image formats(GL_RGBA ,GL_RGBA )。
GL_RGBA8每个像素占用32位,这是4个字节。因此,512 * 512 * 4 = 1MB。
是否有任何内部自动压缩正在进行?
号
我有多少视频内存可以预期大部分用户的计算机上有免费的吗?
您目前使用多少?
OpenGL将根据可用空间将图像数据导入和导出。如果用完GPU内存,OpenGL会很乐意分配系统内存并根据需要上传图像。
但说实话,你的小蠕虫游戏并不会在内存大小方面花费任何东西。上手时,可能会有64MB。没什么需要关注的。
内存要求很大程度上取决于您。您需要选择一条合理的线(即64Mb)并尝试适合它。 – Kromster
再次,这取决于你的引擎,但如果我是你,我会做到这一点:
由于您的地形纹理很可能会重复使用一些马赛克状纹理,和你需要知道像素是否存在,或者被破坏,那么鉴于您使用的拼图纹理不大于256x256,您肯定可以用GL_RG16内部格式(其中每个组件都是您需要映射的纹理坐标[0,255] - > [0.0 ,1.0],并且你会保留一些特殊的值来表明地形被破坏),使得每个512x512块占用0.5MB。 虽然它做临时工增加一个额外的字节来表示地形的存在,但3个字节格式将不缓存太好
不,512x512的纹理RGBA(以及每通道字节)会导致4x512x512 = 1MB – Bart
APPR。 4 * 512 * 512 * 1.33与MIPMAPS – epatel
您一定意味着32-bpp(或8-bpc)。 –