gpt4 book ai didi

c++ - 使用边缘检测计算三角几何中的顶点法线

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:23:03 25 4
gpt4 key购买 nike

Most efficient algorithm to calculate vertex normals from set of triangles for Gouraud shading 没有重复项,因为没有讨论边缘检测问题。

如何通过计算计算三角几何体中每个顶点的法线,以便在 Gouraud 着色器中使用以获得漂亮的显示效果,同时跟踪边缘?是否有免费、快速和高性能的标准解决方案?

我被分配了上述任务来修复产生可见人工制品的例程。法线应该是简单的 Gouraud 着色器的输入数据,以“平滑”相干面上显示的几何体。该例程还应该能够找到边缘,以便它们以后可以被软件的其他部分使用,而不是被“平滑”。

数据是从不包含任何法线信息的 .STL 文件中读取的,因此必须使用三角形坐标计算所有面法线。

这是没有插值的几何图形:

enter image description here

到目前为止,这是插值算法所做的:

enter image description here

圆形平面看起来很好,但在找到的靠近平坦表面的边缘强度不足以触发边缘检测算法,但也不够弱到不可见的地方,插值严重失败。结果是错误放置的法线传播到整个三角形。

我想知道是否有针对此问题的标准解决方案,因为在处理此类几何体时应该经常出现此问题。即使没有,你们中是否有人知道此任务的常见问题以及如何避免这些问题以获得不错的结果?

如有任何帮助,我们将不胜感激!

编辑:关于算法:边缘检测不仅仅是关于三角形法线。请考虑以下示例(问题在 3D 中基本相同):

Triangle normal angle edge detection

所有顶点共享相同的角度,即 30°。 (角度不完全正确,但你明白了......)但是,只有外面的两个应该被识别为边缘,所以必须有另一个与这个问题相关的措施。到目前为止,我已经尝试了三角形的

  1. 外接圆半径
  2. 最长的边
  3. GTS triangle quality measure

可以修改两个三角形被认为共享一条边的“最小角度”。最长边的方法看起来最有前途(虽然远非完美),但我认为还有一些我忽略的东西......

最佳答案

有一份来自加州理工学院的关于此的公开出版物,以技术报告的形式,称为“Discrete Differential-Geometry Operators for Triangulated 2-Manifolds”。

那里提出的算法提出

a unified derivation that ensures accuracy and tight error bounds, leading to simple formulae that are straightforward to implement.

在报告中,算法用于曲率计算,但曲率计算涉及准确的平均曲率法线计算。此信息使您能够合并特征边缘检测 - 作者已将其用于噪声网格上的特征检测。此外,平均曲率法线可用于着色。

关于c++ - 使用边缘检测计算三角几何中的顶点法线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24026509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com