需要几何边缘/折痕检测方法

时间:2017-04-07 05:16:47

标签: algorithm opengl-es edge-detection

我正在尝试使用原始渲染样式(带有突出显示的边缘/折痕的纯色),这是我参与的开源游戏。世界几何图形相当简单,主要由块,金字塔组成,最终可能还有其他简单的体积,如圆柱体,圆锥体,其他类型的棱镜等。渲染将使用OpenGL ES 2完成。

我一直在试验边缘/折痕的边缘检测方法。看起来像基于着色器的边缘检测(我尝试了sobel滤波器和其他几种算法)对深度值和面法线最简单,但我无法得到好的结果,主要是由于深度的精度限制缓冲区和远处几何的复杂性,以及无法对边缘进行任何良好的抗锯齿处理。

我最终决定我需要几何渲染线条,这样我就可以让它们变得粗糙和平滑边缘等。我想在渲染之前以几何体定义编程方式生成线条,以提高运行时性能。我可以通过绘制主几何体,设置深度偏移,然后在几何体上绘制线条来获得我想要的大部分效果。但是,这种技术有一些缺点,如下所示:

重叠几何

可能有几个几何体重叠或相邻以形成更复杂的结构。如果有几件具有重叠/共面的面,我想在它们周围绘制轮廓,但不是围绕每个单独的部分,这样你就可以看到每个单独的部分。

当前结果最高;底部的理想结果:

overlap

折痕

此问题在上图中也可见,但下图也显示了我的目标。我想绘制重叠几何体中存在折痕的线条,以使它们更加突出。

当前结果最高;底部的理想结果:

creases

从目前为止我所知道的,对于重叠面问题,我想我需要在我的线和任何附近的交叉面之间进行相交测试,然后以某种方式打破线条并摆脱跨越其他面的线段。要在几何体之间的折痕中创建线条,我想我需要在形成折痕的两个面之间进行某种交叉测试。但是,我很难绕过这个步骤来逐步完成这个过程。同样,如果可能的话,我想在预渲染步骤中以编程方式设置这些行。任何指导都将非常感谢。

0 个答案:

没有答案