Opengl es OpenglES alpha纹理深度

Opengl es OpenglES alpha纹理深度,opengl-es,Opengl Es,缺陷图像改变深度-z, crown的透明区域现在工作正常 我如何才能正确地看到bug的背后?您需要: 对精灵进行排序,使其在不进行深度测试的情况下从后向前渲染,并仅依靠混合来提供透明度 向片段着色器添加alpha测试,以删除透明的片段(例如,如果(alpha

缺陷图像改变深度-z, crown的透明区域现在工作正常

我如何才能正确地看到bug的背后?

您需要:

  • 对精灵进行排序,使其在不进行深度测试的情况下从后向前渲染,并仅依靠混合来提供透明度
  • 向片段着色器添加alpha测试,以删除透明的片段(例如,如果(alpha<0.05)丢弃;,根据需要调整透明度阈值)

  • 谢谢你的第二个答案很有效。首先是我想避免它
    glClear( GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT );
    
    glUseProgram(_program);
    GLKVector2 poz= { 0, 0};
    if (_Sprite2)
    {
        float aspect = ( GLfloat ) _screenWidth/ ( GLfloat ) _screenHeight;
        [self esMatrixLoadIdentity : &perspective];
        [self esPerspective:&perspective pos_fovy:60.0f pos_aspect:aspect  pos_nearZ:1.0f pos_farZ:30.0f];
    
    
        [self esMatrixLoadIdentity : &modelview];
        [self esTranslate : &modelview trans_x:0.0f trans_y:-0.5f trans_z:-5 ];
        [self esRotate : &modelview gl_angle:0.0f _x:1.0 _y:0.0 _z:1.0];
        [self esMatrixMultiply :&mvpMatrix src_A:&modelview src_B:&perspective];
    
        glUniformMatrix4fv ( mvpLoc, 1, GL_FALSE, (GLfloat*) &mvpMatrix.m[0][0] );
    
        [_Sprite2 update : poz];
        [_Sprite2 draw];
    }/// crown
    
    if(_sprite)//bug
    {
        float aspect = ( GLfloat ) _screenWidth/ ( GLfloat ) _screenHeight;
        [self esMatrixLoadIdentity : &perspective];
        [self esPerspective:&perspective pos_fovy:60.0f pos_aspect:aspect  pos_nearZ:1.0f pos_farZ:30.0f];
    
        [self esMatrixLoadIdentity : &modelview];
        [self esTranslate : &modelview trans_x:0.0f trans_y:0.0f trans_z:_zPoz + _zPoz_2];
        [self esRotate : &modelview gl_angle:0.0f _x:1.0 _y:0.0 _z:1.0];
    
        [self esMatrixMultiply :&mvpMatrix src_A:&modelview src_B:&perspective];
    
        glUniformMatrix4fv ( mvpLoc, 1, GL_FALSE, (GLfloat*) &mvpMatrix.m[0][0] );
    
        [_sprite update : poz];
        [_sprite draw];
    }