我想用SceneKit绘制缩放动画圆形。圆圈的半径应在一秒钟内从(可能)100变为200。人们只能看到宽度为(随机值)五的圆的轮廓。
我用SCNShape和UIBezierPath画圆。缩放圆没有帮助,因为轮廓宽度也会发生变化。每帧更改SCNNode的SCNGeometry比例是非常非常昂贵的,而且我从中获得了100%的CPU使用率,所以这也不起作用。
有人知道什么是最好的方法吗?
这里有很多选项。测试并评测一些,看看哪一个能在您想要的视觉效果和性能之间做出最佳折衷。
1.使用粒子系统
每秒绘制数百个圆听起来很像粒子系统,尤其是如果它们的放置遵循特定的模式。将particleImage
设置为圆的位图(分辨率足够高,缩放时不会出现像素化),并使用属性控制器设置大小的动画。
2.BYO粒子系统
如果SCNParticleSystem
不符合要求,您可以大致按照它的操作——绘制Billboard精灵并调整它们的大小。使用SCNLookAtConstraint
使平面面向查看器,将圆纹理映射到平面上,并设置包含节点的scale
的动画。
3.使用参数化几何图形
制作SCNCylinder
或SCNSphere
并对其进行变换,使圆形横截面朝向摄影机。(如果重要的话,可以在其他维度上展平它。)若要使它生长,请设置节点的scale
的动画。
要只显示轮廓,请使用着色器修改器——在着色器代码中获得轮廓效果的一个好方法是测试视图方向和曲面法线的点积,仅当它们几乎垂直时绘制轮廓颜色。
这对聚会来说有点晚了,但还有另一种使用SCNGeometrySource和SCNGeometryElement的好方法。
- 生成顶点
- 生成纹理坐标
- 生成索引
- 设置材料(图像、纯色等)
- 制作从100到200的比例动画
我做了一堂课的要点,以防对其他人有用。
https://gist.github.com/kemalenver/79523e5606f62c5958fcf5e9bedc48a5