OpenGL-android中glClipPlanef的问题

Posted

技术标签:

【中文标题】OpenGL-android中glClipPlanef的问题【英文标题】:OpenGL- issue with glClipPlanef in android 【发布时间】:2011-12-07 04:30:49 【问题描述】:

我正在尝试在 3 个平面 XY、YZ 和 ZX 中剪辑 3D 模型。当我使用 GL11.GL_CLIP_PLANE0 它工作但 GL11.GL_CLIP_PLANE1 和 GL11.GL_CLIP_PLANE2 不工作。我正在使用的 java 代码粘贴在下面。它适用于 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 );
    



【问题讨论】:

怎么不工作了?是否进行了任何剪辑? 只有在我们使用 GL11.GL_CLIP_PLANE0 即第一个条件 (is_XY_Plane) 的情况下才进行剪切。其余条件根本不剪辑。如果我们在其他两个条件中使用 GL11.GL_CLIP_PLANE0 而不是 GL11.GL_CLIP_PLANE1 和 GL11.GL_CLIP_PLANE2 ,则剪裁完成。但我的要求是在 3 个平面上同时剪辑 【参考方案1】:

使用glGet()GL_MAX_CLIP_PLANES 仔细检查您的GL 实现是否支持多个剪切平面。 glGet() docs 说它应该支持至少 6 个。

【讨论】:

我检查了一下,得到的值为 1。

以上是关于OpenGL-android中glClipPlanef的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何创建与当前投影矩阵匹配的 glClipPlanes?

Opengl glclipdistance vs glclipplane

OpenGL隐藏世界的一部分

OpenGL ES 2.0中的剪切平面

ppwjs之前端达人

新版测试中