将立方体变成球体

morphing a cube into sphere

这是苹果文档中的图片。它们显示了从立方体到球体以及一些随机几何体的变换。

他们只写了几行:

A morpher and its target geometries may be loaded from a scene file or created programmatically. The base geometry and all target geometries must be topologically identical—that is, they must contain the same number and structural arrangement of vertices.

谁能解释一下这一段,因为显然我不明白。 由于球体永远不会具有与立方体相同的顶点结构排列(至少我是这么认为的),因此不可能进行变换。但是,嘿,我们都在图片中看到了它。我也尝试过转型,但没有得到预期的结果。那么你如何从球体到立方体,反之亦然?

"Topologically identical" 意味着必须保留网格中顶点之间的关系,但它们在 space 中的位置可以更改。这是一个二维示例:

这两个网格具有相同的八个顶点,以相同的方式相互连接,但它们的位置(以及它们形成的形状)不同。

要使用 SceneKit 在 3D 中执行相同的操作,您需要自定义顶点数据 — SceneKit 可以为您生成的原始形状(如 SCNSphereSCNBox 等)都有不同的拓扑结构,因此它们不能用作变形器目标。

如果您想将长方体变成球体,您需要生成自己的具有相同拓扑结构的长方体和球体。 Apple 插图中的 "some random shape" 暗示了您可以如何做到这一点——它似乎是 superellipsoid 的变体之一。如果您使用该维基百科页面中的方程式,您可以生成一组点,这些点可以位于球体或立方体上,具体取决于其他参数。改变这些参数以生成几个网格,从这些网格创建 SCNGeometry,然后您就得到了有效的 SCNMorpher 个目标。

您可以在 Apple 的 SceneKit WWDC 2014 Slides 示例应用程序中看到一个更简单的变形示例。

您不能推测给定图像中每个顶点的位置;立方体不一定有 8 个,最左边的也不一定有 6 个。

诚然,我没有玩过 SCNMorpher 但根据该描述,我想它会在每个顶点的基础上进行插值(因此它们必须匹配)。

如果有帮助,请将球体想象成有很多 'dots' 沿其表面均匀分布,这些被推或挤压以形成其他表面