0

我可以使用 OpenGL 在 OpenGL 中打开/关闭深度测试,glEnable( GL_DEPTH_TEST ); 但这会打开/关闭整个绘图调用的测试。

我想在每个片段的基础上控制测试。

这是为了达到以下效果:在棋盘模式中,图元的一半像素可能被遮挡,但另一半总是被绘制,即使帧缓冲区中存在更接近于相机。

为了说明,请看这个例子,其中只有一半的金字塔像素可能被前面的框遮挡。

请注意,首先绘制红色框,并且在绘制绿色金字塔时已经在帧缓冲区中。

另请注意:我将最后绘制带有特殊深度测试的对象,因此不会发生先绘制红色框的情况。

出于我的目的,以这种方式绘制的所有对象都是凸的,并且永远不会遮挡自身。

效果图

我知道如何在我的片段着色器中获得棋盘图案:

                float xm2 = mod( gl_FragCoord.x, 2.0 );
                float ym2 = mod( gl_FragCoord.y, 2.0 );
                if ( int(xm2) != int(ym2) )
                        discard;

但就我而言,我不想在每个片段的基础上完全丢弃,我只想在每个片段的基础上切换深度测试。

我的目标是 OpenGL-ES 3.0。

4

1 回答 1

0

这很容易通过绘制(红色)网格两次来实现:

  • 首先正常绘制它,所有片段,启用深度测试。
  • 接下来再次绘制它,不进行深度测试,并丢弃一半的片段。

@derhass 的评论提示了该解决方案。

于 2020-11-07T23:37:15.783 回答