剖切(实心)几何

我正在寻找基于图像的(屏幕空间)技术,通过任意(实体)几何体来渲染截面。 我发现并研究了基于图像的CSG( Kirsch 05 / OpenCSG ),但是我发现这对我的情况可能有点矫枉过正,我只需要一个截面切割。

在这里输入图像说明

上面是一个在片段着色器中使用discard实现,但显然这不是中途的事情,因为我需要弥补差距。 有谁知道我可以使用的技术/黑客?

我假设你的意思是你想把帽子放在顶部。 不知道这是否仍然是首选的方法,但您可以使用模具剪裁平面。 这里就是一个例子。

另一种方法可能是首先仅使用背面渲染对象。 问题是你的几何在角上有对角的前脸,这可能会造成伪影,因为他们会渲染背面的颜色。 这就是说,如果你可以从你的几何中删除这些神器前脸,它应该工作。 用这种方法你可能会看到的唯一的大问题是边缘上的抗锯齿伪像,这取决于你的AA技术。

为了消除由平面切割产生的间隙,假设其他几何closures,你应该能够用深度缓冲区来完成。

  • 深度缓冲区包含渲染切割几何体后的正面深度。
  • 渲染背面(使用倒置剔除模式),从而只select在间隙上出现的像素。
  • 使用平面法线代替插值顶点法线进行照明。
  • 在着色器中生成平面纹理坐标和/或像素位置:
    • 获取视图空间位置,从(0,0,0)到此视图空间平面相交光线,得到像素视图空间位置。
    • 将该位置转换回世界空间(通过将其与逆视matrix相乘)。
    • 从世界空间位置和平面切线之间的点积中产生坐标(可以任意select,只要它们相距90度,平面正常)。

至于那些内部三角形,如果它们重叠(正面和背面),一些深度偏差就足以去除它们。 否则,我建议删除他们一些其他的方式。