我的问题可能有点太广泛了,但我要提出这个概念。我如何像在“Cham Cham”应用程序中那样创建曲面
https://itunes.apple.com/il/app/cham-cham/id760567889?mt=8。
我在应用程序中完成了大部分工作,但是随着用户触摸表面的变化却大不相同。您可以更改其高度,并且它会增长和收缩。使用Sprite Kit如何做到这一点,背后的概念是什么,那里的任何人都可以解释一下。
谢谢
最佳答案
这是Cham Cham开发人员的答案:)
让我将解释分为不同的部分:
注意:由于该项目是在很早以前开始的,因此它是使用纯OpenGL实现的。 SpiteKit的实现可能有所不同,但您只需要将其映射到它即可。
定义地面
地面由一组点表示,这些点使用Hermite Spline进行插值。基本上,游戏使用一堆定义曲面的点,以及每个控件之间的一组点,如下所示:
红点是控制点,其间的均值使用有序的Hermite插值计算。中间的绿色点与它无关,但使整个外观看起来像胸部:)
您可以选择任意数量的步骤来使您的胸部看起来尽可能光滑,但这更多地取决于性能。
控制形状
您需要做的就是允许用户移动控制点(或在Cham Cham中控制点;您可以定义每个点可以移动的范围,等等)。重新计算插值会产生一个变化的形状,该形状在任何时候都保持平滑(假设您已经选择了足够的中间点)。
将事物纹理化
同样,取决于您如何应用纹理。在Cham Cham中,我们使用一种大纹理来保留背景图像,并在每次形状更改时重新计算纹理坐标。您可以尝试更复杂的算法,例如挤压纹理或发现合适的任何东西。
至于表面纹理(覆盖地面的表面-草,冰,沙等),您可以使用Triangle Strips,在表面的每个插值点处都放置“底部”顶点,并在其上凸出“顶部”顶点(通过使它们在该点的法线方向上相对于“底部”偏移)。
渲染
最简单的方法是利用一些tesselation库,例如libtess。它将把边界线(由内插点组成)隐蔽为一组三角形。它将保留纹理坐标,以便您可以将这些三角形仅馈送到渲染器。
SpriteKit注意事项
不幸的是,我对SpriteKit引擎并不十分熟悉,因此不能保证您能够一对一地复制想法,但是请随时对实现的挑战性方面发表评论,我将尽力提供帮助。
关于ios - 如何像“深湛”中创建 Sprite 表面,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23027143/