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

时间:2017-11-01 02:41:19

标签: javascript canvas 3d geometry triangulation

给定一组三角点int[][],以便每三个点代表一个三角形,我如何为每个三角形标记(识别)一个点,这样就不会有任何单个三角形标记多个点。

我正在尝试为每个点添加一个z值,这样每个三角形只有一个点升高,而其他点的z值都为0.我不想要任何平面三角形的原因是因为然后我的光源对三角形几乎没有影响,因为法线角度始终面向光线。

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

https://streamable.com/w5spi

我试过在三角形的质心上添加一个点并创建三个新的三角形,但它与三角形间距的均匀性相混淆。

1 个答案:

答案 0 :(得分:2)

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

这样你可以"映射"两个在彼此之上,从Simplex噪声函数中提取归一化Delaunay三角形点下面的值,并将其用于Z /高程。

Illustration
原理:从Delaunay标准化三角形点,使用标准化的x / y位置通过SN函数提取Z.

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