ios - 使用 SceneKit 进行实时连续动画

标签 ios objective-c xcode swift scenekit

我希望能够将动画实时应用到 SCNNode。 基本上,我有一个节点,我想连续输入它的角度并让它近乎实时地产生动画。我尝试过 runActions:

 var action1:SCNAction = SCNAction.rotateByX(CGFloat(45 / 180.0 * M_PI), y: 0.0, z: 0.0, duration: 0.5);

但 Action 的问题是,如果我在同一节点上有一系列 Action ,它只会对最新的 Action 进行动画处理,而不能让它对多个 Action 进行动画处理。然后我遇到了序列,但序列是静态数组,因此无法实时动态填充它们。

所以我的问题是,有谁知道如何使用流数据对 scnnode 进行动画处理。它不一定是实时的,但那就太好了

最佳答案

您是否尝试过简单地设置旋转?如果每帧有足够的数据,它应该尽可能平滑。这就是我在 VR 中使用的东西。

此外,您可以使用 Unity 中非常流行的 lerp() 函数来执行此操作。我不认为这是在 Scenekit 中内置的,但我们可以使用 GLKVector4Lerp 。这是一个 Objective-C 示例:

- (void)renderer:(id <SCNSceneRenderer>)aRenderer updateAtTime:(NSTimeInterval)time
{
    yourNode.rotation = GLKVector4Lerp(yourNode.rotation, newRotation, (float)time);      
}

这样就可以连续发送数据,节点会平滑跟随,不会跳转。

关于ios - 使用 SceneKit 进行实时连续动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29064217/

相关文章:

ios - UIView BOOL 的奇怪行为

ios - 无法同时显示两个 CorePlot 图

iphone - 如何在 iPhone 中裁剪图像

ios - 以编程方式旋转 UIScrollView 内容

ios - 在Facebook iOS中预填充评论字段

iOS JSON 解析返回 null

ios - Swift - 单击按钮后重新启动动画

objective-c - 如何使用dispatch_async_f?

ios - 如何将整个 XCode 项目切换到之前的提交

ios - Xcode中的子项目有什么意义?