我的意思是,如果我想为纹理使用位图,我应该确保这个位图尽可能小以便从纹理中节省内存吗? (当然,我在创建纹理后扔掉了Bitmap)。或者我可以使用512x512 bmp和OpenGL自动制作基于较小尺寸的纹理(因为它只是在突破游戏中成为一个球)?
因为我可以想象,如果它将用于多种分辨率,从ldpi手机到平板电脑(Android ......),需要花费大量时间来确定位图的完美尺寸。或者我必须为同一图像创建不同大小的图像,如512,256,128。 。 。 ?
答案 0 :(得分:1)
你在谈论mip-map生成吗? http://www.swiftless.com/tutorials/opengl/mipmap_generation.html
此页面为您提供了有关如何使用glu库在计算机应用程序中生成mipmap的一般示例。我真的不太了解android(仍然),但当然如果你不告诉opengl这样做,opengl将不会使用mip map。 使用mipmap可以提高性能和渲染质量。 在512x512像素图像的ram mipmap中,没有太多内存。 您将使用最大级别加载512x512,256x256,128x128,64x64,32x32,16x16,8x8,4x4,1x1的相同图像,但您可以选择仅保存前3或4级。由于ram的数量呈指数级下降,所以你添加的级别越多,更高的级别将只消耗一些字节的内存。
另见此问题http://www.gamedev.net/topic/611182-android-and-mipmaps/
答案 1 :(得分:1)
OpenGL纹理与您创建的纹理一样大(例如,使用glTexImage2D
)。如果要从位图创建纹理,可以使纹理与位图一样大,也可以自己以某种方式缩放位图数据。 OpenGL应该如何自动知道应用程序的最佳纹理大小,不要为你缩小它,这当然是你的工作。
如果你真的在谈论自动mipmap生成,那么这是可能的,你应该看看Salvatore的答案。但是,如果你真的谈到OpenGL选择纹理的“最佳”尺寸并使用完全不同尺寸的图像初始化其数据,那么这绝对不可能。