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

标签 ios objective-c xcode scenekit scnnode

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

我用 SCNShape 和 UIBezierPath 画圆。缩放圆圈没有帮助,因为轮廓宽度也会发生变化。每帧更改我的 SCNNode 的 SCNGeometry proprty 的成本非常高,我从中得到 100% 的 CPU 使用率,所以这也不起作用。

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

最佳答案

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

1。使用粒子系统

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

2。 BYO粒子系统

如果 SCNParticleSystem 不符合要求,您可以大致按照它的要求做 — 绘制广告牌 Sprite 并调整它们的大小。使用 SCNLookAtConstraint 将平面面向观察者,将圆形纹理映射到其上,并为包含节点的 scale 设置动画。

3。使用参数化几何

制作一个SCNCylinderSCNSphere 并对其进行变换,使圆形横截面朝向相机。 (如果这很重要,请在其他维度上展平它。)要使其增长,请为节点的 scale 设置动画。

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

关于ios - SceneKit - 在任何比例下绘制具有相等线宽的缩放圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29477300/

相关文章:

iphone - 按钮触发另一个 View

ios - 从 Apple 服务器获取日期和时间

ios - 查看旧导航栏和选项卡栏 Controller 的 Controller 问题

iphone - iOS将字符串发送到JSON服务器

iphone - Objective-C - 检查 URL 是否存在

iphone - 当我打开 iPhone 3G 时,应用程序第二次在闪屏中崩溃

ios - 如何为 UIbutton 提供约束

iOS 10 - AVPlayer 在播放视频时显示黑屏

ios - iPad 上的工具栏未填满整个宽度

iphone - 隐藏导航栏的标题