为什么OpenGL-ES调整大小的图像看起来像素化?

时间:2012-05-28 19:51:08

标签: android opengl-es

我正在使用OpenGL ES为Android开发相当简单的2D游戏。我希望它几乎可以在市场上的任何设备上运行。我面临的问题是,当我映射我使用的纹理时。如果我要映射的图像的大小与其目标对象的大小不同,则图像质量会降低(即使图像的大小大于对象),也会得到像素化。我想要非常清晰的图像,接收它们的唯一方法是使用纹理和具有相同尺寸的对象。但在这种情况下,我需要4,5个纹理代表具有不同尺寸的相同图像,以支持足够的屏幕分辨率。我正在使用PNG图像和以下GL方法:

glClear(GL10.GL_COLOR_BUFFER_BIT);
glEnable(GL10.GL_TEXTURE_2D);
glEnable(GL10.GL_BLEND);
glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
//drawing happens here
glDisable(GL10.GL_BLEND);

创建如此多的图片对我来说没有问题,但游戏的大小会变得更大。我做错了什么,或者只是OpenGL无法调整像Photoshop这样的图像?

1 个答案:

答案 0 :(得分:4)

您是否尝试过其他采样选项,例如GL_NEAREST或GL_LINEAR? (见glTexParameteri)。

我不认为这是opengl的错误,但是当你显示的纹理不是原始分辨率(或者是它的偶数倍)时,总会有一些精确度的损失(因为图像必须是在非像素边界重新采样)。 GL_LINEAR可以减轻一些像素化的外观,以免造成轻微模糊,这可能是也可能不是明显的。