SceneKit - 在任何比例下绘制具有相等线宽的圆形

时间:2015-04-06 18:33:02

标签: ios objective-c xcode scenekit scnnode

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

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

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

2 个答案:

答案 0 :(得分:2)

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

1。使用粒子系统

每秒绘制数百个圆圈听起来很像particle system,特别是如果它们的位置遵循特定模式。将particleImage设置为圆的位图(具有足够高的分辨率,以便在缩放时不会出现像素化),并使用property controller为大小设置动画。

2。 BYO粒子系统

如果SCNParticleSystem不适合该帐单,您可以大致完成它的工作 - 绘制广告牌精灵并调整其大小。使用SCNLookAtConstraint面向观察者的平面,将圆形纹理映射到其上,并为包含节点的scale设置动画。

3。使用参数化几何

制作SCNCylinderSCNSphere并对其进行转换,使圆形横截面朝向相机。 (如果重要的话,将其展平为其他维度。)为了使其增长,请为节点scale设置动画。

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

答案 1 :(得分:0)

这对聚会来说有点晚了,但是使用SCNGeometrySource和SCNGeometryElement还有另一种好方法。

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

如果要对其他人有用的话,我会做一个要点。

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