Комп'ютерна 2D-графіка

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Комп'ютерна 2D-графіка — комп'ютерне покоління цифрових зображень — головним чином складається з двовимірних моделей (таких як геометричні 2D-моделі, текст і цифрові зображення) і методів, визначених для них. Термін може також позначати галузь інформатики, яка включає як методи, так і самі моделі.

Спрайт растрової графіки (зліва) та маска (справа)

Комп'ютерна 2D-графіка використовується, головним чином, в програмах, які були розроблені на базі традиційних технологій друку і малювання, таких як книгодрукування, картографія, креслення, реклама, тощо. У цих додатках двовимірне зображення — не просто представлення реального об'єкта, але і незалежний культурний експонат з власним семантичним значенням; тому двовимірні моделі є кращими, так як вони дають більш безпосередній контроль над зображенням, ніж комп'ютерна 3D-графіка (підхід якої швидше схожий на фотографію, ніж типографію).

У багатьох областях, таких як комп'ютерна верстка, інженерія і бізнес, зображення документа, створеного методами комп'ютерної 2D-графіки, може бути суттєво зменшеним, ніж відповідне цифрове зображення — у 1000 разів, а то й навіть більше. Таке представлення більш гнучке, тому, що воно може бути відрендерено для різних значень роздільної здатності, що робить його придатним для різних пристроїв виведення. З цих причин документи і ілюстрації часто зберігаються або передаються як графічні 2D-файли.

Епоха комп'ютерної 2D-графіки почалася в 1950-х, і ґрунтувалася на пристроях векторної графіки. В наступні десятиліття вони в основному витіснялися пристроями, заснованими на растровій графіці. Мова PostScript і протоколи X Window System були віхами в цій області.

Методи 2D-графіки[ред. | ред. код]

2D-графічні моделі можуть об'єднувати геометричні моделі[en] (векторна графіка), цифрові зображення (растрова графіка), набраний текст (з певним змістом, стилем шрифту і розміром, кольором, положенням і орієнтацією), математичні функції, рівняння і інше. Ці компоненти можуть змінюватися і управлятися двовимірними геометричними перетвореннями[en], такими як паралельне перенесення, обертання, масштабування. У об'єктно-орієнтованій графіці зображення побічно описано об'єктом, наділеним методом самостійного рендеринга — процедура, яка призначає колір на пікселі зображення довільним алгоритмом. Складні моделі можуть бути побудовані об'єднанням більш простих об'єктів в парадигмах об'єктно-орієнтованого програмування.

Паралельне перенесення переміщує кожну точку на однакову відстань в певному напрямку.
Композиція двох відбиттів відносно незбіжних паралельних осей дає паралельне перенесення.

У евклідовій геометрії паралельне перенесення переміщує кожну точку на однакову відстань в певному напрямку. Паралельне перенесення може бути описане як рух твердого тіла, також як і обертання і відбіття. Паралельне перенесення може також інтерпретуватися як додавання однакового вектора до кожної точки, або як зміна початку системи координат. Оператор паралельного перенесення — оператор такий, що .

Якщо v буде фіксованим вектором, то паралельне перенесення Tv буде відбуватися як Tv(p) = p + v.

Якщо T — паралельне перенесення, то зображення підмножини A під функцією T є перенесенням А по Т. Перенесення часто записується А + v.

В Евклідовому просторі будь-яке паралельне перенесення — ізометрія. Набір всіх паралельних перенесень формує групу паралельних перенесень Т, яка ізоморфна до самого простору і нормальної підгрупи Евклідовій групи E(n). Факторгрупа E(n) по T ізоморфна до ортогональної групи O(n):

E(n) / TO(n).

Паралельне перенесення[ред. | ред. код]

Так як паралельне перенесення — афінне перетворення, а не лінійне, однорідні координати зазвичай використовуються, щоб представити оператор паралельного перенесення у вигляді матриці і таким чином зробити його лінійним. Таким чином ми пишемо 3-мірний вектор w = (wx, wy, wz) використовуючи 4 однорідні координати як w = (wx, wy, wz, 1).[1]

Щоб перенести об'єкт вектором v, кожен гомогенний вектор p (записаний в однорідних координатах) повинен бути помножений на матрицю паралельного перенесення:

Як показано нижче, множення дасть очікуваний результат:

Інверсія матриці паралельного перенесення може бути отримана, повністю змінивши напрямок вектора:

Такий же результат матриці паралельного перенесення виходить при додаванні векторів:

Оскільки додавання векторів комутативне, множення матриць паралельного перенесення також коммутативное (на відміну від множення довільних матриць)

Обертання[ред. | ред. код]

У лінійній алгебрі матриця обертання — матриця, яка використовується, щоб виконати обертання в Евклідовому просторі.

обертає точки в декартовій площині проти годинникової стрілки на кут θ від початку декартової системи координат. Щоб виконати обертання, використовуючи матрицю обертання R, положення кожної точки має бути представлено вектором-стовпцем v, що містить координати точки. Обертається вектор отриманий за допомогою матричного множення Rv. Так як матричне множення не має ніякого ефекту на нульовий вектор (тобто, на початок координат), матриці обертання можуть використовуватися тільки для опису обертання навколо початку системи координат.

Матриці обертання надають простий алгебраїчний опис таких обертань і активно використовуються для обчислень в геометрії, фізиці та комп'ютерній графіці. У 2-вимірному просторі обертання може бути просто описано кутом обертання θ, а також 4 елементами матриці обертання з 2 рядами і 2 колонками. У 3-вимірному просторі кожне обертання може інтерпретуватися як обертання на даний кут навколо єдиної фіксованої осі обертання (див. Теорема обертання Ейлера), і, отже, воно може бути просто описано кутом і вектором з 3 елементами. Однак воно може також бути представлено 9 елементами матриці обертання з 3 рядами і 3 колонками. Поняття обертання зазвичай не використовується в розмірах вище, ніж 3; є поняття обертального зміщення, яке може бути представлено матрицею, але при цьому ніяк не пов'язано з єдиною віссю або кутом. Матриці обертання — квадратні матриці з дійсними елементами. Більш конкретно вони можуть бути охарактеризовані як ортогональні матриці з детермінантою 1:

.

Множина всіх таких матриць розміру n формує групу, відому як спеціальна ортогональна група SO(n).

Двовимірна площина[ред. | ред. код]

Обертання проти годинникової стрілки вектора на кут θ. Вектор спочатку збігається з віссю х.

У двох вимірах будь-яка матриця обертання має наступну форму:

.

Це обертає вектори-стовпці за допомогою наступного множення матриць:

.

Так, координати (x',y') точки (x, y) після обертання:

,
.

Напрямок векторного обертання проти годинникової стрілки, якщо θ позитивний (наприклад, 90 °), і за годинниковою стрілкою якщо θ негативний (наприклад, -90 °).

.

Нестандартна орієнтація системи координат[ред. | ред. код]

Обертання вектора на кут θ з нестандартними осями.

Якщо використовується стандартна правобічна Декартова система координат з віссю x, спрямованою праворуч, і віссю y, спрямованої вгору, обертання R(θ) відбувається проти годинникової стрілки. Якщо ж застосовується лівостороння Декартова система координат з x, також спрямованим вправо, але з віссю y, спрямованої вниз, R(θ) направлено за годинниковою стрілкою. Такі нестандартні орієнтації рідко використовуються в математиці, але поширені в комп'ютерній 2D-графіці, яка часто має початок системи координат в лівому верхньому кутку і віссю Y, що йде вниз екрану або сторінки.[2]

Поширені обертання[ред. | ред. код]

Особливо корисні матриці для обертань на 180° і на 90°:

(Обертання на 90° проти годинникової стрілки)
(Обертання на 180° в будь-якому напрямку — на півоберта)
(Обертання проти годинникової стрілки на 270°, так само, як і обертання за годинниковою стрілкою на 90°)

Масштабування[ред. | ред. код]

Масштабування може бути представлено матрицею масштабування. Для масштабування об'єкта вектором v = (vx, vy, vz), кожна точка p = (px, py, pz) повинна бути помножена на дану матрицю масштабування:

Як показано нижче, множення дасть очікуваний результат:

Таке масштабування змінює діаметр об'єкта за коефіцієнтом пропорційності , площу за коефіцієнтом між найменшим і найбільшим добутком двох коефіцієнтів пропорційності і об'єм за добутком всіх трьох.

Масштабування рівномірно тоді й лише тоді, коли масштабні коефіцієнти рівні (vx = vy = vz). Якщо всі, крім одного з масштабних коефіцієнтів рівні 1, ми маємо спрямоване масштабування.

В геометрії Евкліда, рівномірне масштабування (ізотропне масштабування,[3] гомотетія) являє собою лінійне відображення, збільшення або зменшення об'єктів на коефіцієнт масштабування, який однаковий за всіма напрямами. Результат рівномірного масштабування подібний (в геометричному сенсі) до оригіналу. Коефіцієнт масштабування 1, як правило, допускається, так що неконгруентні форми також класифікуються як схожі. (Деякі підручники спеціально виключають цю можливість, так само, як наприклад виключення того, що квадрати є прямокутниками або кола є еліпсами.)

Більш загальний випадок — це масштабування з окремим коефіцієнтом масштабування для кожного напрямку осі. Нерівномірне масштабування (Анізотропія|анізотропне масштабування) — масштабування, коли принаймні один з коефіцієнтів масштабування, відрізняється від інших; Особливий випадок являє собою спрямоване масштабування або розтягнення (в одному напрямку). Нерівномірний масштабування змінює форму об'єкта; наприклад, квадрат можна перетворити в прямокутник, або в паралелограм, якщо сторони квадрата не паралельні осям масштабування (кути між прямими, які паралельні осям, зберігаються, але не для всіх кутів).

Масштабування в найзагальнішому сенсі — Афінне перетворення з діагональною матрицею. Вона включає в себе випадок, коли три напрямки зміни масштабу зображення не перпендикулярні. Вона включає в себе також випадок, коли один або більше масштабних коефіцієнтів дорівнюють нулю (проекція), а також випадок одного або декількох негативних масштабних коефіцієнтів. Останнє відповідає комбінації масштабування і належного вигляду відображення: уздовж ліній в певному напрямку, ми беремо відображення в точці перетину з площиною, яка не обов'язково повинна бути перпендикулярна; тому це є більш загальним випадком, ніж звичайне відображення на площині.

Використання однорідних координат[ред. | ред. код]

У проективній геометрії, яка часто використовується в комп'ютерній графіці, точки представлені з використанням однорідних координат. Для масштабування об'єкта вектором v = (vx, vy, vz), кожна точка p = (px, py, pz) повинна бути помножена на дану матрицю масштабування:

Як показано нижче, множення дасть очікуваний результат:

Так як останній компонент однорідних координат можна розглядати як знаменник трьох інших компонентів, масштабування за загальним коефіцієнтом s (рівномірне масштабування) може бути досягнуто за допомогою цієї матриці масштабування:

Для кожного вектора p = (px, py, pz, 1) ми мали б

яку є однорідною до

Малювання[ред. | ред. код]

Зручний спосіб створити складне зображення - почати з порожнього «полотна» растрової карти (масив пікселів, також відомий як бітова карта), заповненої деяким однорідним кольором, а потім «малювати» або «вставити» прості ділянки кольору, у відповідному порядку. Зокрема, полотно може бути кадровим буфером для дисплея.

Деякі програми безпосередньо встановлюють колір пікселів, але більшість з них буде спиратися на графічні 2D-бібліотеки і/або відеокарту, яка, як правило, буде здійснювати наступні операції:

  • вставляти зображення у вказане місце на полотно;
  • писати рядок символів з заданим шрифтом, положенням і під заданим кутом;
  • малювати прості геометричні фігури, наприклад, трикутник, з певними кутами, або коло з заданим центром і радіусом;
  • малювати відрізок, дугу або просту криву віртуальним пером заданої ширини.

Розширені моделі кольорів[ред. | ред. код]

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

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

Рівні[ред. | ред. код]

Моделі, які використовуються в комп'ютерній 2D-графіці, як правило, не передбачають тривимірних форм, або тривимірних оптичних явищ, таких як тіні, освітлення, відбиття, заломлення і т. д. Проте, як правило, можна змоделювати кілька рівнів (концептуально, використовуючи чорнила, папір або плівку — непрозору, напівпрозору або прозору, викладену в певному порядку. Впорядкування зазвичай визначається одним числом (глибина рівнів, або відстань від глядача).

Багаторівневі моделі іноді називають комп'ютерною 2½-D-графікою. Вони дозволяють імітувати традиційні методи креслення і друку на основі плівки і паперу, такі як різання і вставка; і дозволяють користувачеві редагувати будь-який рівень, не зачіпаючи інші. З цих причин, вони використовуються в більшості графічних редакторів. Багаторівневі моделі також дозволяють краще згладжувати складні малюнки і забезпечують надійну модель для певних методів.

Моделі з рівнями також використовуються, щоб дозволити користувачеві запобігти небажаної інформації при перегляді або друку документа, наприклад, дороги і/або залізниці на карті; анотації, написані від руки, на діловому листі.

У багаторівневій моделі кінцеве зображення отримується за допомогою «малювання» або «вставки» кожного рівня, в порядку убування глибини, на віртуальному полотні. Концептуально, кожен рівень спочатку візуалізують самостійно, що дає цифрове зображення з потрібною роздільною здатністю, яке потім наноситься поверх полотна, піксель за пікселем. Повністю прозорі частини рівня звичайно ж не візуалізуються. Рендеринг і малювання можуть робитися паралельно, тобто, кожен піксель рівня може бути намальований на полотні, як тільки воно буде зроблено за допомогою процедури рендеринга.

Рівні, які складаються з складних геометричних об'єктів (наприклад, текст або ламані лінії) можуть бути розбиті на більш прості елементи (символи або відрізки відповідно), які потім будуть пофарбовані у вигляді окремих рівнів в деякому порядку. Проте, це рішення може привести до небажаних артефактів накладення спектрів всюди, де два елементи перекриваються один і той же піксель.

Апаратне забезпечення 2D-графіки[ред. | ред. код]

Сучасні відеокарти в переважній більшості випадків використовують растрові методи, розділюючи екран на прямокутну сітку пікселів. Це рішення використовується через відносно низьку вартість відеоадаптерів на основі растру в порівнянні з векторним графічним апаратним забезпеченням. Більшість графічного апаратного забезпечення має внутрішню підтримку передачі бітових блоків (англ. blitting) і/або спрайтів. Співпроцесор, спеціалізований на передачу бітових блоків, відомий як бліттер.

Класичні графічні 2D-чипи і графічні процесори від 1970-х до 1980-х років, в яких використовувалася 8-біт архітектура, а пізніше і 16-біт, були основою для ігрових приставок, домашніх комп'ютерів, таких як:

Програмне забезпечення 2D-графіки[ред. | ред. код]

Багато графічних інтерфейсів, в тому числі Mac OS, Microsoft Windows або X Window System, в основному базуються на концептах 2D-графіки. Таке програмне забезпечення надає візуальне середовище для взаємодії з комп'ютером і зазвичай включає в себе деяку форму менеджера вікон, щоб допомогти користувачеві розрізняти різні програми. Інтерфейс в більшості програмах, як правило, - 2D, частково через те, що найбільш поширені пристрої введення, такі як миша, обмежені в двох вимірах руху.

2D-графіка відіграє дуже важливу роль у контролі периферійних пристроїв, таких як принтери, плоттери, машини для різки листового заліза і т. д. Вони також використовувалися в більшості ранніх відеоіграх; і до сих пір використовуються для карткових і настільних ігор, таких як шахи, маджонг і т. д.

2D-графічні редактори або програми малювання — програмне забезпечення прикладного рівня для створення зображень, діаграм та ілюстрацій шляхом прямого маніпулювання (за допомогою миші, графічного планшета, або аналогічних пристроїв) над примітивами 2D-комп'ютерної графіки. Ці редактори зазвичай забезпечують геометричні примітиви, а також цифрові зображення; а деякі навіть підтримують процедурні моделі. ілюстрація, як правило, представлена у вигляді багаторівневої моделі, часто з ієрархічною структурою, щоб зробити редагування зручнішим. Ці редактори зазвичай виводять графічні файли, де рівні і примітиви зберігаються окремо в їх первинному вигляді. MacDraw[en], введений в 1984 році з лінійкою комп'ютерів Macintosh, був одним з перших прикладів цього класу; останніми прикладами є комерційні продукти Adobe Illustrator і CorelDRAW, і вільні редактори, такі як Xfig[en] або Inkscape. Є також багато 2D-графічних редакторів спеціалізованих для деяких типів малюнків, таких як електричні, електронні та НВІС-діаграми, топографічні карти, комп'ютерні шрифти і т. д.

Редактори зображень спеціалізовані на маніпуляції з цифровими зображеннями, в основному за допомогою «вільної руки» малювання/забарвлення і обробки сигналів операцій. Вони, як правило, використовують парадигми малювання, в якій користувач керує віртуальними ручками, пензлями й іншими художніми інструментами для нанесення фарби на віртуальне полотно. Деякі графічні редактори підтримують багаторівневу модель; Проте, з метою підтримки операцій обробки сигналів, таких як розмивання, кожен рівень, як правило, представлений у вигляді цифрового зображення. Таким чином, будь-які геометричні примітиви, які редактором одразу перетворюються в пікселі, намальовані на полотні. Назва растровий графічний редактор іноді використовується, щоб виділити цей підхід із загальних редакторів, які також займаються і векторною графікою. Одним з перших популярних графічних редакторів був MacPaint[en] від Apple, компаньйон MacDraw[en]. Сучасні приклади є безкоштовними редакторами GIMP, а також комерційні продукти Photoshop і Paint Shop Pro. Цей клас також включає в себе безліч спеціалізованих редакторів - для медицини, дистанційного зондування, цифрової фотографії і т. д.

Розвиток анімації[ред. | ред. код]

З відродженням[4]:8 2D-анімації, вільні і запатентовані програмні пакети стали широко доступні для любителів і професійних аніматорів. За допомогою програмного забезпечення, такого як RETAS[en] і Adobe After Effects, фарбування та компонування може бути зроблено за менший час.

Щоб полегшити і прискорити процес цифрової 2D-анімації, були розроблені різні підходи[4]:38. Наприклад, шляхом створення векторних ілюстрацій в такому інструменті, як Adobe Flash, художник може використовувати програмне забезпечення керованого автоматичного забарвлення.

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. Richard Paul, 1981, Robot manipulators: mathematics, programming, and control: the computer control of robot manipulators, MIT Press, Cambridge, MA
  2. W3C recommendation (2003). Scalable Vector Graphics -- the initial coordinate system. 
  3. Durand; Cutler. Transformations (PowerPoint). Massachusetts Institute of Technology. Процитовано 12 September 2008. 
  4. а б Pile Jr, John (May 2013). 2D Graphics Programming for Games. New York, NY: CRC Press. ISBN 1466501898.