Компьютерная анимация


Компьютерная анимация включает в себя постоянное изменение чего-то об объекте на экране. Это может быть его положение, цвет или даже общая форма (путем изменения нескольких точек сразу). В этой статье будут объяснены детали, связанные с созданием собственных анимаций в компьютерной программе.

Ключевой кадр

Любая анимация может быть разбита на части, так что анимация плавно переходит от одной к другой. Например, если вы пытаетесь оживить автомобиль, едущий по городской улице, вы можете разбить анимацию на прямое движение, повороты и паузы, когда автомобиль ждет на светофоре.

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

Анимации

Теперь, когда мы определили набор ключевых кадров, мы можем просто переключаться с одного на другой, но это приведет к очень резкой анимации. Мы можем сгладить анимацию, вычисляя промежуточные кадры, позиции которых интерпретируются на основе желаемого положения между двумя состояниями. Этот процесс называется "твининг" в индустрии анимации, слово является сокращенной формой "промежуточного" или вычисления кадров "между" двумя ключевыми кадрами.



Самый простой способ реализовать tweening - создать функцию, которая принимает 3 параметра: начальное значение, конечное значение и позицию. Позиция-это процент, представляющий, насколько близко значение находится к началу или концу. При 0% выходное значение находится точно в начальном значении; при 100% - точно в конечном значении; при 50% - точно в середине.

Простой расчет заключается в следующем, предполагая, что "позиция" - это значение от 0 до 1:
current=start*(1-position)+end * position
Другие пространства

Легко выполнить tweening в 2 или даже 3 измерениях – он просто включает вычисление между отдельно для каждого измерения. Это позволяет нам легко написать функцию tweening, которая поддерживает 2D или 3D точки, не прикладывая значительно больше усилий.

Функции синхронизации

Приведенная выше функция tweening является простой линейной анимацией. Однако мы можем использовать и другие функции – если мы хотим, чтобы анимация начиналась медленно, а затем ускорялась ближе к концу, мы можем использовать экспоненциальную функцию, а если мы хотим, чтобы 2-мерный объект двигался по кругу, мы можем использовать модифицированную форму уравнения круга. Это выходит за рамки данного руководства, но тем не менее является интересной темой.

Механика анимации

Как мы на самом деле оживляем что-то на экране? В своей основной форме анимация - это просто цикл, который:

  • вычисляет значения объектов на экране (путем увеличения параметра в упомянутой выше функции tweening)
  • рисует их, и
  • ожидает заданное количество времени (задержка) для того, чтобы установить время анимации
Частоту кадров анимации – или количество кадров в секунду - можно изменить, отрегулировав вышеупомянутую задержку; более высокая частота кадров (более низкая задержка) приведет к более плавной анимации, но требует большего от компьютера. Мы также должны компенсировать это, увеличив параметр tweening меньше, иначе анимация будет ускоряться и замедляться. Если мы удвоим частоту кадров, мы должны вдвое уменьшить увеличение параметра.

В многозадачной операционной системе нет никакой гарантии, что анимация будет точной – нередко анимация задерживается на несколько кадров. Если мы основываем анимацию на часах реального времени, а не просто увеличиваем ее для каждого цикла цикла анимации, анимация будет гораздо более последовательной – наш объект будет перемещаться по экрану в течение точно такого же количества времени, даже если он может пропустить несколько кадров здесь и там. Это метко называется "пропуск кадров".

Двойная буферизация

Методы рисования во многих языках программирования очищают экран перед рисованием чего-либо, чтобы предотвратить "просачивание" предыдущего кадра. Поскольку анимация включает в себя множество непрерывных обновлений экрана, однако это может привести к заметному мерцанию, когда экран очищается и перерисовывается несколько раз за секунду. Решением этой проблемы является двойная буферизация.

Как следует из названия, "двойная буферизация" включает в себя рендеринг всех объектов во второй внеэкранный буфер, а затем рендеринг содержимого буфера на экран за один раз. Это позволит устранить мерцание, так как происходит только одна операция рисования.

Многие языки программирования и фреймворки имеют встроенные способы активации двойной буферизации; например, в C# достаточно задать свойство DoubleBuffer формы.

Итог

Надеюсь, что вам стало более понятно, что представляет собой компьютерная анимация. А если вам требуется создать программу, в которой есть эта самая анимация, то пишите мне.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, анимация




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Ленивый Лёша
Системные и известные NET цвета
Защита от SQL Injection с помощью кодов в htaccess