2012-05-28 46 views
1

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

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一样的图像?

回答

4

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

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

+0

谢谢你,我正在使用GL_NEAREST,现在我把它改成了GL_LINEAR,一切都很完美,非常感谢 – mjekov