我想实现一个Maya插件(此问题独立于Maya)来创建3D Voronoi模式,例如



我只知道我必须从点采样(我实现了本文所述的自适应泊松采样算法)。

我认为,从这些方面出发,我应该使用Voronoi(我尝试使用(Python)scipy.spatial.Voronoi)创建网格的3D线,但结果与我预期的有所不同)。

我想念什么吗?任何人都可以建议我必须使用合适的管道和算法来创建这种模式吗? (如此处所示):

vor = Voronoi(points)
for vpair in vor.ridge_vertices:
    for i in range(len(vpair) - 1):
        if all(x >= 0 for x in vpair):
            v0 = vor.vertices[vpair[i]]
            v1 = vor.vertices[vpair[i+1]]
            create_line(v0.tolist(), v1.tolist())


灰色顶点是采样点(原始形状是简单的球体):


这里是更复杂的形状(手臂)


评论

感谢您的答复。我将复制我的工作并按照建议发布屏幕。无论如何,这个问题的最终目的不是调试我的代码,而是要了解我在做什么是正确的,还是在两者之间缺少其他步骤!
根据建议添加了示例!

泊松采样的点是正确的。生成它们的算法已经过全面的单元测试,并且您在屏幕上看到的是在采样点中心居中的球体,我是在调用Voronoi(points)之前以编程方式创建的!我担心我没有遵循正确的路径,或者我以错误的方式处理Voronoi结果

您显示的图像在2d功能上完成了voronoi。

@joojaa从示例图像中,我希望2D表面上的Voronoi单元边缘是必需的(给出连接球体表面上点的线段的集合,而不是3D中给出的平面截面的集合) 。但是,scipy.spatial.Voronoi似乎是为N维空间而不是嵌入其中的表面设计的。我无法立即看到如何将其用于约束到2D曲面的3D点。

#1 楼

http://www.cs.sandia.gov/~samitch/papers/vor_final.pdf在任何编程语言中都没有计算机算法,但是您应该能够通过一些Plane Reflections和来自该语言的算法轻松地进行复制。以上链接。

评论


$ \ begingroup $
欢迎使用ComputerGraphics.SE!通常在独立的Stack Exchange上做出答案是个好主意(例如,如果链接断开了,并且通常情况下,这样人们就不必跟随链接就能知道答案是否对他们有用)。您可能希望通过包含本文内容的简短摘要来改善答案。
$ \ endgroup $
–马丁·恩德(Martin Ender)
16-10-13在21:22