使用单通道线框渲染进行边缘检测

Edge detection with Single-Pass Wireframe Rendering

我想实现一个典型的CAD软件,因此需要一个边缘检测算法来绘制各种网格的轮廓。剪影包括各种物体的轮廓、脊线和折痕。这是在 Blender 中创建的立方体示例,其中轮廓由粗橙色线组成:

我想使用一种几何方法,在对象顶部绘制线框,并省略对角线等内部线条。描述了线框渲染 here。本文使用几何着色器绘制线框。 还解释说,必须设置每个顶点属性来决定是否应省略一行。

我的问题是:我如何决定必须省略哪些行?顺便说一句,我使用OpenGL作为渲染API。

编辑:澄清一下,我真的只想画构成轮廓的边,而不是任何对角线。这是我想要实现的示例:

考虑自由泳 https://www.blender.org/manual/en/render/freestyle/index.html

Freestyle is an edge- and line-based non-photorealistic (NPR) rendering >engine. It relies on mesh data and z-depth information to draw lines on >selected edge types. Various line styles can be added to produce >artistic (“hand drawn”, “painted”, etc.) or technical (hard line) looks.

我还没有使用过它,但我打算尝试使用它从 3d 模型创建线条图。

从你的示例图片我推断你想要增强

  • 剪影边缘,即属于投影轮廓的边缘,
  • 显着边缘,即连接两个倾斜面的边缘。

前者是通过观察面部的方向来确定的:当观察者在一半之外时,面部是"facing"-space它划定,反之。轮廓边是属于面对面和非面对面的边缘。请注意,这是一个依赖于查看器的 属性.

凸边是这样的,它连接两个面形成足够大的角度,连接被认为是不光滑的。 (角度阈值由您决定。)这是一个独立于查看器的 属性.