在opengl中旋转时,模型在角落处模糊

时间:2013-08-11 08:13:06

标签: android opengl-es

我是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;
        }
    }

提前致谢。

Screenshot

1 个答案:

答案 0 :(得分:0)

您所看到的是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(和颜色深度)指定所需的样本数,并尝试尽可能匹配与该规范匹配的配置。