不使用着色器绘制隐形三角形openGL ES 2.0

时间:2014-08-07 14:52:37

标签: android opengl-es opengl-es-2.0

我想在OpenGL ES 3.0中绘制Invisible三角形。我认为制作Alpha通道Zero会做到这一点。 以下是我传递三角形顶点的方法:

在我的构造函数中,我正在使用初始化我的Triangle顶点:

final float[] triangle2VerticesData = {
            // X, Y, Z, 
            // R, G, B, A
            -0.5f, -0.25f, 0.0f, 
            1.0f, 1.0f, 0.0f, 0.0f,      // Alpha is zero

            0.5f, -0.25f, 0.0f, 
            0.0f, 1.0f, 1.0f, 0.0f,      // Alpha is zero

            0.0f, 0.559016994f, 0.0f, 
            1.0f, 0.0f, 1.0f, 0.0f};     // Alpha is zero

额外信息:

在onSurfaceCreated:

GLES20.glClearColor(0.5f, 0.5f, 0.5f, 0.5f);
// ... Creating and attaching shaders, creating veiw matrix using Lookat

在onDrawFrame中:

GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
// ... performaing simple rotation and passing MVP to shaders

在着色器中:

final String vertexShader =             “统一mat4 u_MVPMatrix; \ n”

      + "attribute vec4 a_Position;     \n"     
      + "attribute vec4 a_Color;        \n"                   

      + "varying vec4 v_Color;          \n"     

      + "void main()                    \n"     
      + "{                              \n"
      + "   v_Color = a_Color;          \n"      

      + "   gl_Position = u_MVPMatrix   \n"     
      + "               * a_Position;   \n"                                                                          
      + "}                              \n";        
    final String fragmentShader =
        "precision mediump float;       \n"     

      + "varying vec4 v_Color;          \n"               
      + "void main()                    \n"     
      + "{                              \n"
      + "   gl_FragColor = v_Color;     \n"               
      + "}    

我可以通过播放R G B值来改变三角形的颜色。 但是当A(Alpha)设置为1.0f或0.0f时,不会产生任何变速/不可变性吗? 任何人都可以告诉我我在哪里错了吗?

1 个答案:

答案 0 :(得分:1)

如果您希望三角形完全不可见,请不要渲染它。这是性能的最佳方法,并且有一点额外的逻辑,应该很容易实现。

如果您想要一些透明度,即不完全不可见,请务必启用混合。 (网上有很多关于如何进行混合的信息。在帖子中解释太多了。)

GLES20.glEnable(GLES20.GL_BLEND);
渲染透明对象后

GLES20.glDisable(GLES20.GL_BLEND);