- •1.1. Мышь
- •1.2. Сканеры
- •1.3. Световое перо
- •1.5. Графопостроители (плоттеры)
- •1.6. Принтеры
- •1.7. Дисплеи
- •2.2 Вказівки по організації самостійної роботи студентів
- •Перемещение трехмерного объекта
- •Масштабирование трехмерного объекта
- •Рекурсивная процедура получения фрактальных кривы
- •Моделирование
- •Текстурирование
- •Освещение
- •Источники направленного света (directional light sources)
- •Точечные источники света (point light sources)
- •Анимация
- •Рендеринг
- •Удаление скрытых поверхностей
- •Разновидности мультимедиа:
Масштабирование трехмерного объекта
Следующая операция трансформации, которую должны уметь выполнять, это масштабирование. Изменение размеров трехмерного объекта похоже на двухмерное масштабирование. Здесь показано масштабирование точки (x, y, z) с коэффициентом S:
x = x * S;
y = y * S;
z = z * S;
Все очень просто. Только кажется, что трехмерная графика сложна для понимания. Для описания преобразований с помощью матриц, мы опять должны представить точку в виде (x, y, z, 1):
Если Вы решите масштабировать каждый из компонентов по-разному, то Вам потребуются разные коэффициенты для каждого измерения:
Это приведет к неоднородному масштабированию.
Вращение трехмерного объекта
Вращение, параллельное оси Х
Следующая матрица преобразований вращает точку (x, y, z) параллельно оси Х:
где r - угол вращения в радианах.
Вращение, параллельное оси Y
Матрица преобразования, вращающая точку параллельно оси Y:
где r - угол вращения в радианах.
Вращение, параллельное оси Z
Матрица преобразования, вращающая точку параллельно оси Z:
где r - угол вращения в радианах.
Алгоритми малювання відрізків. Метод Брезенхема. Оптимальність.
Алгоритм Брезенхема використовує інкрементний підхід [6]. Він реалізується як послідовне обчислення координат сусідніх пікселів через додавання приросту однієї координати. Вибираються оптимальні в деякому сенсі растрові координати, причому мінімізується значення похибки – відхилення від середини пікселу. Одна з координат в залежності від кутового коефіцієнта змінюється на 1. Зміна іншої координати залежить від відстані між дійсним положенням відрізка та найближчими координатами сітки. Ця відстань називається помилкою. Алгоритм побудовано на перевірці знака цієї помилки. Загальний алгоритм Брезенхема (не тільки для прямих) працює з цілими числами і аналізує величину кутового коефіцієнта. Вибір параметра, що постійно змінюється, залежить від квадранта.
Фрагмент коду для реалізації алгоритму Брезенхема має такий вид.
xerr=0, yerr=0;
dx=x2-x1, dy=y2-y1;
if (dx>0) incX=1;
if (dx==0) incX= 0;
if( dx<0) incX=-1;
if (dy>0) incY=1;
if (dy=0) incY= 0;
if(dy<0) incY=-1;
dx=abs(dx); dy=abs(dy);
if (dx>dy) d=dx;
else d=dy;
x=x1, y=y1;
Піксель (x, y); // зображення піксела у точці (x, y)
Виконати цикл d разів:
{ xerr= xerr+dx;
yerr= yerr+dy;
if xerr>d, { xerr = xerr –d; x=x+ incX ;}
if yerr>d, { yerr = yerr –d; y=y+ incY ;}
Піксель (x, y);
}
Алгоритми заповнення ділянок. Растрові алгоритми.
Основними растровими алгоритмами є формування відрізків та кривих, заповнення замкнених контурів та відсічення в межах заданої області [4-6]. Основні особливості їх застосування зводяться до апроксимації відомих аналітичних виразів в умовах дискретної сітки пікселів. Конкретні задачі, що вирішуються при цьому, – це обчислення координат точки растру або прийняття рішення про віднесення її до фіксованої множини точок. При цьому потрібно задовольнити вимоги стабільної яскравості, мінімізації часу обчислень, використання цілої арифметики.
Формування (заповнення) ділянок зображень за описом ребер або вершин називають растровою розгорткою ділянок, заповненням многокутників або заповненням контурів [5]. Існує дві категорії методів – растрова розгортка та затравочне заповнення.
У методі растрової розгортки при скануванні точок рядка визначають, чи знаходиться піксел всередині ділянки та зафарбовують його.
Відома велика кількість алгоритмів растрової розгортки, які відрізняються швидкодією та можливостями апаратної реалізації. Вхідна інформація для них – список вершин або ребер. Найбільш відомі алгоритми.
Алгоритм із упорядкованим списком ребер визначає для кожного ребра многокутника точки перетину із рядками, що проходять через середини інтервалів горизонтальних груп точок. Далі виконується сортування списку та виділення із нього пар елементів (х1,y1) та (x2,y2), між якими активуються відповідні піксели. Для складних многокутників генерується великий список, ефективність сортування якого можна підвищити роздільним сортуванням вздовж рядків.
Алгоритм заповнення за ребрами зводиться до наступного. Для кожного скануючого рядка, що перетинає ребро многокутника в точці (х1,y1), заповнює всі піксели, центри яких знаходяться справа від (х1,y1), тобто для яких х>х1.
Алгоритм зі списком ребер та прапорцем на першому кроці виявляє для кожного рядка пари початкових та кінцевих пікселів. Другий крок – заповнення пікселів між початковим та кінцевим. Тут кожний піксел оброблюється один раз, що в цілому зменшує часові витрати.
Необхідність відсікти зображення за границями деякої області зустрічається у комп’ютерній графіці досить часто [3]. В простих ситуаціях такою областю виступає прямокутник. Один із алгоритмів відсічення відрізків на границі довільного прямокутника зводиться до наступного.
Вся площина розбивається на 9 областей прямими, що утворюють прямокутник. У кожній із цих областей усі точки по відношенню до прямокутника розміщені однаково. Визначивши, до яких областей попали кінці відрізка, легко визначити, де конкретно потрібне відсічення. Для кожної області можна сформувати 4-х бітовий код, де біт 0 означає, що точка знаходиться зліва від прямокутника, біт 1 – вище прямокутника, біт 2 – справа від прямокутника, біт 3 – нижче прямокутника. Програму для реалізації алгоритму відсічення Сазерленда-Кохена, що реалізує наведений підхід, можна знайти у літературі [3].
Алгоритми заповнення ділянок. «Затравочні» алгоритми.
У методах затравочного заповнення вважають, що відома деяка (стартова) точка всередині замкнутого контура. Алгоритм шукає точки, що знаходяться поруч із затравочною і розміщені всередині контура. Якщо точка знаходиться всередині, то вона стає новою затравочною точкою та пошук продовжується рекурсивно.
Алгоритм заповнення із затравкою часто базується на використанні стеку і може виглядати так:
1. Затравочний піксел заноситься у стек.
2. Цикл, доки стек не пустий: дістаємо піксел із стека; фарбуємо піксел; для кожного із сусідніх 4-х (або 8-ми) пікселів перевіряємо, чи є він граничним або чи присвоєно вже йому необхідне значення; проігнорувати піксел в кожному з цих випадків; в противному випадку поміщаємо піксел до стеку.
Стек у цьому алгоритмі може бути значним за розміром і часто містить непотрібну інформацію.
Інші алгоритми затравочного типу удосконалюють цей підхід. Наприклад, у порядковому алгоритмі розмір стека зменшується за рахунок зберігання тільки одного затравочного піксела для кожного неперервного інтервалу – групи кількох поряд розміщених пікселів, обмежених заповненими або граничними. Затравочний піксел дістається із стека і вздовж рядка заповнюється вправо та вліво від нього цілий інтервал до досягнення граничного піксела. При цьому аналізуються також граничні піксели, що знаходяться на сусідніх рядках знизу та зверху. Ці піксели поміщаються до стека. На початку роботи до стека заноситься один (стартовий) піксел, робота припиняється, коли стек буде пустим. Цей алгоритм успішно справляється із зубцями та дірками в границі.
Принцип та алгоритми відсічення в КГ.
Перейти к: навигация, поиск
Отсечение или клиппинг (англ. clipping) — метод оптимизации в рендеринге и компьютерной графике, когда компьютер прорисовывает только ту часть сцены, которая может находиться в поле зрения пользователя.
В двухмерной графике, если пользователь увеличил изображение и на экране осталась видна только небольшая часть, программа может сэкономить процессорное время и память и не прорисовывать те части изображения, которые остались «за кадром».
Аналогично, в трехмерной графике, сцена может состоять из объектов (обычно треугольников), расположенных со всех сторон виртуальной камеры, но программе достаточно рендерить только те объекты, которые находятся в поле зрения. В трёхмерной графике, это нетривиальная задача. Для каждого треугольника в сцене требуется определить, входит он в поле зрения или нет. Если треугольник частично входит в поле зрения, то часть его придется отсечь.
Отсечение отрезков:
Алгоритм Коэна — Сазерленда
Алгоритм разделяет плоскость на 9 частей прямыми, которые образуют стороны прямоугольника. Каждой из 9 частей присваивается четырёхбитный код. Биты (от младшего до старшего) значат «левее», «правее», «ниже», «выше». Иными словами, у тех трёх частей плоскости, которые слева от прямоугольника, младший бит равен 1, и так далее.
Алгоритм определяет код конечных точек отрезка. Если оба кода равны нулю, то отрезок полностью находится в прямоугольнике. Если битовое И кодов не равно нулю, то отрезок не пересекает прямоугольник (т.к. это значит, что обе конечные точки отрезка находятся с одной стороны прямоугольника). В прочих случаях, алгоритм выбирает конечную точку, находящуюся вне прямоугольника, находит ближайшую к ней точку пересечения отрезка с одной из линий, образующей стороны прямоугольника, и использует эту точку пересечения как новую конечную точку отрезка. Укороченный отрезок снова пропускается через алгоритм.
Реализация алгоритма для трёхмерной модели идентична двумерной реализации, за исключением того, что вместо четырёхразрядного кода применяется шестиразрядный (дополнительные два бита глубины).
Алгоритм Лианга — Барски (англ.)
Быстрое отсечение (англ.)
Алгоритм Сайреса — Бека (англ.)
Николла — Ли — Николла (англ.)
Отсечение многоугольников:
Алгоритм Сазерленда — Ходгмана
Алгоритм Уайлера — Атертона
Інтерактивне графічне моделювання.
Системи координат в КГ.
1. Афинная (орты разные, углы любые) – общий случай декартовой системы.
Выбирается нулевая точка и два, не лежащих на одной прямой вектора, исходящих из этой точки.
и
могут
быть неодинаковой длины :
2. Декартова
3. Полярная – координаты точки определяются длиной вектора и углом:
|
|
|
|
4.
Сферическая – Сферическими координатами
называют систему координат для отображения
геометрических свойств фигуры в трёх
измерениях посредством задания трёх
координат
,
где
—
расстояние до начала
координат, а
и
—
зенитный и азимутальный угол соответственно.
5.
Цилиндрическая – Цилиндрической
системой координат называют трёхмерную
систему
координат, являющуюся расширением
полярной
системы координат путём
добавления третьей координаты (обычно
обозначаемой
),
которая задаёт высоту точки над
плоскостью.
6. Системы однородных координат - однородным представлением n-мерного объекта является его представление в (n+1) – мерном пространстве, полученном добавлением скалярного множителя.
Рекурсивні алгоритми в КГ. Фрактали.
Алгоритмы затравки, построчного сканирования, отсечения,заливки можно выполнить с помощью рекурсии.
Мы говорим, что функция рекурсивна (или что она основана на рекурсии), если в ней содержится одно или несколько обращений к самой себе или к другим функциям, в которых есть обращения к данной функции.
Фракта́л (лат. fractus — дроблёный, сломанный, разбитый) — геометрическая фигура, обладающая свойством самоподобия, то есть составленная из нескольких частей, каждая из которых подобна всей фигуре целиком. В математике под фракталами понимают множества точек в евклидовом пространстве, имеющие дробную метрическую размерность (в смысле Минковского или Хаусдорфа), либо метрическую размерность, отличную от топологической.
