Отримання зображень з допомогою комп’ютерної графіки
МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
Бердичівський політехнічний коледж
Контрольна робота
з предмета “Комп’ютерна графіка”
(варіант №5)
Виконав:
студент групи ПЗС-504
Журавська
О.О.
Перевірив
викладач:
Козік В.Ю.
м. Бердичів - 2007 р.
Зміст
1.
Колірна модель CMY та CMYK
2. Туман, тінь, відбиття в бібліотеці Opengl
3.
Засобами бібліотеки Opengl забезпечити зміну кольору створеного трикутника при
подвійному натисненні лівої кнопки миші
4.
Для попереднього практичного завдання вашого варіанту забезпечити операцію масштабування
використовуючи клавіші “+” та “-“
Список
використаної літератури
1. Колірна модель CMY та CMYK
Використовується для опису кольору при отриманні зображень
на пристроях, що реалізують принцип поглинання кольорів. У першу чергу, вона
використовується в пристроях, що друкують на папері [16]. Назва даної моделі
складається з назв основних субтрактивних кольорів: блакитного (Cyan),
пурпурного (Magenta) та жовтого (Yellow) (рис. 1.27).
Для того, щоб розібратися з поглинанням кольорів,
розглянемо рис. 1.28.
Нанесення жовтої фарби на білий папір означає, що
поглинається відбитий синій колір. Блакитна фарба поглинає червоний колір.
Пурпурна фарба — зелений. Комбінування фарб дозволяє отримати кольори, що
залишилися — зелений, червоний, синій та чорний. Чорний відповідає поглинанню
всіх кольорів при відбитті (рис. 1.29).
На практиці добитися чорного змішуванням важко через
неідеальність фарб, тому у принтерах використовують ще й фарбу чорного кольору
(blаск). Тоді модель називається CMYK.
Необхідно також відзначити, що не усякі фарби забезпечують
вказане вище віднімання кольорів CMY. Докладніше про це в [10].
У таблиці 1.2 для порівняння надамо опис деяких кольорів у
моделях RGB та CMY.
Співвідношення для перекодування кольору з моделі CMY в
RGB:
І зворотне — з моделі RGB в CMY:
Тут вважається, що компоненти кодуються числами в діапазоні
від 0 до 1. Для іншого діапазону чисел можна записати відповідні
співвідношення.
Для вирішення проблеми від'ємних коефіцієнтів, що існувала
для моделі RGB, в 1931 році Міжнародною Комісією по Освітленню (МКО) була
прийнята колориметрична система XYZ (рис. 1.30). У системі МКО XYZ в якості
основних кольорів були прийняті також три кольори, однак вони є умовними,
нереальними [1, 14].
Розглянуті вище моделі так або інакше використовують
змішування деяких основних кольорів. Тепер розглянемо колірну модель, яку можна
віднести до іншого, альтернативного типу.
У моделі HSV колір описується наступними параметрами —
колірний тон Н (hue), насиченість S (saturation), яскравість або світлота V
{value) [28]. Значення Н вимірюється у градусах від 0 до 360, оскільки тут
кольори розташовуються вздовж кола в такому порядку:
червоний, жовтогарячий, жовтий, зелений, блакитний, синій,
фіолетовий (відоме прислів'я російською мовою — "каждый охотник желает
знать, где сидят фазаны" — красный, оранжевый, желтый, зеленый, голубой,
синий, фиолетовый). Значення S та V знаходяться в діапазоні (0 ... 1).
Наведемо приклади кодування кольорів для моделі HSV (рис.
1.31). При S = 0 (тобто на осі V) — сірі тони. Значення V= 0 відповідає
чорному. Білий колір кодується як S = 0, V=1. Кольори, які розташовані вздовж
кола один проти одного, тобто які відрізняються по Я на 180 градусів, є
доповняльними [28]. Завдання кольорів за допомогою параметрів HSV досить часто
використовується у графічних системах, причому зазвичай демонструється
розгортка конуса.
Існують інші колірні моделі, побудовані аналогічно HSV, наприклад,
модель HLS (Hue, Lighting, Saturation) також використовує колірний конус.
У [48] є відомості про колірну модель СІЕ L*a*b*, яка була
прийнята МКО.
Усе перераховані вище колірні моделі описують колір трьома
параметрами. Вони описують колір у досить широкому діапазоні. Тепер розглянемо
колірну модель, у якій колір задається одним числом, але вже для обмеженого
діапазону кольорів (відтінків).
На практиці часто використовуються чорно-білі (сірі)
напівтонові зображення. Сірі кольори в моделі RGB описуються однаковими
значеннями компонентів, тобто ri = gi = bi. Таким чином, для сірих зображень
немає потреби використовувати трійки чисел — достатньо і одного числа. Це
дозволяє спростити колірну модель. Кожна градація визначається яскравістю Y.
Значення Y— 0 відповідає чорному, максимальне значення Y відповідає білому.
В якості прикладу розглянемо перетворення кольорових
зображень, представлених у моделі RGB, у чорно-білі напівтонові зображення у
градаціях сірого (подібно до того, як показуються кольорові фільми на екрані
чорно-білого телевізора). Для цього можна скористатися співвідношенням
де коефіцієнти при R, G та В враховують різну чутливість
зору до відповідних кольорів, а крім того, їхня сума дорівнює одиниці.
Зазвичай, обернене перетворення R = Y, G = Y, В = Y не дасть ніяких інших
кольорів, окрім градацій сірого.
Ще один приклад використання різних колірних моделей. При
запису кольорових фотографій в графічний файл формату JPEG виконується
перетворення опису кольорів з моделі RGB в модель (Y, СЬ, Сr). Це
використовується для подальшого ущільнення обсягів інформації растрового
зображення. При читанні файлів JPEG виконується обернене перетворення в RGB.
Різноманітність моделей обумовлена різними областями їх використання. Кожна із
колірних моделей була розроблена для ефективного виконання окремих операцій:
вводу зображень, візуалізації на екрані, друку на папері, обробці зображень,
зберігання в файлах, колориметричних розрахунків та вимірів. Перетворення
однієї моделі в іншу може призвести до викривлення.
2.
Туман, тінь, відбиття в бібліотеці Opengl
В OpenGL передбачено декілька функцій для
моделювання розповсюдження світла в об'ємі напівпрозорого середовища. Ви,
напевно, помічали, що в тумані чим більша відстань від точки спостереження до
об'єктів, тим більше колір об'єктів змішується з кольором туману. Починаючи з
деякої відстані, об'єктів не видно зовсім — це можна вважати як повну заміну
кольору віддалених об'єктів на колір туману (наприклад, сірий). Для цього можна
використати функцію glFog. Ця
функція дозволяє визначити властивість змішування кольорів об'єктів і туману в
залежності від відстані до об'єкту.
Змішування виконується
згідно з формулою: С =fCo + (1-f )Сf ,
де Со — колір об'єкту,
Сf— колір туману, С — колір
результату, f— функція, яка
враховує відстань точки об'єкта до точки спостереження, а також густину
середовища. В OpenGL передбачені
декілька різновидів функції/ Розглянемо це.
Для визначення типу
функції / треба викликати glFog із
параметром GL_FOG_MODE, наприклад, так:
Що це означає?
Експоненціальний варіант описується так:
3.
Засобами бібліотеки Opengl забезпечити зміну кольору створеного трикутника при
подвійному натисненні лівої кнопки миші
Я взяла для виконання свого завдання програму Delphi і побудувала трикутник
на формі придавши їй червоного кольору, при натиску змінює на рожевий, листинг
програми матиме такий вигляд:
(мал. №1 )
(мал. №2 )
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs,
OpenGL;
type
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormKeyPress(Sender: TObject; var Key: Char);
private
hrc: HGLRC;
h : GLfloat;
end;
var
frmGL: TfrmGL;
Vert:array[1..6,1..10] of GLfloat;
mx,my:byte; //коефіцієнти збільшення/зменшення
implementation
{$R *.DFM}
procedure TfrmGL.FormPaint(Sender: TObject);
begin
wglMakeCurrent(Canvas.Handle, hrc);
glViewPort (0, 0, ClientWidth, ClientHeight);
glClearColor (0.5, 0.5, 0.75, 1.0);
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (2.0, 0.0, 0.8); // текущий цвет примитивов
glBegin (GL_TRIANGLES);
glVertex3f (-1, -1, h);
glVertex3f (-1, 1, h);
glVertex3f (1, 0, h);
glEnd;
SwapBuffers(Canvas.Handle); // содержимое буфера - на экран
wglMakeCurrent(0, 0);
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;
procedure TfrmGL.FormCreate(Sender: TObject);
begin
SetDCPixelFormat(Canvas.Handle);
hrc := wglCreateContext(Canvas.Handle);
h := 0.0;
end;
procedure TfrmGL.FormDestroy(Sender: TObject);
begin
wglDeleteContext(hrc);
end;
procedure TfrmGL.FormKeyDown(Sender: TObject; var Key:
Word;
Shift: TShiftState);
begin
If Key = VK_ESCAPE then Close;
If Key = VK_SPACE then
begin
If ssShift in Shift
then h := h + 1
else h := h - 1;
Caption := Floattostr (h);
Refresh
end;
end;
procedure TfrmGL.FormKeyPress(Sender: TObject; var Key:
Char);
begin
if key = '-' then mx:=mx+1;
if key = '+' then mx:=mx-1;
FormPaint(Sender);
end;
4. Для попереднього практичного завдання вашого варіанту
забезпечити операцію масштабування використовуючи клавіши “+” та “-“
Потім для точного виконання завдання виконала слідуючий
алгоритм дій при цьому використала згідно варіанту клавіші «+» та «-», що по
умові завдання виконують наближення та відділення фігури на фоні:
procedure TfrmGL.FormKeyPress(Sender: TObject; var Key:
Char);
begin
if key = '-' then mx:=mx+1;
if key = '+' then mx:=mx-1;
InvalidateRect(Handle, nil, False);
end;
end.
Список використаної літератури
1.
Блінова Т.О., Порєв В.М. Комп’ютерна графіка / За ред. В.М.Горєва. – К.:
Видавництво “Юніор”, 2004. – 456с., іл.
2.
С.В.Глушаков, Г.А.Крабе Компютерная графика, Харьков 2002
3.
OpenGl, технология ставшая символов, Учебник в примерах.
4.
Конспект лекцій.