【问题标题】:How to mark only one vertex from every triangle in a Delaunay triangulation如何在 Delaunay 三角剖分中仅标记每个三角形的一个顶点
【发布时间】:2018-04-13 07:57:45
【问题描述】:

给定一个三角点数组int[][],每三个点代表一个三角形,我如何才能为每个三角形标记(识别)一个点,以便没有单个三角形标记的点超过一个。

我正在尝试为每个点添加一个 z 值,以便每个三角形只有一个点升高,而其他点的 z 值都为 0。我不想要任何扁平三角形的原因是那么我的光源对三角形几乎没有影响,因为法线角度总是朝向光线。

这是一个视频。鼠标光标代表上面的光源(忽略鼠标不影响照明的开头)。您会注意到一些三角形的颜色是恒定的,因为它的所有点的 z 值都是 0。

https://streamable.com/w5spi

我尝试在三角形的质心上添加一个点并创建三个新三角形,但它破坏了三角形间距的均匀性。

【问题讨论】:

    标签: javascript canvas 3d geometry triangulation


    【解决方案1】:

    由于 Delaunay 没有提供任何简单的生成深度的方法,我建议使用 Simplex noise 函数和 Delaunay 三角点的组合。

    通过这种方式,您可以将两者“映射”到彼此之上,从 Simplex 噪声函数中提取归一化 Delaunay 三角形点下方的值,并将其用于 Z/高程。


    原理:从Delaunay归一化三角形点,通过SN函数使用归一化的x/y位置提取Z。

    有许多用于 JavaScript 的 Simplex Noise implementations。值得注意的是,如果使用专利中描述的技术,3D 版本有一个patent attached。如果需要 3D,请参阅 OpenSimplex noise 以获取替代方案 - npm - 在这种情况下,2D 版本可能就足够了。

    【讨论】:

    • 谢谢,使用单纯形噪声似乎比仅仅为点分配随机整数产生更自然的 z 值。我最终使用了open-simplex-noise
    猜你喜欢
    • 1970-01-01
    • 2020-08-05
    • 2016-02-08
    • 2014-01-21
    • 1970-01-01
    • 2015-01-07
    • 2012-03-04
    • 2021-05-27
    • 2010-12-23
    相关资源
    最近更新 更多