Android Andengine质地质量差

时间:2011-10-03 17:34:46

标签: android textures andengine

问题:使用Andengine(包装opengl)编写的Android应用程序的纹理质量很差,特别是在渐变显示为少数颜色的步骤。真实和虚拟设备上出现问题

设置:默认纹理,全屏,原生分辨率,android 2.2。 我试图用:

强制执行PixelFromat
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    Window window = getWindow();
    window.setFormat(PixelFormat.RGBA_8888);
}

没有任何区别。

评论线: GLHelper.disableDither(pGL);对纹理有一点帮助,但是粒子看起来很糟糕,所以猜测它不是问题的根源。

示例加载代码:

public static void loadResources(StreamgameActivity game) {
    magnetTexture = new BitmapTextureAtlas(512, 512, TextureOptions.BILINEAR);
    magnetTextureRegion = BitmapTextureAtlasTextureRegionFactory
       .createFromAsset(magnetTexture, game,"bateria128CMatte_none.png", 0, 0);
    game.getEngine().getTextureManager().loadTexture(magnetTexture);
}

3 个答案:

答案 0 :(得分:2)

Andengine似乎使用默认的16位渲染模式。要改变我所做的:

this.mRenderSurfaceView = new RenderSurfaceView(this);
mRenderSurfaceView.setEGLConfigChooser(8,8,8,8,0,0);//!!
mRenderSurfaceView.setRenderer(mEngine);
mRenderSurfaceView.getHolder().setFormat(PixelFormat.RGBA_8888);//!!
onSetContentView方法中的

答案 1 :(得分:2)

如果某人的纹理质量较差,GLES2的条带是这里的解决方案: 只需覆盖你的Sprite的preDraw()并启用这样的抖动:

Sprite electricityOff = new Sprite(0, 0, mElectricityOffTextureRegion, getVertexBufferObjectManager()) {
    @Override
    protected void preDraw(GLState pGLState, Camera pCamera) {
        super.preDraw(pGLState, pCamera);
        pGLState.enableDither();
    }
};

关键元素是pGLState.enableDither();。 您将需要其他任何内容,但如果您想确保可以添加的表面和活动的32位渲染:

@Override
protected void onSetContentView() {
    mRenderSurfaceView = new RenderSurfaceView(this);
    mRenderSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 24, 0);
    mRenderSurfaceView.setRenderer(mEngine, this);
    mRenderSurfaceView.getHolder().setFormat(PixelFormat.RGBA_8888);

    this.setContentView(mRenderSurfaceView, BaseGameActivity.createSurfaceViewLayoutParams());
}


@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    Window window = getWindow();
    window.setFormat(PixelFormat.RGBA_8888);
}

答案 2 :(得分:0)

我有同样的问题,通过启用Dithering

修复
EngineOptions options;
//..........
options.getRenderOptions().setDithering(true);