1

我想用 SceneKit 绘制缩放动画圆圈。圆圈应在一秒钟内将其半径从(可能)100 更改为 200。只能看到宽度为(随机值)五的圆的轮廓。

我用 SCNShape 和 UIBezierPath 绘制圆圈。缩放圆圈并没有帮助,因为轮廓宽度也会发生变化。每帧更改我的 SCNNode 的 SCNGeometry 属性非常昂贵,我从中获得 100% 的 CPU 使用率,所以这也不起作用。

有人知道最好的方法是什么吗?

4

2 回答 2

3

这里有很多选择。测试和分析一些,看看哪个可以在您想要的视觉效果和性能之间进行最佳权衡。

1.使用粒子系统

每秒绘制数百个圆圈听起来很像粒子系统,尤其是当它们的位置遵循特定模式时。将 设置particleImage为圆的位图(具有足够高的分辨率,在缩放时不会出现像素化),并使用属性控制器为大小设置动画。

2. BYO粒子系统

如果SCNParticleSystem不符合要求,您可以大致执行它的操作 - 绘制广告牌精灵并调整它们的大小。使用 将SCNLookAtConstraint平面朝向观察者,将圆形纹理映射到其上,并对scale包含节点的 进行动画处理。

3.使用参数几何

制作SCNCylinderSCNSphere变换它,使圆形横截面朝向相机。(如果重要的话,在其他维度上展平它。)为了让它成长,动画节点的scale.

要仅显示轮廓,请使用着色器修改器 - 在着色器代码中获得轮廓效果的一个好方法是测试视图方向和表面法线的点积,仅在它们几乎垂直时绘制轮廓颜色。

于 2015-04-06T19:23:45.787 回答
0

这有点晚了,但还有另一种使用 SCNGeometrySource 和 SCNGeometryElement 的好方法。

  1. 生成顶点
  2. 生成纹理坐标
  3. 生成索引
  4. 设置材料(图像、纯色等)
  5. 动画比例从 100 到 200

我做了一个课程的要点,以防它对其他人有用。

https://gist.github.com/kemalenver/79523e5606f62c5958fcf5e9bedc48a5

于 2019-09-06T03:39:17.867 回答