Создание графического редактора для обработки текстур средствами DirectX 9.0C
Авторы: Магдалина С.Н., Карабчевский В.В.
Источник: Матеріали третьої міжнародної науково-технічної конференції «Моделювання та компьютерна графіка». — Донецьк : ДонНТУ — 2009.

Введение

XX век ознаменовался стремительным развитием науки и техники. Всего за сто лет жизнь человека претерпела такие изменения, каких не было за прошедшую тысячу лет. XXI век же претендует на звание века, давшего самый большой скачок в развитии информационных технологий. Буквально за несколько лет Интернет из роскоши, доступной не многим, вошел в каждый дом. И если на заре своего развития Интернет был скорее почтово-справочной системой, то теперь он пестрит всевозможными баннерами, анимацией, звуковыми и видеороликами. Однако, самыми распространенными элементами декора по-прежнему являются простые растровые изображения, часто объединенные в анимационные ролики.

В условиях рыночной экономики спрос всегда рождает предложение. Поэтому на рынке компьютерных программ появилось большое количество всевозможных графических редакторов, направленных на работу с изображениями. Все они различны по сложности работы с ними, по способу работы с изображениями. Так, Adobe Photoshop [1] более ориентирован на обработку растра изображения, в то время как Corel Draw [2] — на работы с различными объектами, входящими в состав проекта.

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


Структура системы

Система Kentus_Drawer представляет собой систему, написанную в среде Visual Studio 2008 на языке С++ [3] с использованием средств DirectX 9.0C (версия октябрь 2008). Система имеет множество конфигурационных файлов, каждый из которых хранит настройки своей части общей системы — настройки интерфейса приложения, настройки редактора кривых и т.п.

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


Создание и редактирование изображений

Kentus_Drawer позволяет как загружать готовые изображения в форматах .jpg и .bmp, так и создавать их «с нуля». После работы готовое изображение также может быть сохранено в форматы .jpg или .bmp. Редактор имеет все необходимые функции для навигации на изображении — задание произвольного масштаба, показ текущих координат мыши на изображении, прокрутку видимой части изображение в случае масштабирования. Для работы с изображениями в состав редактора входят два инструмента — «Редактор кривых» и «Рисование». С помощью инструмента «Редактор кривых» можно создавать различные кривые. При этом каждая кривая представляет собой несколько не соединенных между собой кривых. Каждая такая кривая непрерывна и состоит из кривых Безье, соединенных между собой. Таким образом, в редакторе кривых можно создавать кривые большой сложности, допускающие разрывы, при этом не используя уравнений высших порядков и снижая таким образом цену их обработки. В процессе создания кривых можно добавлять или удалять новые точки (узлы) к кривым Безье, новые сегменты непрерывных кривых или отдельные новые кривые. Формирование кривых происходит по точечно, в интерактивном режиме. Возможен непосредственный ввод координат точек, а также перемещение их в режиме привязки.

На рисунке 1 показан процесс формирования кривой.

Рисунок 1
Рисунок 1 — Процесс создания кривой.

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

Созданные в редакторе кривые могут быть помещены в банк кривых, а затем использованы в других инструментах. Так, инструмент «Рисование» предназначен для прямого изменения растра изображения. При этом каждое изменение растра в системе называется «Мазок», подобно мазку кистью на холсте художника. Мазок можно сделать различными способами. Если для этого используется мышь, то нажатие на левую кнопку мыши означает начало мазка, отпускание ее — конец. Рисование при помощи клавиатуры осуществляется следующим образом — к определенным клавишам управления привязаны определенные направления движения кисти. Нажав ту или иную клавишу на клавиатуре, можно двигать кисть ровно в заданном направлении. Наконец, мазок можно сделать, загрузив созданную в редакторе кривых кривую и использовав ее как траекторию движения кисти при мазке. При этом необходимо задать область на изображении, где будет расположена загруженная кривая. Если эта область будет не квадратная, но кривая будет соответственно растянута или сжата.

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

Рисунок 2
Рисунок 2 — Последовательность действий при проведении мазка в системе Kentus_Drawer.


Выводы

В результате работы будет получено конечное изображение, которое можно сохранить статически. Кроме того, будет известна последовательность операций, с помощью которых изображение построено. В дальнейшем планируется реализовать генерацию кода на языке С++ по этим операциям, который получит в качестве аргументов указатель на текстуру DirectX 9 [4] и другие параметры и над этой текстурой будет автоматически проделывать действия, описанные в операциях, таким образом генерируя изображения, наиболее подходящие по характеристикам для данной ситуации.


Литература

  1. Александр Тайц, Александра Тайц. Самоучитель Adobe Photoshop 7. СПб.: БХВ — Петербург, 2005. — 688 с.: ил.
  2. Миронов Д. Corel Draw 11. Учебный курс. СПб.: Питер, 2002. — 448 с.: ил.
  3. Секунов Н.Ю. Самоучитель Visual C++. СПб.: БХВ-Петербург, 2002. — 250 с.: ил.
  4. Станислав Горнаков. DirectX 9: Уроки программирования на С++. СПб.: БХВ — Петербург, 2005. — 400 с.: ил.