问题:使用Andengine(包装opengl)编写的Android应用程序的纹理质量很差,特别是在渐变显示为少数颜色的步骤。真实和虚拟设备上出现问题
设置:默认纹理,全屏,原生分辨率,android 2.2。 我试图用:
强制执行PixelFromatpublic 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);
}
答案 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);