在OpenGL中利用核心动画进行动画制作

时间:2010-03-06 02:18:41

标签: iphone opengl-es core-animation

我有兴趣使用Core Animation在iPhone上的OpenGL场景中驱动自定义动画。我希望找到一种机制,允许您为每个动画节拍一般为NSObject的键路径或委托方法设置动画。我想出的是为CALayer的任意属性设置动画并从OpenGL中调查它们以确定动画的进展。但是,我确信有更好的方法可以做到这一点。什么是最干净,最安全的方式来利用这个伟大的动画引擎?

4 个答案:

答案 0 :(得分:3)

我怀疑你真正想要的只是核心动画使用的缓动函数。这些很容易通过一点谷歌搜索找到。这是一个例子:

GLfloat bounceEaseOut(GLfloat ratio) {
    if (ratio < 1.0f/2.75f) {
        return 7.5625f*ratio*ratio;
    } else if (ratio < 2.0f/2.75f) {
        return 7.5625f*(ratio-=1.5f/2.75f)*ratio+0.75f;
    } else if (ratio < 2.5f/2.75f) {
        return 7.5625f*(ratio-=2.25f/2.75f)*ratio+0.9375f;
    } else {
        return 7.5625f*(ratio-=2.625f/2.75f)*ratio+0.984375f;
    }
}

你传入你的补间有多远(elapsedTime / tweenDuration),它告诉你应该通过补间的“时间轴”的百分之几。

答案 1 :(得分:1)

我正在尝试做类似的事情,在CA动画期间根据其在父级中的位置更新gl视图。我得到了类似的结果,波动的动画与CA动画不同步。我终于决定停止使用CA并完全使用不同的插值引擎。现在我正在使用PRTween。它工作得很好。我确定有一些缺点(你的动画在主线程上运行,界面不如CA好,而且它有点小错误)但我的动画运行顺畅。

答案 2 :(得分:0)

如果您想要为视图设置动画,请尝试阅读iPhone UIView Animation Best Practice。 对于OpenGL视图中的动画,最好使用动画模型或自定义代码,但不能使用Core Animation。

答案 3 :(得分:0)

这是可能的,使用Core Animation来驱动您想要的任何内容。我相信它也可以用于声音! (鉴于CALayer的一些小类)。 UIKit和Core Animation可以非常自由地混合使用,因为我们也可以使用CAEAGLLayer。

这里的关键是 - (id)presentationLayer和 - (id)modelLayer,用于使用纯/仅OpenGL;当然,甚至层次结构也可以用于您的OpenGL场景。但是,使用CALayer进行渲染也可以获得更多“免费”,如果这可以适用于您的情况(但也可以参见CATransformLayer),那么这就是您所寻求的! =)