Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


Компьютерная графика 9

Тип Реферат
Предмет Информатика
Просмотров
628
Размер файла
47 б
Поделиться

Ознакомительный фрагмент работы:

Компьютерная графика 9

Федеральное агентство по образованию

Пермский государственный технический университет

Чайковский филиал

Кафедра Информационных технологий

Курсовая работа

по дисциплине «Компьютерная графика»

Выполнил:

студент группы БИ 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).

Ограничения

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


Загружаемая текстура должна иметь расширение *.bmp, предпочтительный размер – 256х256 точек.

Класс DelphiPicture способен работать лишь с *.bmp файлами. При загрузке файла размером более 256х256 изображение сжимается с потерей качества. Данный размер выбран как оптимальный, на мой взгляд, для учебных целей.

При попытке загрузки не Bitmap файла, появится сообщение об ошибке.

Максимально возможное количество точек и полигонов =255

Для их подсчета используется тип данных byte. Данного количества точек вполне достаточно для создания довольно сложного и детального объекта.

Объект может состоять лишь из плоских невыпуклых граней и плоскостей, число точек полигона ограничено до 6-и

Отсутствие библиотек-надстроек работы с искривленными поверхностями для языка Pascal.

Как правило, при качественной детализации, основная масса полигонов состоит из 3-х или 4-х вершин. При обработке таких полигонов достигается наивысшая скорость.

Отсутствует удобное средство создания 3D объектов.

Нет смысла создавать специальную программу. В перспективе возможно написание утилиты для импорта информации из SAT-файлов.

Руководство по использованию программы

Конструктивно программа состоит из 2-х форм.

Первая – основная, в ней пользователь может изменять режимы работы программы либо манипулировать объектом, поворачивая его с помощью мыши. Для этого, удерживая нажатой любую из кнопок мыши, необходимо переместить указатель мыши. При перемещении вправо (или влево) объект поворачивается вокруг оси OY по часовой стрелке (или против часовой стрелки). При перемещении указателя вверх-вниз меняется угол поворота вокруг оси OX. Перемещению курсора мыши на один пиксель соответствует поворот на один градус.

При работе с объектом большого размера, для просмотра его целиком, можно воспользоваться колесиком мыши и изменить расстояние между фигурой и камерой.

В первой форме имеется строка состояния внизу экрана и выпадающее меню вверху, состоящее из трех пунктов.

В строке состояния отображается о названии текущего объекта, количестве точек и полигонов, из которых он состоит.

Пункты меню:

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.

texture_xcoords:array [0..511] of glubyte

X координатытекстур

texture_ycoords:array [0..511] of glubyte

Y координатытекстур

object_name:array [0..15] of char

имятекущегообъекта

texture:array[0..$ff,0..$ff,0..2] of glubyte

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

rx,ry : Glfloat

поворот объекта от начального состояния вокруг осей OX и OY.

tx : Glfloat

перенос от начального положения оп оси OZ.

current_poligon:byte

номер полигона, обрабатываемого в данный момент. Счет начинается с нуля.

ptr:word

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

dots_num:word

число точек из которых состоит грань.

current_dot:word

текущая обрабатываемая точка грани

locked_dot:byte

номер вершины текстуры на которую наведен курсор (форма №2).

Если курсор не указывает не на одну из точек, то переменная равна $FF

Кроме вышеперечисленных, существует еще ряд переменных, использующихся, в основном, при организации циклов FOR.

Текст основных подпрограмм

Процедура ‘Detal’ - собственна само изображение объекта на экране.

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

procedure TForm1.Detal;

var a:integer;

begin

a:=0;

if texturing=true then glEnable (GL_TEXTURE_2D);

while pols[a]<>0 do begin

if pols[a]=3 then begin inc (a);

glBegin (GL_TRIANGLES) ;

if texturing=true then glTexCoord2d (d*texture_ycoords[a],d*texture_xcoords[a]);

glVertex3f(fx[pols[a]], fy[pols[a]], fz[pols[a]]); inc (a);

if texturing=true then glTexCoord2d (d*texture_ycoords[a],d*texture_xcoords[a]);

glVertex3f(fx[pols[a]], fy[pols[a]], fz[pols[a]]); inc (a);

if texturing=true then glTexCoord2d (d*texture_ycoords[a],d*texture_xcoords[a]);

glVertex3f(fx[pols[a]], fy[pols[a]], fz[pols[a]]); inc (a);

glEnd; end;

if pols[a]=4 then begin inc (a);

glBegin (GL_Quads) ;

if texturing=true then glTexCoord2d (d*texture_ycoords[a],d*texture_xcoords[a]);

glVertex3f(fx[pols[a]], fy[pols[a]], fz[pols[a]]); inc (a);

if texturing=true then glTexCoord2d (d*texture_ycoords[a],d*texture_xcoords[a]);

glVertex3f(fx[pols[a]], fy[pols[a]], fz[pols[a]]); inc (a);

if texturing=true then glTexCoord2d (d*texture_ycoords[a],d*texture_xcoords[a]);

glVertex3f(fx[pols[a]], fy[pols[a]], fz[pols[a]]); inc (a);

if texturing=true then glTexCoord2d (d*texture_ycoords[a],d*texture_xcoords[a]);

glVertex3f(fx[pols[a]], fy[pols[a]], fz[pols[a]]); inc (a);

glEnd; end;

if pols[a]>4 then begin inc (a);

glBegin (GL_Polygon) ;

if texturing=true then glTexCoord2d (d*texture_ycoords[a],d*texture_xcoords[a]);

glVertex3f(fx[pols[a]], fy[pols[a]], fz[pols[a]]); inc (a);

if texturing=true then glTexCoord2d (d*texture_ycoords[a],d*texture_xcoords[a]);

glVertex3f(fx[pols[a]], fy[pols[a]], fz[pols[a]]); inc (a);

if texturing=true then glTexCoord2d (d*texture_ycoords[a],d*texture_xcoords[a]);

glVertex3f(fx[pols[a]], fy[pols[a]], fz[pols[a]]); inc (a);

if texturing=true then glTexCoord2d (d*texture_ycoords[a],d*texture_xcoords[a]);

glVertex3f(fx[pols[a]], fy[pols[a]], fz[pols[a]]); inc (a);

if texturing=true then glTexCoord2d (d*texture_ycoords[a],d*texture_xcoords[a]);

glVertex3f(fx[pols[a]], fy[pols[a]], fz[pols[a]]); inc (a);

if pols[a]=$ff then continue;

if texturing=true then glTexCoord2d (d*texture_ycoords[a],d*texture_xcoords[a]);

glVertex3f(fx[pols[a]], fy[pols[a]], fz[pols[a]]); inc (a);

glEnd;

end;end;

if texturing=true then glDisable (GL_TEXTURE_2D);

end;

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

procedure TForm1.FormPaint(Sender: TObject);

begin

glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

glPushMatrix;

glTranslatef (0, 0.0, tx);

glRotatef (rx, 1.0, 0.0, 0.0);

glRotatef (ry, 0.0, 1.0, 0.0);

Detal;

glPopMatrix;

SwapBuffers(DC);

end;

Установка формата пикселей и связь его с текущим контекстом воспроизведения, выполняется один раз при запуске приложения.

procedure SetDCPixelFormat (hdc : HDC);

var

pfd : TPixelFormatDescriptor;

nPixelFormat : Integer;

begin

FillChar (pfd, SizeOf (pfd), 0);

pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;

nPixelFormat := ChoosePixelFormat (hdc, @pfd);

SetPixelFormat (hdc, nPixelFormat, @pfd);

end;

Создание формы. Инициализация рабочих массивов, создание контекста воспроизведения и связь его с окном формы. Определение атрибутов формы, включениеZ буфера.

procedure TForm1.FormCreate(Sender: TObject);

var x:integer;

begin

for x:=0 to 22 do pols[x]:=pols_start[x];

for x:=0 to dots do fx[x]:=fx_start[x];

for x:=0 to dots do fy[x]:=fy_start[x];

for x:=0 to dots do fz[x]:=fz_start[x];

for x:=0 to poligons do pols_pointer[x]:=pols_pointer_start[x];

for x:=0 to 22 do texture_xcoords[x]:=texture_xcoords_start[x];

for x:=0 to 22 do texture_ycoords[x]:=texture_ycoords_start[x];

Bitmap := TBitmap.Create;

DC := GetDC (Handle);

SetDCPixelFormat(DC);

hrc := wglCreateContext(DC);

wglMakeCurrent(DC, hrc);

glClearColor (0.5, 0.5, 0.75, 1.0);

glColor3f (0.0, 0.0, 0.0

glLineWidth (1);

Form1.Color:=$c08080;

glEnable (GL_DEPTH_TEST);

statusbar1.Panels.Items[0].Text:='Имяобъекта: '+object_name;

statusbar1.Panels.Items[1].Text:='Точек: '+inttostr(dots);

statusbar1.Panels.Items[2].Text:=Полигонов: '+inttostr(poligons);

end;

Освобождение памяти занимаемой программой, выполняется при закрытии приложения.

procedure TForm1.FormDestroy(Sender: TObject);

begin

wglMakeCurrent(0, 0);

wglDeleteContext(hrc);

ReleaseDC (Handle, DC);

DeleteDC (DC);

Bitmap.Free;

end;

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

procedure TForm1.FormResize(Sender: TObject);

begin

glViewport(0, 0, ClientWidth, ClientHeight);

glMatrixMode (GL_PROJECTION);

glLoadIdentity;

glFrustum (-1, 1, -1, 1, 2, 29);

glMatrixMode (GL_MODELVIEW);

glLoadIdentity;

glTranslatef(0.0, 0.0, -6.0);

glPolygonMode (GL_FRONT_AND_BACK, GL_LINE) ;

end;

Процедура загрузки текстуры в предназначенный для нее массив. После загрузки задаются необходимые параметры текстурирования, инициализируется форма №2.

procedure TForm1.Texture1Click(Sender: TObject);

var x,y:integer;

begin

opendialog1.Filter:='Texture file (Bitmap 256*256)|*.bmp';

if opendialog1.Execute then begin

Form2.Image1.Picture.LoadFromFile(opendialog1.FileName);

Bitmap.LoadFromFile(opendialog1.FileName);

for y:=0 to $ff do begin

for x:=0 to $ff do begin

texture[x,y,0]:=GetRValue(Bitmap.Canvas.Pixels [x,y]);

texture[x,y,1]:=GetGValue(Bitmap.Canvas.Pixels[x,y]);;

texture[x,y,2]:=GetBValue(Bitmap.Canvas.Pixels[x,y]);

end;end;

glPixelStorei(GL_UNPACK_ALIGNMENT,1);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

glTexImage2d(GL_TEXTURE_2D, 0, 3, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, @texture);

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);

Form2_prepearing;

Form2.show;

Form2.paintpoligon;

end; end;

Заключение

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

Список литературы

1. OpenGL. Графика в проектах Delphi. М. Краснов.

2. OpenGL. Игорь Тарасов.

3. Материалы с сайта ‘opengl.org.ru’.

4. Компьютерная графика. Полигональные модели Шикин А. В., Боресков Л. В.

5. 3D programming FAQ. АндрейАксёнов.


Нет нужной работы в каталоге?

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

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
159599
рейтинг
icon
3275
работ сдано
icon
1404
отзывов
avatar
Математика
Физика
История
icon
156450
рейтинг
icon
6068
работ сдано
icon
2737
отзывов
avatar
Химия
Экономика
Биология
icon
105734
рейтинг
icon
2110
работ сдано
icon
1318
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
63 457 оценок star star star star star
среднее 4.9 из 5
Филиал государственного бюджетного образовательного учреждения высшего образования Московской област
Спасибо Елизавете за оперативность. Так как это было важно для нас! Замечаний особых не бы...
star star star star star
РУТ
Огромное спасибо за уважительное отношение к заказчикам, быстроту и качество работы
star star star star star
ТГПУ
спасибо за помощь, работа сделана в срок и без замечаний, в полном объеме!
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

решить 6 практических

Решение задач, Спортивные сооружения

Срок сдачи к 17 дек.

только что

Задание в microsoft project

Лабораторная, Программирование

Срок сдачи к 14 дек.

только что

Решить две задачи №13 и №23

Решение задач, Теоретические основы электротехники

Срок сдачи к 15 дек.

только что

Решить 4задачи

Решение задач, Прикладная механика

Срок сдачи к 31 дек.

только что

Выполнить 2 задачи

Контрольная, Конституционное право

Срок сдачи к 12 дек.

2 минуты назад

6 заданий

Контрольная, Ветеринарная вирусология и иммунология

Срок сдачи к 6 дек.

4 минуты назад

Требуется разобрать ст. 135 Налогового кодекса по составу напогового...

Решение задач, Налоговое право

Срок сдачи к 5 дек.

4 минуты назад

ТЭД, теории кислот и оснований

Решение задач, Химия

Срок сдачи к 5 дек.

5 минут назад

Решить задание в эксель

Решение задач, Эконометрика

Срок сдачи к 6 дек.

5 минут назад

Нужно проходить тесты на сайте

Тест дистанционно, Детская психология

Срок сдачи к 31 янв.

6 минут назад

Решить 7 лабораторных

Решение задач, визуализация данных в экономике

Срок сдачи к 6 дек.

7 минут назад

Вариационные ряды

Другое, Статистика

Срок сдачи к 9 дек.

8 минут назад

Школьный кабинет химии и его роль в химико-образовательном процессе

Курсовая, Методика преподавания химии

Срок сдачи к 26 дек.

8 минут назад

Вариант 9

Решение задач, Теоретическая механика

Срок сдачи к 7 дек.

8 минут назад

9 задач по тех меху ,к 16:20

Решение задач, Техническая механика

Срок сдачи к 5 дек.

9 минут назад
9 минут назад
10 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно