РЕАЛИЗАЦИЯ АНИМАЦИИ ИЗОБРАЖЕНИЯ С ПОМОЩЬЮ АССЕМБЛЕРА - Студенческий научный форум

XI Международная студенческая научная конференция Студенческий научный форум - 2019

РЕАЛИЗАЦИЯ АНИМАЦИИ ИЗОБРАЖЕНИЯ С ПОМОЩЬЮ АССЕМБЛЕРА

Гериханов В.Р. 1, Абрамова О.Ф. 1
1Волжский политехнический институт (филиал) ВолгГТУ
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Введение

Прогресс не стоит на месте, сегодня каждый человек может реализовать свою маленькую анимацию, не важно, будет она двумерная или трехмерная. Существует множество программ, которые предназначены именно для создания анимированных изображений, в которых достаточно нажать пару клавиш и ваша картинка оживёт. Но перенесёмся на 40 лет назад, когда компьютерная анимация только зарождалась, какие тогда использовались инструменты для анимации? Что стоит у истоков таких простых (казалось бы) на сегодняшний момент действий? Для этого рассмотрим возможности ассемблера, предназначенные для анимирования статического изображения.

Создание графического изображения

Для того, что бы начать создание анимации на ассемблере, нам потребуется создать картинку, а затем уже её анимировать. Конечно же мы сделаем это на ассемблере, а для этого нам нужно разобраться с командами

для создания графических примитивов:

1) Установка текущей позиции курсора, для этого нам поможет функция MoveToEx(). Теперь разберём какие аргументы способна принимать данная функция MoveToEx(HDC, int, int, LPPOINT). Первый аргумент, - это контекст устройства. Второй и третий отвечает за координаты точки, куда устанавливается текущая графическая позиция. Четвертый аргумент - это указатель на структуры типа Point, в неё мы поместим координаты старой точки.

2) Рисование линии – для того, что бы нарисовать линию воспользуемся функцией LineTo(HDC, int, int)она может принимать три аргумента, контекст устройства и координаты точки. Линия будет создана из текущего положения курсора в положение, переданное в функцию, при этом курсор переместиться в точку, указанную в функцию.

3)Рисование прямоугольника – для создания прямоугольника нам потребуется функция Rectangle(HDC, int, int, int, int), котораяописывается следующим образом: первый аргумент - это контекст устройства, далее идут координаты углов прямоугольника. Нам понадобятся всего два угла, левый верхний и правый нижний.

4)Рисование эллипса - для этого воспользуемся функцией Ellipse(HDC, int, int, int), данная функция принимает такие же аргументы, как и функция, рассмотренная выше. Однако, для данной функции существует некоторое уточнение: координаты точек, это те же координаты углов прямоугольника, и через них и будет прорисовываться наш эллипс.

Анимирование графического изображения

Теперь мы можем создать примитивное графическое изображение. Однако, это только половина дела, и сейчас мы должны вдохнуть в него жизнь. Начнём с того, что для создания даже маленькой плавной анимации нам потребуется множество наших изображений. Анимация – это, по сути, показ набора статичных изображений за определенное количество времени. Если мы будем создавать наши изображения вручную в ассемблере, то это будет очень долго. Однако, у такого подхода есть существенный плюс, изображение будет выводиться на экран быстрее, что существенно улучшит качество картинки, хотя еще это зависит от того, сколько изображений мы будем использовать в секунду. Для того что бы реализовать движение объекта обычно используют такой цикл:
1) Вычислить координаты области отображения объекта (если изображение выйдет за границы экрана, компилятор выдаст ошибку. Что бы это сделать, нужно предварительно записать координаты конца экрана, а его размер зависит от разрешения, после же сравнить их с крайними точками изображения, если они больше, то увеличить видеопамять, выделяемую на процесс)

2) Сохранить фон области отображения. (Для сохранения фона нужно выделить область памяти такого же размера, что и для маски отображаемой фазы движения. Если маска объекта имеет размер MxN пикселов, а цвет пиксела кодируется К байтами, то область сохранения фона занимает MxNxK байт)

3) Рисовать текущие фазы движения объекта. (

invoke Rectangle, _hdc, 170, 120, 310, 260

invoke Rectangle, _hdc, 210, 80, 270, 120; возьмём в качестве текущего изображения два прямоугольника и выводим их на экран)

4) Ожидать начала обратного хода луча по кадру.

5) Стирать изображение объекта путём восстановления фона.(Переписать сохранённый фон из оперативной памяти в видеопамять и вывести на экран)

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

Если использовать всего одну видеостраницу, то изображение будет плавным только в том случае, если процессор успевает перерисовывать изображение полностью в течение одного кадра. Для этого процессор должен это делать примерно за 10 миллисекунд иначе изображение будет не плавным. А если объектов несколько, то задача усложняется, так как надо успеть перерисовать все.

Но даже современные процессоры не всегда будут с этим справляться, если делать всё именно так, поэтому можно пойти на несколько хитростей. Мы пожертвуем оперативной памятью и будем хранить фон в ней целиком. Это ускорит работу больше чем на треть из-за того, что чтение из видеопамяти происходит медленнее, чем запись в неё. Второй секрет связан с тем, чтобы прекратить следить за выходом изображения за экран. Для этого нужно сделать логическую длину строки больше физической, и тогда изображение будет попадать в не отражаемую область памяти, но никаких ошибок при этом не будет.

Заключение

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

Библиографические ссылки

Якушина А.А. Компьютерная графика [Электронный ресурс] / А.А. Якушина, О.Ф. Абрамова // Современные технологии и инженерное образование : матер. науч.-практ. конф. (г. Волжский, ноябрь – декабрь 2014 г.) / ООО «Центр экологической безопасности и энергосбережения». – 1 электрон. опт. диск (CD-ROM). - Волжский, 2015. - C. 18-20.

Абрамова, О.Ф. Компьютерная графика : лабораторный практикум [Электронный ресурс]: учеб. пособие / О.Ф. Абрамова, Д.Н. Лясин; ВПИ (филиал) ВолгГТУ. - Волгоград, 2017. - 1 электрон. опт. диск (CD-ROM). - 74 с

Наборщиков А.О. Сравнительный обзор средств и новинок в области современной анимации [Электронный ресурс] / А.О. Наборщиков // Студенческий научный форум – 2018 : докл. X междунар. студенч. электрон. науч. конф. Направление «Технические науки» (секция «Актуальные проблемы компьютерной визуализации») / РАЕ. - Москва, 2018.

Трубникова Ю.О. Исследование основных принципов компьютерной анимации [Электронный ресурс] / Ю.О. Трубникова, О.Ф. Абрамова // Студенческий научный форум – 2017 : докл. IX междунар. студенч. электрон. науч. конф. Направление «Технические науки» (секция «Актуальные проблемы компьютерной визуализации») / РАЕ. - Москва, 2017.

Островерхов, В.В. Исследование основных направлений в современной анимации [Электронный ресурс] / В.В. Островерхов, О.Ф. Абрамова // Студенческий научный форум – 2017 : докл. IX междунар. студенч. электрон. науч. конф. Направление «Технические науки» (секция «Актуальные проблемы компьютерной визуализации») / РАЕ. - Москва, 2017.

Просмотров работы: 177