将立方体变形为球体

时间:2015-06-26 18:34:53

标签: ios scenekit morphing

这是来自apple的文档的图片。它们显示从立方体到球体的变换以及一些随机几何体。 enter image description here

他们只说了几行:

  

可以从场景文件或加载变形器及其目标几何   以编程方式创建。基础几何体和所有目标几何体   必须在拓扑上相同 - 也就是说,它们必须包含相同的内容   顶点的数量和结构排列。

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

2 个答案:

答案 0 :(得分:1)

“拓扑相同”意味着必须保留网格中顶点之间的关系,但它们在空间中的位置可能会发生变化。以下是2D中的示例:

rect mesh enter image description here

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

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

如果要将框变形为球体,则需要生成具有相同拓扑的自己的框和球体。 Apple插图中的“一些随机形状”暗示了你如何做到这一点 - 它似乎是superellipsoid的变体之一。如果您在维基百科页面中使用方程式,则可以根据其他参数生成一组可以在球体上或立方体上的点。改变这些参数以生成几个网格,从这些网格中创建SCNGeometry,并且您已获得有效的SCNMorpher目标。

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

答案 1 :(得分:1)

您无法设定给定图像中每个顶点的位置;立方体不一定有八个,而最左边的立方体没有6个。

不可否认,我没有使用过SCNMorpher,但是根据该描述,我想它会在每个顶点的基础上进行插值(所以它们必须匹配)。

如果它有所帮助,请将球体描绘为有很多点?'沿其表面均匀分布,并推动或挤压其他表面