Усиление базовой анимации для анимации в OpenGL

Я интересуюсь использованием Базовой Анимации для управления пользовательскими анимациями в моей сцене OpenGL на iPhone. Я надеялся найти механизм, который позволил Вам в общем анимировать keypath NSObject или метода делегата для каждой галочки анимации. То, что я придумал, должно анимировать произвольное свойство CALayer и опросить их от OpenGL для определения прогрессии анимации. Однако я убежден, что существует лучший способ сделать это. Каков самый чистый, самый безопасный способ насладиться этим большим механизмом анимации?

8
задан genpfault 26 May 2011 в 15:51
поделиться

3 ответа

Если вы хотите анимировать сам вид, попробуйте прочитать iPhone UIView Animation Best Practice. Для анимации внутри OpenGL представления лучше использовать анимированные модели или пользовательский код, но не Core Animation.

0
ответ дан 6 December 2019 в 00:06
поделиться

Это возможно, использовать Core Animation для управления чем угодно. Я уверен, что его тоже можно использовать для звука! (Учитывая небольшой подкласс CALayer). UIKit и Core Animation можно смешивать довольно свободно, с небольшой осторожностью, поскольку есть CAEAGLLayer, с которым мы можем поиграть.

Ключевыми здесь являются - (id) presentationLayer и - (id) modelLayer для использования чистого / только OpenGL; конечно, даже иерархия может быть использована для вашей сцены OpenGL. Но использование CALayer для рендеринга также дает еще больше «бесплатно», если это возможно в ваших обстоятельствах (но также см. CATransformLayer), если это то, что вы ищете! =)

0
ответ дан 6 December 2019 в 00:06
поделиться

Я подозреваю, что на самом деле вам нужны только функции смягчения, используемые в основной анимации. Их достаточно легко найти, немного погуглив. Вот один из примеров:

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), и он говорит вам, какой процент пути по "временной шкале" твина вы должны пройти.

3
ответ дан 6 December 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: