使用 SceneKit 的实时连续动画
Real time continuous animation with SceneKit
我希望能够将动画实时应用到 SCNNode。
基本上,我有一个节点,我想不断地向它输入角度并让它近乎实时地进行动画处理。我试过 runActions:
var action1:SCNAction = SCNAction.rotateByX(CGFloat(45 / 180.0 * M_PI), y: 0.0, z: 0.0, duration: 0.5);
但是动作的问题是,如果我在同一个节点上有一个动作流,它只会为最新的动作设置动画,你不能让它为多个动作设置动画。然后我 运行 跨序列,但是序列是一个静态数组,所以它们不能实时动态填充。
所以我的问题是有没有人知道用流数据为 scnnode 设置动画的方法。它不一定是实时的,但那会很好
您试过简单地设置旋转吗?如果每帧有足够的数据,它应该尽可能平滑。这就是我用于 VR 的东西。
否则,您可以使用 lerp()
函数,该函数在 Unity 中非常流行。我不认为这是 Scenekit 内置的,但我们可以使用 GLKVector4Lerp。这是一个 Objective-C 示例:
- (void)renderer:(id <SCNSceneRenderer>)aRenderer updateAtTime:(NSTimeInterval)time
{
yourNode.rotation = GLKVector4Lerp(yourNode.rotation, newRotation, (float)time);
}
这样就可以连续发送数据,节点会顺畅跟随,不会跳转
我希望能够将动画实时应用到 SCNNode。 基本上,我有一个节点,我想不断地向它输入角度并让它近乎实时地进行动画处理。我试过 runActions:
var action1:SCNAction = SCNAction.rotateByX(CGFloat(45 / 180.0 * M_PI), y: 0.0, z: 0.0, duration: 0.5);
但是动作的问题是,如果我在同一个节点上有一个动作流,它只会为最新的动作设置动画,你不能让它为多个动作设置动画。然后我 运行 跨序列,但是序列是一个静态数组,所以它们不能实时动态填充。
所以我的问题是有没有人知道用流数据为 scnnode 设置动画的方法。它不一定是实时的,但那会很好
您试过简单地设置旋转吗?如果每帧有足够的数据,它应该尽可能平滑。这就是我用于 VR 的东西。
否则,您可以使用 lerp()
函数,该函数在 Unity 中非常流行。我不认为这是 Scenekit 内置的,但我们可以使用 GLKVector4Lerp。这是一个 Objective-C 示例:
- (void)renderer:(id <SCNSceneRenderer>)aRenderer updateAtTime:(NSTimeInterval)time
{
yourNode.rotation = GLKVector4Lerp(yourNode.rotation, newRotation, (float)time);
}
这样就可以连续发送数据,节点会顺畅跟随,不会跳转