OpenGL - проблема с glClipPlanef в Android - PullRequest
2 голосов
/ 07 декабря 2011

Я пытаюсь обрезать 3D-модель в 3 плоскостях XY, YZ и ZX.Когда я использую GL11.GL_CLIP_PLANE0, он работает, но GL11.GL_CLIP_PLANE1 и GL11.GL_CLIP_PLANE2 не работают.Ява код, который я использую, вставлен ниже.Он работает нормально с Android версии 2.2, но не работает в версиях выше 2.2.Если кто-то знает причину, пожалуйста, напишите.

enableSectionPlane(GL10 gl)
{
    GL11 gl11 = (GL11) gl;

    if( is_XY_plane)
    {

        float eqn1[] =  { 0.0f, 0.0f, 1.0f,0.0f };
        gl.glEnable( GL11.GL_CLIP_PLANE0);
        gl11.glClipPlanef( GL11.GL_CLIP_PLANE0, eqn1,0 );

    }
    else
    {
        gl.glDisable( GL11.GL_CLIP_PLANE0 );
    }


    if( is_YZ_plane)
    {
        float eqn2[] = { 1.0f, 0.0f, 0.0f,0.0f };           
        gl.glEnable( GL11.GL_CLIP_PLANE1);
        gl11.glClipPlanef( GL11.GL_CLIP_PLANE1, eqn2,0);
    }
    else
    {
        gl.glDisable( GL11.GL_CLIP_PLANE1 );
    }

    if(is_ZX_plane)
    {
        float eqn3[] = { 0.0f, 1.0f, 0.0f,0.0f };
        gl.glEnable( GL11.GL_CLIP_PLANE2 );
        gl11.glClipPlanef( GL11.GL_CLIP_PLANE2, eqn3,0 );
    }
    else
    {
        gl.glDisable( GL11.GL_CLIP_PLANE2 );
    }


}

1 Ответ

2 голосов
/ 07 декабря 2011

Используйте glGet() и GL_MAX_CLIP_PLANES, чтобы дважды проверить, что ваша реализация GL поддерживает более одной плоскости отсечения.glGet() документы говорят, что должны поддерживать как минимум 6.

...