如何在 Delaunay 三角剖分中仅标记每个三角形的一个顶点

How to mark only one vertex from every triangle in a Delaunay triangulation

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

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

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

https://streamable.com/w5spi

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

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

这样您就可以 "map" 将两者重叠,从单纯形噪声函数中提取归一化 Delaunay 三角形点下方的值,并将其用于 Z/elevation。


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

有很多 Simplex Noise implementations out there for JavaScript. It's worth noting that the 3D version has a patent attached if using the techniques described within the patent. See OpenSimplex noise for an alternative if 3D is needed - npm - 不过在这种情况下,2D 版本可能就足够了。