49668 (Деякі формати мультимедіа. Використання шейдерів та фракталів), страница 2

2016-07-29СтудИзба

Описание файла

Документ из архива "Деякі формати мультимедіа. Використання шейдерів та фракталів", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "контрольные работы и аттестации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "49668"

Текст 2 страницы из документа "49668"

Піксельні шейдери з'явилися спочатку як спосіб опису накладання пікселів багатошарових текстур. Тепер вони містять різноманітні операції визначення кольорів окремих пікселів. Шейдери оперують такими типами даних — цілі числа, числа з плаваючою точкою, трійки RGB, вектори, матриці.

Наведемо формат однієї команди шейдера для DirectX 8

де: op— ім'я команди,

dest — регістр, в який записується результат,

src0, srcl, src2 — регістри вхідних даних.

Як бачимо, мова команд шейдерів фактично є асемблером. Для розробки шейдер-них програм можна використовувати API DirectX (8.0 та наступних версій), OpenGL 2.0 (шейдерні операції частково підтримуються в розширеннях OpenGL версій 1.2 та 1.3). Також розроблені спеціальні мови програмування для шейдерів — це Cg (nVidia) та Monkey (ATI) [98].

Загальні відомості про шейдерні можливості сучасних відеоадаптерів надані у таблиці 3.2

Фрактал можна визначити як об'єкт досить складної форми, який отримано в результаті виконання простого ітераційного циклу. Ітераційність, рекурсивність обумовлюють такі властивості фракталів, як самоподібність — окремі частини схожі за формою на весь фрактал у цілому. Латинське fractus означає "складений із фрагментів". У 1975 році французький математик Бенуа Мандельброт видав книгу "The fractal Geometry of Nature" [38]. Відтоді слово "фрактал" стало модним.

Фракталом Мандельброта названо фігуру, яка породжується дуже простим циклом. Для створення цього фрактала необхідно для кожної точки зображення виконати цикл ітерацій згідно з формулою:

де k = 0, 1,..., п. Величини zk — це комплексні числа, zk = xk + iyk, причому стартові значення х0 та у0 — це координати точки зображення. Для кожної точки зображення ітерації виконуються обмежену кількість разів (n) або доти, доки модуль числа zk не перевищує 2. Модуль комплексного числа дорівнює кореню квадратному з х2 + у2. Для обчислення квадрата величини zk можна скористатися формулою z2 = (х + іу) (х + іу) = (х2 - у2) + і(2у), оскільки і2 = -1. Цикл ітерацій для фракталу Мандельброта можна виконувати в діапазоні х = (від -2.2, до 1), у = (від -1.2 до 1.2). Для того щоб отримати зображення в растрі, необхідно перераховувати координати цього діапазону в піксельні (рис. 3.35).

Фрактал Джулія зовсім не схожий на фрактал Мандельброта, однак він визначається ітераційним циклом, майже повністю тотожнім циклу генерації Мандельброта. Формула ітерацій для фрактала Джулія така:

На рис. 3.36 зображено фрактал Джулія для с = 0.36 + і 0.36, п = 256.

Як бачимо, фрактал самоподібний — при будь-якому збільшенні окремі частини нагадують форми цілого. Самоподiбнiсть вважається важливою властивістю фракталів. Це відрізняє їх від інших типів об'єктів складної форми.

Розглянемо наступний приклад фрактала — фрактал Ньютон. Для нього ітераційна формула має такий вигляд:

де z — також комплексні числа, причому z0 = х + іу відповідає координатам точки зображення.

Умовою припинення циклу ітерації для фракталу Ньютон є наближення значень |z4 - 1| до нуля. Наприклад, зображення на рис. 3.37 було отримане для |z4- 1|2> 0.001, межі розрахунку х = (від -1 до 1), у = (від-1 до 1).

Розглянемо ще один різновид фракталів. Такі фрактали названо геометричними, оскільки їхня форма може бути описана як послідовність простих геометричних операцій. Наприклад, крива Кох стає фракталом у результаті безкінечної кількості ітерацій, в ході яких виконується поділ кожного відрізка прямої на три частини. На рис. 3.38 показані три ітерації — поступово лінія стає схожою на сніжинку.

Наступну групу складають фрактали, що генеруються відповідно до методу "систем ітеративних функцій" — IFS (Iterated Functions Systems). Цей метод може бути описаний, як послідовний ітеративний розрахунок координат нових точок у просторі:

де Fx та Fy — функції перетворення координат, наприклад, афінного перетворення. Ці функції й обумовлюють форму фрактала. У випадку афінного перетворення необхідно знайти відповідні числові значення коефіцієнтів.

Давайте спробуємо розробити фрактал, який виглядав би, як рослина. Уявимо стовбур, на якому багато гілочок. На кожній гілочці багата менших гілочок і так далі. Найменші гілки можна вважати листям або колючками. Усі елементи будемо рисувати відрізками прямої. Кожен відрізок визначатиметься двома кінцевими точками.

Для початку ітерацій необхідно задати стартові координати кінців відрізку. Це будуть точки 1, 2. На кожному кроці ітерацій будемо розраховувати координати інших точок.

Спочатку знаходимо точку 3. Це повернута на кут а точка 2, центр повороту — в точці 1 (рис. 3.39):

Якщо = 0, то стовбур та всі гілки прямі. Потім знаходимо точку 4. Від неї будуть розповсюджуватися гілки. Нехай співвідношення довжин відрізків 1-4 та 1-3 дорівнює к, причому 0 < к < 1. Тоді для обчислення координат точки 4 можна скористатися такими формулами:

Тепер задамо довжину та кут нахилу гілок, що виходять із точки 4. Спочатку знайдемо координати точки 5. Уведемо ще один параметр — к1, який визначатиме співвідношення довжин відрізків 4-5 та 4-3, причому також 0 < к1 < 1. Координати точки 5 дорівнюють

Окрім розрахунку опорних точок, на кожному кроці будемо рисувати один відрізок 1-4. В залежності від номера ітерацій можна змінювати колір відрізка. Також можна встановлювати його товщину, наприклад, пропорційно довжині.

Таким чином, фрактал ми визначили як послідовність афінних перетворень координат точок. Величини ,

, к, к1 — це параметри, які описують вигляд фрактала в цілому. Вони є константами на протязі усього ітеративного процесу. Це дає можливість в ітераціях використовувати тільки операції додавання, віднімання та множення, якщо обчислити значення sin(), cos(), (1 - к) та (1 - kl) тільки один раз перед початком ітерацій у вигляді коефіцієнтів-констант.

Дамо запис алгоритму у вигляді рекурсивної процедури крок ():

Для того щоб нарисувати фрактал, необхідно викликати процедуру КРОК, встановивши відповідні значення її аргументів: крок(xl, yl, х2, у2, 0). Зверніть увагу на один з аргументів цієї процедури — пит, який спочатку має значення 0. У тілі процедури є три рекурсивних виклики з різними значеннями цього аргументу:

• крок(х4, у4, х3, у3, num)—продовжуємо стовбур;

• крок(х4, у4, х6, у6, num+l)—права гілка;

• крок(х4, у4, х7, у7, num+l) —ліва гілка.

Значення пит показує ступінь деталізації обрахування дерева. Один цикл ітерацій містить багато кроків, що відповідає одному значенню величини num. Числове значення пит можна використовувати для припинення ітеративного процесу, а також для визначення поточного кольору елементів "рослини".

Завершення циклів ітерацій у нашому алгоритмі відбувається тоді, коли довжина гілки стає менше від деякої величини lmin , наприклад, lmin = 1.

Цей фрактал при = 2°,

= 86°, к = 0.14, к1 = 0.3 схожий на папороть (рис. 3.40).

Метод IFS використовується не тільки для створення зображень. Його використали Барнслі та Слоан для ефективного ущільнення графічних зображень при записі до файла. Основна ідея така: оскільки фрактали можуть репрезентувати дуже складні зображення за допомогою простих ітерацій, то опис цих ітерацій потребує значно меншого обсягу інформації, ніж відповідні растрові зображення. Дkя кодування зображень необхідно вирішувати обернену задачу — для зображення (або його фрагмента) підібрати відповідні коефіцієнти афінного перетворення. Цей метод використовується для запису кольорових фотографій у файли з ущільненням у десятки і сотні разів без помітного погіршення зображення. Формат таких графічних файлів було названо FIF (Fractal Image Format) і запатентовано фірмою Iterated Systems [40].

3. Засобами бібліотеки Opengl активізувати джерело світла на формі. Забезпечити операцію масштабування використовуючи клавіші “+” та “-“

object frmGL: TfrmGL

Left = 163

Top = 167

Width = 385

Height = 272

Caption = #1055#1079#1089'-504 '#1070#1088#1095#1091#1082' '#1057'.'#1051'.'

Color = clBlack

Font.Charset = RUSSIAN_CHARSET

Font.Color = clMaroon

Font.Height = -16

Font.Name = 'Times New Roman'

Font.Style = [fsBold, fsItalic]

OldCreateOrder = True

Position = poScreenCenter

OnCreate = FormCreate

OnDestroy = FormDestroy

OnKeyDown = FormKeyDown

OnPaint = FormPaint

OnResize = FormResize

PixelsPerInch = 96

TextHeight = 19

end

procedure TfrmGL.FormPaint(Sender: TObject);

begin

glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

glPushMatrix;

glRotatef(Angle, 0.0, 1.0, 0.0); // поворот на угол

glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, @MaterialColor);

OutText ('ЮРЧУК С.Л.');

glPopMatrix;

SwapBuffers(DC);

end;

procedure FNTimeCallBack(uTimerID, uMessage: UINT;dwUser, dw1, dw2: DWORD) stdcall;

begin

With frmGL do begin

Angle := Angle + 0.2;

If (Angle >= 720.0) then Angle := 0.0;

MaterialColor [0] := (720.0 - Angle) / 720.0;

MaterialColor [1] := Angle / 720.0;

MaterialColor [2] := Angle / 720.0;

InvalidateRect(Handle, nil, False);

end;

end;

procedure TfrmGL.FormCreate(Sender: TObject);

begin

Angle := 0;

DC := GetDC(Handle);

SetDCPixelFormat;

hrc := wglCreateContext(DC);

wglMakeCurrent(DC, hrc);

wglUseFontOutlines(Canvas.Handle, 0, 255, GLF_START_LIST, 0.0, 0.15,

WGL_FONT_POLYGONS, nil);

Init;

uTimerID := timeSetEvent (1, 0, @FNTimeCallBack, 0, TIME_PERIODIC);

end;

procedure TfrmGL.FormResize(Sender: TObject);

begin

glViewport(0, 0, ClientWidth, ClientHeight);

glMatrixMode(GL_PROJECTION);

glLoadIdentity;

gluPerspective(40.0, ClientWidth / ClientHeight, 1.0, 20.0);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity;

glTranslatef(0.0, 0.0, -8.0);

glRotatef(30.0, 1.0, 0.0, 0.0);

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5192
Авторов
на СтудИзбе
433
Средний доход
с одного платного файла
Обучение Подробнее