【问题标题】:Model Blur at the corner when rotate in opengl在opengl中旋转时模型在角落模糊
【发布时间】:2013-08-11 08:13:06
【问题描述】:

我是 Android 中 OpenGL 的新手。我正在制作一个使用 OpenGL 库的应用程序。当我从手指手势旋转 3D 对象时,模型边框变得模糊。请帮助我为什么模型边界在旋转和移动时模糊。

private class Renderer implements GLSurfaceView.Renderer {
    public Renderer() {
        setEGLConfigChooser(8, 8, 8, 8, 16, 0);
        getHolder().setFormat(PixelFormat.TRANSLUCENT);
    }

    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        gl.glClearColor(0.0f,0.0f,0.0f, 0.0f);
        gl.glEnable(GL10.GL_DEPTH_TEST);
        gl.glDepthFunc(GL10.GL_LEQUAL);
        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);

        gl.glEnable(GL10.GL_TEXTURE_2D);
        gl.glShadeModel(GL10.GL_SMOOTH);

        build_grid(GRID_SIZE);

        if(mModel != null)
            mModel.bindTextures(mContext, gl);
    }

    public void onSurfaceChanged(GL10 gl, int w, int h) {
        mViewWidth = (float)w;
        mViewHeight = (float)h;
        gl.glViewport(0,0,w,h);

        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        GLU.gluPerspective(gl, 60.0f, mViewWidth/mViewHeight, 0.1f, 100f);

        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
    }

    public void onDrawFrame(GL10 gl) {
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
        gl.glPushMatrix();

        //position camera
        GLU.gluLookAt(gl, mCamera.x,mCamera.y,mCamera.z, mOrigin.x,mOrigin.y,mOrigin.z, 0f,1f,0f);

        //draw_grid
        draw_grid(gl);

        //draw_model
        gl.glPushMatrix();

        gl.glTranslatef(mOrigin.x, mOrigin.y, 2);
        gl.glRotatef(mRotate.x, 1f, 0f, 0f);
        gl.glRotatef(mRotate.y, 0f, 1f, 0f);
        gl.glRotatef(mRotate.z, 0f, 0f, 1f);

        if(mModel != null)
            mModel.draw(gl);
        gl.glPopMatrix();
        gl.glPopMatrix();

        if(isPictureTake) {
            IntBuffer ib=IntBuffer.wrap(b);
            ib.position(0);
            gl.glReadPixels(x, 0, w, y+h, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ib);
            createBitmapFromGLSurface(context);
            isPictureTake = false;
        }
    }

提前致谢。

【问题讨论】:

  • 当您说“模糊”时,您的意思是“锯齿状”吗? IE。你是在说那张图片中白色多边形的边界吗?
  • 白色多边形的边界越来越模糊..
  • 也许,你说的是混叠而不是模糊?
  • @Max 你是对的...请帮我解决它..

标签: android opengl-es


【解决方案1】:

您看到的是jagged (not blurred) lines because of aliasing。避免这种类型的别名的一种方法是使用Multi-Sample Anti-Aliasing (MSAA)。您是否可以轻松使用它取决于 GPU 上对 MSAA(或 Tegra 的 CSAA)的支持,但我相信大多数现代设备都会支持它。也有手动实现这一点的方法,但这将是一项更重要的工作。

要启用它,您必须选择支持多重采样的EGL frame buffer configuration。我认为config chooser that is used in libgdx 会为您提供您所需要的:您指定所需的 MSAA 样本数量(和颜色深度),它会尝试匹配尽可能接近该规范的配置。

【讨论】:

    猜你喜欢
    • 2021-06-24
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多