Федеральное агентство по образованию
Пермский государственный технический университет
Чайковский филиал
Кафедра Информационных технологий
Курсовая работа
по дисциплине «Компьютерная графика»
Выполнил:
студент группы БИ 02-01
Фёдоров А. Б.
Проверил:
ст. преподаватель
Русских Т. И.
г.Чайковский
2005
Оглавление
1. Оглавление 2
2. Задание на курсовую работу 3
3. Введение 4
4. Краткое описание программы 5
5. Список ограничений при работе 6
6. Руководство по использованию программы 7
7. Описание используемыхпеременных 11
8. Текст основных подпрограмм 14
9. Заключение 18
10. Список литературы 19
Задание на курсовую работу
Введение
Библиотека OpenGL была разработана фирмой Silicon Graphics для графических станций и развивается с 1992 года. Она. представляет из себя интерфейс программирования трехмерной графики. Единицей информации является вершина, из них состоят более сложные объекты. Программист создает вершины, указывает как их соединять (линиями или многоугольниками), устанавливает координаты и параметры камеры и ламп, а библиотека OpenGL берет на себя работу создания изображения на экране. OpenGL идеально подходит для программистов, которым необходимо создать небольшую трехмерную сцену и не задумываться о деталях реализации алгоритмов трехмерной графики. Для профессионалов, занимающихся программированием трехмерной графики, библиотека тоже будет полезной, т.к. она представляет основные механизмы и выполняет определенную автоматизацию. Используя OpenGL вы с легкостью создадите трехмерные поверхности, наложите на них текстуры, осветите источниками света, сможете сделать эффект тумана, прозрачности, смешивания цветов, а также сможете наложить трафарет, передвигать объекты сцены, лампы и камеры по заданным траекториям, сделав, тем самым, анимацию. По сравнению со своим главным конкурентом - Direct3D, библиотека OpenGL несколько проигрывает в скорости, но значительно превосходит Direct3D благодаря удобству работы, меньшему объему набираемого программистом текста и доступности технической документации.
Краткое описание программы
Курсовая работа написана с использованием пакета Delphi 6 и представляет собой *.exe файл размером в 513 килобайт. Основное действие, выполняемое программой – наложение какого-либо изображения на поверхность произвольного объекта (созданного заранее). При желании можно изменить рисунок текстуры для любой из граней и сохранить отредактированный объект.
Объекты, использующиеся программой, имеют оригинальный внутренний формат, позволяющий сжимать большие массивы координат точек и полигонов. Программа дает возможность рассмотреть предметы как с наложенной текстурой, так и в ‘проволочном ’ виде. При написании программы, основной упор сделан на максимальное удобство работы пользователя и на приближение интерфейса пользователя к интерфейсам используемых в среде Windows программ работы с графикой. Заложена возможность дальнейшего расширения программного продукта.
В процессе написания использовался драйвер OpenGL версии 1.1.0 (входящий в комплект поставки MicrosoftWindows).
Ограничения
В данном разделе описаны основные ограничения, накладываемые на программу, причины их присутствия (ограничений), возможные следствия их несоблюдений.
При попытке загрузки не Bitmap файла, появится сообщение об ошибке.
Максимально возможное количество точек и полигонов =255Для их подсчета используется тип данных byte. Данного количества точек вполне достаточно для создания довольно сложного и детального объекта.
Объект может состоять лишь из плоских невыпуклых граней и плоскостей, число точек полигона ограничено до 6-иОтсутствие библиотек-надстроек работы с искривленными поверхностями для языка Pascal.
Как правило, при качественной детализации, основная масса полигонов состоит из 3-х или 4-х вершин. При обработке таких полигонов достигается наивысшая скорость.
Отсутствует удобное средство создания 3D объектов.Нет смысла создавать специальную программу. В перспективе возможно написание утилиты для импорта информации из SAT-файлов.
Руководство по использованию программы
В первой форме имеется строка состояния внизу экрана и выпадающее меню вверху, состоящее из трех пунктов.
В строке состояния отображается о названии текущего объекта, количестве точек и полигонов, из которых он состоит.
Пункты меню:
Load-Object
Можно загрузить другой объект (по умолчанию – пирамида ) загружаемый файл должен иметь расширение *.S3D. После загрузки на экране сразу же появится новый предмет, изменится информация в строке состояния, координаты текстур в форме №2 (если она включена).
Load-Texture
Диалог загрузки рисунка. После выполнения загрузки, на экране появляется форме №2, предназначенная для нарезки из изображения кусков текстур, покрывающих полигоны. Если появившаяся форма мешает, то её можно закрыть, заслонив основным окном.
Save -Object
Сохраняет всю информацию об объекте в файл. Если указать имя текущего файла, то он перезапишется.
Texturing - Yes
Включение режима текстурирования, первоначально режим выключен.
Texturing - No
Включение ‘проволочного’ роежима.
рисунок 1 – форма №1 в режиме ‘проволочной’ графики
Вторая форма первоначально, т.к. режим текстурирования отключен и не загружено изображение, невидима. Появляется она после загрузки Bitmap файла. В левой части формы находится изображение, зелеными линиями обведен контур текущей редактируемой грани. Справа расположены координаты текстуры для всех точек грани. Изменяя эти числа, можно сменить расположение углов полигона.
рисунок 2 – форма №2
Есть и другой, более удобный способ – навести курсор мыши на одну из точек (при этом под рисунком появится надпись “DotNLocked’) и перетащить выбранную точку в нужное место. Однако следует помнить, что если точки расположены слишком близко друг от друга, то вы не сможете ‘схватить’ те из них, что имеют больший порядковый номер. Для более точного позиционирования точек, имеется указатель, показывающий текущие координаты курсора. Наилучшее качество изображения, покрывающее грани объекта, можно достичь лишь при соответствии пропорций грани и вырезанного для нее куска текстуры. Особо заметны отклонения такого рода на гранях строго симметричной формы.
Разместив на свои места все точки и переключившись на главную форму полюбуйтесь новым нарядом объекта.
рисунок 3 – форма №1 в режиме текстурирования граней
Описание используемых переменных
logo:array [0..15] of byte
массив, использующийся для проверки корректности загружаемого файла.
Первые 16 байт файла должны соответствовать этому массиву
mclick:boolean
состояние мыши: если нажата одна из кнопок, то true, иначе - false
dx,dy:integer
расстояние в пикселях, пройденное мышью во время последнего передвижения.
mx,my:integer
текущие координаты курсора мыши.
texturing:boolean
включен ли режим текстурирования граней, если да, то true, иначе – false.
bitmap:tbitmap
использующееся изображение.
d:double=1/256
константа для перевода координат текстуры из типа данных byte в double.
Необходима из за того, что команда glTexCoord2b по непонятной причине отсутствует.
dots:byte
количество составляющих объект точек
poligons:byte
количество полигонов объекта
fx:array [0..255] ofgldouble;
X координаты точек
fy:array [0..255] of gldouble;
Y координаты точек
fz:array [0..255] of gldouble;
Z координатыточек
pols:array [0..511] of byte
последовательно описаны все точки полигонов, формат массива следующий:
0 NN - количество точек в полигоне 0
1 x в полигон входит точка x
… … последовательный список точек, входящих в полигон
NMM - количество точек в полигоне 1
… … последовательный список точек, входящих в полигон
N+MTT - количество точек в полигоне 2
Последнее значение массива = 0
pols_pointer:array [0..255] of word
полигоны могут иметь различный размер и для их быстрого нахождения создан этот массив. Каждое значение – индекс, с которого начинается описание полигона в массиве pols.