是否知道允许这种图像的算法的算法?


9

有没有人知道如何在给定一组特定点(3D数组)的情况下创建一种能够使图片像图片中一样的图形的算法

在此处输入图片说明


4
这是一件事情,这是您想要的东西吗:blog.andreaskahler.com/2009/06/…–
卢克·圣安东尼奥·比阿莱基

3
@LukeSanAntonio发布该答案,以便我可以对其进行投票;)(但不仅限于链接,对于该算法的一些最小解释也将是一个答案)
yannis

1
@YannisRizos,我会的,但是我对此没有任何知识或经验,因此我无法给您适当的解释(我可以,但是其他人可以做得更好)我知道链接的唯一原因是因为我从Blender知道了形状的名称(wiki.blender.org/index.php/Doc:2.4/Manual/Modeling/Meshes / ...
路加·圣安东尼奥·比阿莱基

每天都要通过3D对象创建阴影,检查阴影贴图阴影量,但还有更多可用的阴影创建算法
棘手怪胎

这不是我要创建的阴影,而是物理对象。我们将对其进行3D打印。
user88794

Answers:


5

战斗结束后来到这里,但是由于还没有公认的答案,并且看到@Luke拒绝获得他应得的代表,因此这里简要概述了他提供的链接。

因此,完整的算法在这里可用:

http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html

想法是使用一种简单的方法来引导网格,该方法将为您提供一个包含20个面的球体,然后对其进行优化直到满意为止。

引导形状

您从二十面体开始。如维基百科文章所述,您可以通过绘制三个相同且正交的矩形来获得顶点。您有3个矩形,每个矩形4个角-> 12个顶点。

维基百科插图:

二十面体

例如,Z个平面点是(a,b是矩形长度):

  • (+ a,+ b,0)
  • (-a,+ b,0)
  • (+ a,-b,0)
  • (-a,-b,0)

现在您仍然必须找到20张面孔。这留给读者练习:p

细化形状

现在您已经有了一个基本的球体,您可能想要添加多边形。您可以使用以下简单算法进行操作:

for each iteration:
    # each iteration multiplies by 4 the number of faces
    for each edge at the current iteration:
        split the edge in two
        replace the middle point on the sphere

为了找到中间点,我们假设我们希望创建单位球体(中心(0,0,0),半径1)。

middlePoint(p1, p2):
    middle = Point((p1.X + p2.X / 2), # same for y, z)
    radius = sqrt(middle.X^2, middle.Y^2, middle.Z^2)
    return Point(middle.X / radius,  # same for y, z)

在每次迭代中,我们可能都必须重建这些面孔,但这很容易。每张脸分为四个:

细化脸

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.