0

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

提前致谢。

截屏

4

1 回答 1

0

由于 aliasing ,您看到的是锯齿状(不模糊)线条。避免这种类型的锯齿的一种方法是使用多样本抗锯齿 (MSAA)。您是否可以轻松使用它取决于 GPU 上对 MSAA(或 Tegra 的 CSAA)的支持,但我相信大多数现代设备都会支持它。也有手动实现这一点的方法,但这将是一项更重要的任务。

要启用它,您必须选择支持多重采样的EGL 帧缓冲区配置。我认为libgdx 中使用的配置选择器将为您提供您所需要的:您为 MSAA 指定所需的样本数量(和颜色深度),它会尝试匹配尽可能接近该规范的配置。

于 2013-08-13T03:03:41.667 回答