Анимация заикания в iPhone OpenGL ES, хотя fps высока - PullRequest
1 голос
/ 25 апреля 2010

Я создаю 2d приложение OpenGL es. Для iPad оно отображает текстуру фона и множество текстур поверх него, которые всегда находятся в движении.

В каждом кадре их местоположение пересчитывается на основе дельты времени и скорости, и вся вещь успешно воспроизводится со скоростью 60 кадров в секунду, но, тем не менее, по мере того, как скорость движения спрайтов увеличивается, вещь выглядит заикающейся.

Есть идеи? Есть ли наследственные проблемы с тем, что я делаю? Существуют ли известные шаблоны дизайна для плавной анимации?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2010

Если вы посмотрите на дельты времени, вы, вероятно, обнаружите, что они не очень последовательны от кадра к кадру. Вероятно, это не потому, что для рендеринга кадров требуется разное время, это просто артефакт пакетной, конвейерной природы драйвера GLES.

Попробуйте вместо этого использовать какое-то скользящее среднее из дельт времени: http://en.wikipedia.org/wiki/Moving_average

Обратите внимание, что хотя наблюдаемые в вашем приложении дельты времени не очень согласованы, тот факт, что вы получаете 60 кадров в секунду, подразумевает, что кадры, вероятно, отображаются через определенные промежутки времени (я предполагаю, один кадр на дисплей v-sync). Это означает, что задержка между вашим приложением, выполняющим вызовы GL, и результирующий кадр, отображаемый на дисплее, меняется. Именно это изменение вы пытаетесь скрыть с помощью скользящего среднего.

0 голосов
/ 29 июня 2010

Попробуйте вычислить дельту времени как среднее из последних N кадров, поскольку некоторые кадры могут занимать больше времени, чем другие. Используете ли вы дельта времени для анимации? Это очень важно использовать! Также попробуйте загрузить все ресурсы во время загрузки, а не загружать их при использовании. Это также может замедлить некоторые кадры.

...