我可以使用 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。