Android系统.AndEngine.使用透明度的图像工件

Tar*_*ras 1 android opengl-es andengine

我正在使用AndEngine(基于2D OpenGL的引擎).当我使用具有透明度的纹理(PNG图像)时,我在图像上的边框上有图像伪像.我需要帮助解决这个问题.我附上了2张图片.首先,我只使用某种字体显示文本.在第二个,您可以看到圆角,但在纹理的角落,您也可以看到工件.请注意,这仅在REAL设备上发生.在模拟器上一切都OK.我的设备是三星i5700 Galaxy Spica运行Android 2.1
角落与神器http://i44.tinypic.com/2crttlx.png 文本与神器http://i39.tinypic.com/10r4yn9.png

ron*_*ron 10

AndEngine Artifacts的大社区维基

精灵瑕疵

BILINEAR过滤内插最近的四个像素的颜色,这使得纹理在缩放/旋转时很好,或者用非整数值移动,但是有一些困难.

黑色或暗线神器

纹理图集背景可能是黑色的,并且texregion的边缘像素与此背景混合.使用自定义透明纹理图集,或使用修改后的TextureAtlas构建器填充透明度(TODO查找论坛链接,如下所述)

精灵边缘有不需要的alpha

如果纹理背景是透明的,则alpha仍然会混合为边缘颜色.向纹理区域添加1像素的拉伸(在边缘处的额外行/列中重复边缘像素),并将区域边缘定位在原始边缘像素和添加的边缘像素之间.这将确保双线性插值仅选取您所在区域的像素.

其他边缘神器

如果纹理区域太靠近,则区域边缘可能从其他区域边缘获取一些像素.在纹理区域之间使用填充.

文字工件

基线下的Ocassional小垂直线(GLES1)

在我的字体中,Jchar有一个过度向左延伸的下曲线,在渲染I字母时会产生一个小的伪影,因为IJ它在纹理中彼此相邻,可能太近了.

尝试降低字体大小,增加纹理大小或黑客攻击更大的Font.PADDING值(5为我工作而不是1).但请注意,默认情况下,增加PADDING行间距也会增加,这可能是不可取的.YPADDING可以在必要时引入和使用新的补偿.

消失的信件

这些字母按需呈现给Font纹理图集.这可能会导致纹理图集上的空间不足,从而产生有趣的效果(请参阅Dissapearing ChangeableText).

一种解决方案是将此代码段插入到Font#createLetter(char)方法中:

    if (this.mCurrentTextureY + letterHeight > textureHeight) {
        throw new IllegalStateException("Could not allocate space for letter " + pCharacter + " on texture. " +
                "Please enlarge the texture atlas size. This would be letter #" + this.mLetterCount);
    }
Run Code Online (Sandbox Code Playgroud)


Tar*_*ras 5

我找到了解决方案.这些工件背后的原因是纹理过滤设置.我使用了TextureOptions.BILINEARTextureOptions.BILINEAR_PREMULTIPLYALPHA导致了这些工件.我选择了TextureOptions.DEFAULT,纹理变得清晰,没有任何文物.但是有一个缺点.我的游戏中有精彩的精灵运动.但是随着这种新的过滤设置(以及结果的纹理清晰度),精灵运动变得不顺畅......有点不稳定.需要使用不同的过滤选项创建几个TextureAtlases.