我有一个场景渲染,我正在进行一些仅在屏幕的一部分上进行的后期处理。我使用球体来切割"切割"该地区,但我得到了#34;完整的"球体,而我需要" AND"切割球体内的表面。这有点难以解释,但希望以下两个模型有所帮助。让我们说场景是蓝色的,绿色的球体是模板网格。右图显示了生成的模板。
所以......我怎么能这样做?目前我做的是这样的事情:
GL.Enable(EnableCap.DepthTest);
GL.ColorMask(false, false, false, false);
GL.CullFace(CullFaceMode.Front);
GL.Enable(EnableCap.StencilTest);
GL.Clear(ClearBufferMask.StencilBufferBit);
GL.StencilFunc(StencilFunction.Always, 1, 1);
GL.StencilOp(StencilOp.Incr, StencilOp.Incr, StencilOp.Incr);
Resources.R.StencilMesh.Render();
GL.StencilFunc(StencilFunction.Equal, 1, 1);
GL.StencilOp(StencilOp.Keep, StencilOp.Keep, StencilOp.Keep);
然而,这会产生一个带有完整球体的模板缓冲区,而我只想要留在球体内的表面。
答案 0 :(得分:1)
如果我理解正确,那么在你第一次打电话给glStencilOp时,我认为你的参数错误。
这三项行动分别是:
由于你的模板测试总是通过,我们可以忽略#1,但如果你只想在模板缓冲区中绘制球体将被绘制的位置(并且没有填充深度缓冲区遮挡的区域),应该不增加情况#2中的模板缓冲区。
所以我会尝试:
GL.StencilFunc(StencilFunction.Always, 1, 1);
GL.StencilOp(StencilOp.Keep, StencilOp.Keep, StencilOp.Incr);
Resources.R.StencilMesh.Render();