【问题标题】:Android Andengine poor texture qualityAndroid Andengine 纹理质量差
【发布时间】:2011-10-03 17:34:46
【问题描述】:

问题:使用 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);
}

【问题讨论】:

    标签: android textures andengine


    【解决方案1】:

    如果有人遇到 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】:

      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 方法中。

      【讨论】:

      • 你知道如何在新的andengine中使用GLES2解决这个问题吗?
      • 有谁知道如何在动态壁纸扩展中更改渲染模式?也就是说,在 BaseLiveWallpaperService 的实例中。
      【解决方案3】:

      我遇到了同样的问题,通过启用抖动解决了

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多