Реферат Адитивною кольорова модель RGB

>МІНІСТЕРСТВООСВІТИ УКРАЇНИ

>Бердичівськийполітехнічний коледж


>КОНТРОЛЬНАРОБОТА

із предмета “>Комп’ютернаграфіка”


>Виконав:студентгрупиПзс-504

>ГорпиничО.О.

>Перевірив >викладач: >Козік В.Ю.


м.Бердичів

2007 р.


1.Адитивнакольорова модельRGB

 

>Ця модельвикористовується дляописукольорів, котріможуть бутиотримані задопомогоюпристроїв, щоосновані напринципівипромінювання. Уякостіосновнихкольоріввибраночервоний (>Red),зелений (>Green) тасиній (Blue).Іншікольори тавідтінкиможуть бутиотриманізмішуваннямпевноїкількості шкірного ізосновнихкольорів.

>СтислоісторіясистемиRGB така. Томас Юнг (1773-1829)узяв триліхтарі йпристосував перед тимчервоний,зелений йсинійсвітлофільтри. Так булиотриманіджереласвітлавідповіднихкольорів.Направивши набілийекрансвітлоцихтрьохджерел,вчений здобувшитакезображення (рис. 1.21).

Наекранісвітло відджерел давалокольорові кола. Умісцяхперетинаннякілспостерігалосязмішуваннякольорів.Жовтийколір давалозмішування червоного і зеленого,блакитний —суміш зеленогоЙсинього,пурпурний —синього і червоного, абілийколірутворювавсязмішанням всіхтрьохосновнихкольорів.Якийсь годину тому,Джеме Максвелл (1831-1879)виготовивпершийколориметр, задопомогоюякого людина моглапорівнюватимонохроматичнийколір йколірзмішування взаданійпропорціїкомпонентівRGB.Регулюючияскравість шкірного ізкомпонентів, щозмішуються, можнадомогтисявирівнюваннякольорівсуміші імонохроматичноговипромінювання. Цеописується втакийспосіб:


деr, g йЬ —кількостівідповіднихосновнихкольорів.

>Співвідношеннякоефіцієнтівr, g і b Максвелл наочно показавши задопомогоютрикутника,згодом названого йогоім'ям [1].Трикутник Максвеллаєрівнобічним, у його вершинахрозташовуютьсяосновнікольори — R, G І У (рис. 1.22). Ззаданої точкипроводятьсялінії,перпендикулярні сторонамтрикутника.Довжинакожноїлінії іпоказуєвідповідну величинукоефіцієнтаr, g чиЬ.Однаковізначенняr = g =Ьмаютьмісце вцентрітрикутника йвідповідаютьбіломукольору.Слідтакожзазначити, щодеякікольоривідображаються точкамизовнітрикутникаRGB —цеозначаєвід'ємнезначеннявідповідногоколірногокоефіцієнта. Сумакоефіцієнтівдорівнюєвисотітрикутника, а привисоті, щодорівнюєодиниці,r + g + b = 1.

якосновнікольори, Максвеллвикористовуваввипромінювання із такимидовжинамихвиль: 630, 528 й 457 нм.

Дотеперішнього години системаRGBєофіційним стандартом.РішеннямМіжнародної Комісії ізОсвітлення —МКО (>СІЕ —Commision International deVEclairage) у 1931році булистандартизованіосновнікольори, котрі було б рекомендовановикористовувати вякості R, G й У. Цемонохроматичнікольорисвітловоговипромінювання іздовжинамихвильвідповідно:

R — 700 нм, G — 546.1 нм, У — 435.8 нм.

Червонійколірвиходить задопомогоюлампирозжарювання ізфільтром. Дляодержаннячистихзелених йсиніхкольоріввикористовуєтьсяртутна лампа.Такожстандартизованезначеннясвітлового потоку для шкірного основногокольору [1].

>Ще однимважливим параметром длясистемиRGBєколір,одержаний послезмішуваннятрьохкомпонентів урівнихкількостях. Цебілийколір.Виявляється, у тому,щобзмішуваннямкомпонентів R, G й Уодержатибілийколір,яскравостівідповіднихджерел неповинні бутирівними, азнаходитися упропорції

>Якщорозрахункикольоруробляться дляджерелвипромінювання ізоднаковоюяскравістю, тозазначенеспіввідношенняяскравостей можнаврахувативідповіднимимасштабнимикоефіцієнтами [14].

>Теперрозглянемоіншіаспекти.Колір,створюванийзмішуваннямтрьохосновнихкомпонентів, можнапредставити вектором утривимірнійсистемі координат R, G й У,зображеній на рис. 1.23.

>Чорномукольорувідповідає центр координат — точка (0, 0, 0).Білийколірвираженомаксимальнимзначеннямкомпонентів.Нехайцемаксимальнезначенняуздовжкожноїосідорівнюєодиниці.Тодібілийколір —це вектор (1, 1, 1). Крапки, що лежати надіагоналі куба відчорного добілого,маютьоднаковізначення координат:Ri=Gi=Bi. Цеградаціїсірого — їхнього можнавважатибілимкольоромрізноїяскравості.Узагаліговорячи,якщоусікомпоненти вектора (>r, g, b)помножити наоднаковийкоефіцієнт (>k = 0 ... 1 ... 1), токолір (>kr,kg,kb)зберігається,змінюється лишеяскравість. Тому дляаналізукольоруважливеспіввідношеннякомпонентів.Якщо вколірномурівнянні

>розділитикоефіцієнтиr, g і b наїхню суму:

Церівняннярепрезентуєвекторикольору (>r', g', b'), що лежати водиничнiйплощиніr' + g' + b' = 1.Іншими словами, миперейшли від куба дотрикутника Максвелла.

Уходіколориметричнихекспериментів буливизначенікоефіцієнти (>r', g', b'), щовідповідають чистимомонохроматичнимкольорам.Найпростішийколориметр —>це призма ізбілогогіпсу,граніякоїосвітлюютьджереламисвітла. Наліву граньспрямованеджерело чистогомонохроматичноговипромінювання, а права граньосвітлюєтьсясумішшютрьохджерелRGB.Спостерігачбачитьодночаснодвіграні, щодозволяєфіксуватирівністькольорів (рис. 1.24).

>Результатиекспериментів можназобразитиграфічно (рис. 1.25).


якбачимо,коефіцієнтиr', g' й b'можуть бути йпозитивними, йвід'ємними. Колицеозначає? Ті, щодеякімонохроматичнікольори неможуть бутипредставленісумоюкомпонентів R, G й B. Алі яквідняти ті, чого немає? Длявирівнюваннякольорудовелосядодати домонохроматичноговипромінювання один ізкомпонентів R, G чи У.Наприклад,якщомонохроматичневипромінювання длядеякогозначеннярозбавлялосячервоним, тіце можнавиразити так:

яквиявилося,жоденколірмонохроматичноговипромінювання (завинятком самихкольорів R, G й У) неможе бути уявлень лишепозитивнимизначеннямикоефіцієнтівзмішування. Це наочно можназобразити задопомогоюколірногографіка,побудованого наосновітрикутника Максвелла (рис. 1.26).


>Верхнячастинакривоїлініївідповідає чистимомонохроматичнимкольорам, анижнялінія — від 380 нм до 780 нм —представляє такназиваніпурпурнікольори (>сумішсинього і червоного), котрі неємонохроматичними. Крапки, що лежатиусередині контурукривої,відповідаютьреальнимкольорам, а позацим контуром —нереальнимкольорам. Крапкиусерединітрикутникавідповідаютьпозитивнимзначеннямкоефіцієнтівr', g' та b' йпредставляютькольори, котрі можнаодержатизмішуваннямкомпонентівRGB.

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

>Ще одним чинником, щосприяєпопулярностісистемиRGB,єїїнаочність —основнікольоризнаходяться втрьохчіткопомітнихділянках видимого спектра.

>Крім того,однією ізгіпотез, щопояснюютьколірнийзірлюдини,єтрикомпонентнатеорія, котра утверждает, що взоровійсистемілюдиниє тритиписвітлочутливихелементів. Один типелементівреагує назелений,інший тип — начервоний, атретій тип — насинійколір.ТакагіпотезависловлюваласящеЛомоносовим [14],їїобґрунтуваннямзаймалися багатовчених,починаючи із Т. Юнга.Утім,трикомпонентнатеорія неєєдиноютеорієюколірногозорулюдини.


2. >Об’ємніоб’єкти,Tess-,NURBS –об’єктибібліотекиOpengl

УOpenGLпередбаченідеякістандартні,найчастішевикористовуванітривимірніоб'єкти.Набір такі форми уявлень убібліотеціGLU (>UtilityLibrary), щореалізована увигляді модуляglu32.dll ієневід'ємноючастиноюOpenGL.Вонамістить усобікількафункційкеруванняпроекціями (одну із які —gluPerspective — ми ужевикористовували),функції роботи ізполігонами,кривими таповерхнями типуB-сплайнів ііншіфункції.

>РозглянемофункціїgluCylinder,gluSphere,gluDisk ІgluPartialDisk .

>Перерахованівищеоб'єктиназвані ">quadricobjects".Параметриslices йstacksвизначаютькількість пласких граней,використовуваних дляапроксимаціїповерхні. Ащобнарисуватиподібнийоб'єкт,потрібновикликатифункціюgluNewQuadric, а послерисуваннязвільнитипам'ятьвикликомфункціїgluDeleteQuadric

Заумовчаннямкоженоб'єктрисується зсуцільнимзаповненням.Змінити стиль показу можнавикликомфункціїgluQuadricDrawStyle.Можназадатитакістилі показу: увиглядіточок,розташованих у верхахбагатокутника;каркаснезображення;суцільнезаповнення ісилует (>різновид каркасного).Наприклад,виклик.



>Об'єктиданого типурозташовуються упросторі вцентрі координат (0, 0, 0) ізврахуваннямматриціgl_modelview. Тому,щобнарисуватизображенняоб'єкта внеобхідномумісці,потрібновідповідним чиномзмінитицюматрицю,наприклад, задопомогоюфункційglTranslate йglRotate.Нижченаведений прикладілюструє показоб'єктів типу ">quadricobjects ".

>Зображення, щостворюєтьсяпрограмоюStudex55,наведене на рис. 11.16.

Припідготовці цого малюнка додруку бувзміненийколіртла набілий. Однак наекранімоніторазначнокращевиглядаєтемно-синійколір. Утекстіпрограми:


Для текстурвикористовуютьсярастри.Вониможуть бутиодномірними чидвовимірними.Щобнакласти текстуру,необхідновиконатинаступніоперації.

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

2.Заповнитимасивтекстури. Тут вартовраховувати ті, уякомуформаті уявлень растртекстури.Якщопікселитекстурипредставляються уформатіRGB (24біта напіксел), тобайти вмасивіповиннірозташовуватися увиглядітрійок (R, G, У).Зазначимо, що вмасивахDIB Windows АПІколірнікомпонентирозташовуються узворотному порядку,тобто (У, G, R).

3.Після того якмасиввідкритий,передатиOpenGL адресоюмасиву іінші йогопараметри.РобитьсяцевикликомфункціїglTexImage2D длядвовимірноїтекстури йglTexImage1D дляодномірної.

4.Задатипараметрифільтраціїтекстури (>викликомфункціїglTexParameter) дляякісноговідображенняоб'єктіврізнихрозмірів.

5. Передбезпосереднімрисуваннямоб'єктіввстановити режимвикористаннятекстури.РобитьсяцевикликомфункціїglEnable (>GL_texture_2d) Дляоб'єктів типу ">quadricobjects " (лантуха,циліндр, диск)требатакожвикликатифункцію

6. Прививодіполігональних граней (>gl_triangles,gl_quads йїмподібних)вказативідповідністьтекстурних координат й координат упросторіоб'єктів.Зробитице можнавикликомфункцій зсімействаglTexCoord. Так,наприклад,функціяglTexCoord2f (>s,t)вказує на точку ізтекстурними координатамиs йt.НаступнийвикликфункціїglVertex3f <>x,y,z),одночасно ззавданням координатграні,також ставити ввідповідністькоординати (>s,t) координатам (x, у,z).

На рис. 11.17. показань прикладвідображення координатчотирикутноїграні.

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


Узагальномувипадкутекстуризручнішезберігати у файлах на диску. Цеможуть бутидоситьскладнізображення,виготовленізаздалегідь. Упрограмах для Windowsрастри можнастворювати увиглядіресурсів, котрі послекомпіляціїзаписуються увиконуваніфайли,наприклад, уфайлиЕХЕ. А можнавикористовувати іокреміфайлистандартнихформатів. Уостанньомувипадкутекстуризручнобагаторазоворедагувати.

>Розглянемо, як можнавикористовуватитекстури,записані у файлахBMP.Такіфайлизберігають растр уформатіDIB (>Device IndependentBitmap). ФорматDIB схожий на форматтекстуриOpenGL,однак,єдеяківідмінності. То вDIBвикористовуєтьсявирівнюваннярядків награницюподвійного слова.Іншими словами,кількістьбайтів у рядку растразавжди винна бутикратноючотирьом —якщоце негаразд, тододаютьзайвібайти. У нашомувипадкусприятливим чинникомє ті, щорозміри текстурOpenGLповиннідорівнюватистепеневідвійки.Починаючи ізрозмірів погоризонталі, щодорівнюютьчотирьом,24-бітнірастриDIBавтоматичнорозташовуються впам'яті то йтекстуриOpenGL, —вирівнюваннявідсутнє.

>Якщовикористовувати24-бітнуглибинукольору, то болееістотноювідмінністюDIB від формату текстурOpenGLє порядокрозташуваннябайтівR,G й У. Длямасивів текстурOpenGLповинне бутиR-G-B, в годину як уDIBнавпаки:B-G-R. Тому послечитання файлунеобхіднопереставлятибайти R й У.

Нашанаступнапрограма (>studex57)ілюструєчитаннятекстури із файлуBMP.Цяпрограмаємодифікацієюпопередньоїпрограми (>Studex56).ЗміниторкнулисяфункціїInitMyTexture. УїїтіловбудованафункціячитанняфайлівBMP, що названаReadTextureBMP.Крім того, тутбажановикористати текстурубільшоїроздільноїздатності,наприклад,розмірами 256*128 —відповіднозмінітьhorTexture таvertTexture.

>Можливо, у цьому замкузамаловікон й дверей. Алі їхні недоладнододати в текстуру задопомогоюбудь-якого растровогографічного редактора, чи негаразд? Хоча,можливо,доведетьсявикористовувати ужедекілька текстур длярізнихстін.

>Слідзазначити, що наведенавищефункціяReadTextureBMP неєуніверсальною — вона нерозрахована наіншірізновиди форматуфайлівBMP.Цюфункціюнеобхідноістотновидозмінити,якщопередбачаєтьсячитання,наприклад,ще і256-кольоровихрастрів.Такірастричитатитрохискладніше,оскількипотрібнозавантажувати іустановлюватипалітру. Тім,хто нехочевласноручпрограмуватичитанняфайлів, можнапорекомендувативикористовуватифункціюauxDIBImageLoad 3бібліотекиGIAUX.


3. >ЗасобамибібліотекиOpengl забезпечитизмінукольоруствореної точки принатисненнілівої кнопкимиші

(мал.1)

(рис. 2)

>unitUnit1;

>interface

>uses

Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,

>OpenGL;

>type

>TfrmGL =class(TForm)

>procedureFormCreate(Sender:TObject);

>procedureFormPaint(Sender:TObject);

>procedureFormDestroy(Sender:TObject);

>procedureFormKeyDown(Sender:TObject;varKey: Word;

>Shift:TShiftState);

>procedureFormResize(Sender:TObject);

>procedureFormKeyPress(Sender:TObject;varKey:Char);

private

DC :HDC;

>hrc:HGLRC;

>ry :GLfloat;

>tx :GLfloat;

>quadObj :GLUquadricObj;

end;

>var

>frmGL:TfrmGL;

>mode : (>POINT,LINE,FILL,SILHOUETTE) =FILL;

>gluobj : (>SPHERE,CONE,CYLINDER,DISK) =SPHERE;

>orientation : (>OUTSIDE,INSIDE) =OUTSIDE;

>normals : (>NONE,FLAT,SMOOTH) =SMOOTH;

>implementation

{$R *.>DFM}

>procedureTfrmGL.FormPaint(Sender:TObject);

>begin

>glClear (>GL_COLOR_BUFFER_BIT orGL_DEPTH_BUFFER_BIT); // очищення буфера кольору

>glPushMatrix;

>glRotatef (>ry, 0.0, 1.0, 0.0);

>glTranslatef (>tx, 0.0, 0.0);

>casemode of

>POINT :gluQuadricDrawStyle (>quadObj,GLU_POINT);

>LINE :gluQuadricDrawStyle (>quadObj,GLU_LINE);

>FILL :gluQuadricDrawStyle (>quadObj,GLU_FILL);

>SILHOUETTE :gluQuadricDrawStyle (>quadObj,GLU_SILHOUETTE);

end;

>caseorientation of

>INSIDE :gluQuadricOrientation (>quadObj,GLU_INSIDE);

>OUTSIDE :gluQuadricOrientation (>quadObj,GLU_OUTSIDE);

end;

>casenormals of

>NONE :gluQuadricNormals (>quadObj,GLU_NONE);

>FLAT :gluQuadricNormals (>quadObj,GLU_FLAT);

>SMOOTH :gluQuadricNormals (>quadObj,GLU_SMOOTH);

end;

>casegluobj of

>SPHERE :gluSphere (>quadObj, 1.5, 10, 10);

>CONE :gluCylinder (>quadObj, 0.0, 1.0, 1.5, 10, 10);

>CYLINDER :gluCylinder (>quadObj, 1.0, 1.0, 1.5, 10, 10);

>DISK :gluDisk (>quadObj, 0.0, 1.5, 10, 5);

end;

>glPopMatrix;

>SwapBuffers(DC);

end;

>procedureSetDCPixelFormat (>hdc :HDC);

>var

>pfd :TPixelFormatDescriptor;

>nPixelFormat :Integer;

>begin

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

>pfd.dwFlags :=PFD_DRAW_TO_WINDOW orPFD_SUPPORT_OPENGL orPFD_DOUBLEBUFFER;

>nPixelFormat :=ChoosePixelFormat (>hdc, @>pfd);

>SetPixelFormat (>hdc,nPixelFormat, @>pfd);

end;

>procedureTfrmGL.FormCreate(Sender:TObject);

>begin

DC :=GetDC (>Handle);

>SetDCPixelFormat(DC);

>hrc :=wglCreateContext(DC);

>wglMakeCurrent(DC,hrc);

>glClearColor (0.5, 0.5, 0.75, 1.0); // колір фону

>glLineWidth (1.5);

>glEnable (>GL_LIGHTING);

>glEnable (>GL_LIGHT0);

>glEnable (>GL_DEPTH_TEST);

>glEnable (>GL_COLOR_MATERIAL);

>glColor3f (1.0, 0.0, 0.0);

>quadObj :=gluNewQuadric;

>ry := 0.0;

>tx := 0.0;

end;

>procedureTfrmGL.FormDestroy(Sender:TObject);

>begin

>gluDeleteQuadric (>quadObj);

>wglMakeCurrent(0, 0);

>wglDeleteContext(hrc);

>ReleaseDC (>Handle, DC);

>DeleteDC (DC);

end;

>procedureTfrmGL.FormKeyDown(Sender:TObject;varKey: Word;

>Shift:TShiftState);

>begin

>IfKey =VK_ESCAPEthenClose;

>IfKey =VK_LEFTthenbegin

>ry :=ry + 2.0;

>InvalidateRect(Handle,nil,False);

end;

>IfKey =VK_RIGHTthenbegin

>ry :=ry - 2.0;

>InvalidateRect(Handle,nil,False);

end;

>IfKey =VK_UPthenbegin

>tx :=tx - 0.1;

>InvalidateRect(Handle,nil,False);

end;

>IfKey =VK_DOWNthenbegin

>tx :=tx + 0.1;

>InvalidateRect(Handle,nil,False);

end;

>IfKey = 49thenbegin

Inc (>mode);

>Ifmode >High (>mode)thenmode :=Low (>mode);

>InvalidateRect(Handle,nil,False);

end;

>IfKey = 50thenbegin

Inc (>gluobj);

>Ifgluobj >High (>gluobj)thengluobj :=Low (>gluobj);

>InvalidateRect(Handle,nil,False);

end;

>IfKey = 51thenbegin

>Iforientation =INSIDE

>thenorientation :=OUTSIDE

>elseorientation :=INSIDE;

>InvalidateRect(Handle,nil,False);

end;

>IfKey = 52thenbegin

Inc (>normals);

>Ifnormals >High (>normals)thennormals :=Low (>normals);

>InvalidateRect(Handle,nil,False);

end;

end;


>procedureTfrmGL.FormResize(Sender:TObject);

>begin

>glViewport(0, 0,ClientWidth,ClientHeight);

>glMatrixMode (>GL_PROJECTION);

>glLoadIdentity;

>glFrustum (-1, 1, -1, 1, 2, 9);

>glMatrixMode (>GL_MODELVIEW);

>glLoadIdentity;

// цього фрагмента потрібен щоб надатитрехмерности

>glTranslatef(0.0, 0.0, -5.0); // перенесення об'єкта - вісь Z

>glRotatef(30.0, 1.0, 0.0, 0.0); // поворот об'єкта - вісь X

>glRotatef(70.0, 0.0, 1.0, 0.0); // поворот об'єкта - вісь Y

>InvalidateRect(Handle,nil,False);

end;

>procedureTfrmGL.FormKeyPress(Sender:TObject;varKey:Char);

>begin

>ifkey = '-'thenmx:=mx+1;

>ifkey = '+'thenmx:=mx-1;

>InvalidateRect(Handle,nil,False);

end;

end.


Списоквикористаноїлітератури

 

1.Блінова Т.А.,Порєв В.М.Комп’ютернаграфіка / За ред.В.М.Горєва. – До.:Видавництво “>Юніор”, 2004. –456с.,іл.

2.С.В.Глушаков,Г.А.КрабеКомпютерная графіка, Харків 2002

3.OpenGl, технологія стала символів, Підручник в прикладах.

4.Конспектлекцій із предмета «>Комп’ютернаграфіка».


Схожі реферати:

Навігація