我想用 SceneKit 绘制缩放动画圆圈。圆圈的半径应在一秒钟内从(可能)100 变为 200。只能看到宽度为(随机值)五的圆的轮廓。
我用 SCNShape 和 UIBezierPath 画圆。缩放圆圈没有帮助,因为轮廓宽度也会发生变化。每帧更改我的 SCNNode 的 SCNGeometry proprty 的成本非常高,我从中得到 100% 的 CPU 使用率,所以这也不起作用。
有人知道最好的方法是什么吗?
最佳答案
这里有很多选项。对一些进行测试和剖析,看看哪个可以在您想要的视觉效果和性能之间取得最佳平衡。
1。使用粒子系统
每秒绘制数百个圆圈听起来很像 particle system ,特别是如果它们的放置遵循特定模式。将 particleImage
设置为圆的位图(分辨率足够高,缩放时不会出现像素化),并使用 property controller动画大小。
2。 BYO粒子系统
如果 SCNParticleSystem
不符合要求,您可以大致按照它的要求做 — 绘制广告牌 Sprite 并调整它们的大小。使用 SCNLookAtConstraint
将平面面向观察者,将圆形纹理映射到其上,并为包含节点的 scale
设置动画。
3。使用参数化几何
制作一个SCNCylinder
或SCNSphere
并对其进行变换,使圆形横截面朝向相机。 (如果这很重要,请在其他维度上展平它。)要使其增长,请为节点的 scale
设置动画。
要仅显示轮廓,请使用着色器修改器——在着色器代码中获得轮廓效果的一个好方法是测试 View 方向和表面法线的点积,仅在它们几乎垂直时绘制轮廓颜色.
关于ios - SceneKit - 在任何比例下绘制具有相等线宽的缩放圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29477300/