Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 单程线框渲染的边缘检测_Opengl_Edge Detection - Fatal编程技术网

Opengl 单程线框渲染的边缘检测

Opengl 单程线框渲染的边缘检测,opengl,edge-detection,Opengl,Edge Detection,我想实现一个典型的CAD软件,因此需要一个边缘检测算法来绘制各种网格的轮廓。轮廓包括各种物体的轮廓、脊线和折痕。以下是在Blender中创建的立方体示例,其中轮廓由粗橙色线条构成: 我想使用一种几何方法,在对象的顶部绘制线框,并省略像对角线这样的内线。描述了线框渲染。在本文中,几何体着色器用于绘制线框。 还解释了必须设置逐顶点属性来决定是否应省略线 我的问题是:我如何决定我必须省略哪些行?顺便说一下,我使用OpenGL作为渲染API 编辑:为了澄清,我真的想只画构成轮廓的边,而不是任何对角线。

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

我想使用一种几何方法,在对象的顶部绘制线框,并省略像对角线这样的内线。描述了线框渲染。在本文中,几何体着色器用于绘制线框。 还解释了必须设置逐顶点属性来决定是否应省略线

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

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

考虑自由泳

Freestyle是一个基于边和线的非真实照片级(NPR)渲染>引擎。它依赖网格数据和z深度信息在>选定边类型上绘制线。可以添加各种线条样式以产生>艺术(“手绘”、“彩绘”等)或技术(硬线条)外观


我还没有用过它,但我计划尝试一下从3d模型创建线条图。

从您的示例图片中,我推断您希望增强

  • 轮廓边缘,即属于投影轮廓的边缘
  • 凸边,即连接两个有角度的面的凸边
前者是通过观察面的方向来确定的:当观察者在其划定的半空间之外时,面是“面向”的,反之亦然。轮廓边是属于正面和非正面的边。请注意,这是一个依赖于查看器的属性


凸边连接两个面,形成足够大的角度,认为连接不光滑。(角度阈值由您决定。)这是独立于观众的属性。

“轮廓包括各种物体的轮廓、脊线和折痕。”这不是。考虑到Nicol Bolas所说的,这是事实,我认为你要寻找的是:只有当连接到边的两个三角形的法线不相同时,边才应该是可见的。这是真的吗?因为这可以通过点积很容易地计算出来,只要你有两条连接的三角形法线。现在,你的描述变得模糊了,所以当你决定显示一条直线时,你可能需要考虑一个模糊的阈值,允许球和曲线也“无边”。JEP假设是正确的行波管。那么您知道是否可以在几何体着色器中比较三角形法线吗?或者我必须对三角形进行预处理,并标记所有具有相同法线方向的边,因此不应进行渲染?这两种方法都可以工作,我猜cpu上的预标记对于cad程序来说足够快。在geo着色器中执行此操作要优雅得多,但也要困难得多。不幸的是,我帮不了你,因为我对他们了解不多。我认为在geo着色器中获取邻接数据并不容易,这可能是一个主要障碍。不过,这应该是一个很常见的问题,只需谷歌搜索一下。此外,当您回复评论时,请尝试引用用户,否则他们不会收到通知。祝你好运。我会试试的,谢谢你!谢谢,但是我如何使用它来实现我自己的边缘检测着色器呢?这是正确的。我不确定如何确定轮廓边缘,即如何检测边缘是否属于正面和非正面。我会用谷歌搜索的。谢谢大家!@enne87建立具有向外指向法线的面平面方程,并插入观察者的坐标。如果你成功了,最好在你的答案中插入一个结果。