Главная » Просмотр файлов » Баяковский.Начальный курс OpenGL

Баяковский.Начальный курс OpenGL (1124482), страница 10

Файл №1124482 Баяковский.Начальный курс OpenGL (Раздаточные материалы) 10 страницаБаяковский.Начальный курс OpenGL (1124482) страница 102019-05-11СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 10)

Ïîíÿòèå òåêóùèõ êîîðäèíàò òåêñòóðû àíàëîãè÷íî ïîíÿòèÿì òåêóùåãî öâåòà è òåêóùåé íîðìàëè è ÿâëÿåòñÿ àòðèáóòîì âåðøèíû. Îäíàêî äàæå äëÿêóáà íàõîæäåíèå ñîîòâåòñòâóþùèõ êîîðäèíàò òåêñòóðû ÿâëÿåòñÿ äîâîëüíî òðóäîåìêèì çàíÿòèåì, ïîýòîìó â áèáëèîòåêå GLUïîìèìî êîìàíä, ïðîâîäÿùèõ ïîñòðîåíèå òàêèõ ïðèìèòèâîâ êàêñôåðà, öèëèíäð è äèñê, ïðåäóñìîòðåíî òàêæå íàëîæåíèå íà íèõòåêñòóð. Äëÿ ýòîãî äîñòàòî÷íî âûçâàòü êîìàíäóvoid gluQuadricTexture (GLUquadricObj * quadObject ,GLboolean textureCoords )ñ ïàðàìåòðîìtextureCoordsðàâíûìGL_TRUE,è òîãäà òåêóùàÿòåêñòóðà áóäåò àâòîìàòè÷åñêè íàêëàäûâàòüñÿ íà ïðèìèòèâ.Âòîðîé ìåòîä ðåàëèçóåòñÿ ñ ïîìîùüþ êîìàíävoid glTexGen [ i f d ](GLenum coord , GLenum pname ,GLtype param )void glTexGen [ i f d ] v (GLenum coord , GLenum pname ,const GLtype * params )Ïàðàìåòðcoordîïðåäåëÿåò äëÿ êàêîé êîîðäèíàòû çàäàåòñÿôîðìóëà, è ìîæåò ïðèíèìàòü çíà÷åíèåGL_S, GL_T; pnameìî-æåò áûòü ðàâåí îäíîìó èç ñëåäóþùèõ çíà÷åíèé:GL_TEXTURE_GEN_MODE çàäàåò ôóíêöèþ äëÿ íà-ëîæåíèÿ òåêñòóðû.

 ýòîì ñëó÷àå àðãóìåíò param ïðèíèìàåò çíà÷åíèÿ:GL_OBJECT_LINEAR çíà÷åíèåñîîòâåòñòâóþùåéòåêñòóðíîé êîîðäèíàòû îïðåäåëÿåòñÿ ðàññòîÿíèåì äîÃëàâà 6. Òåêñòóðèðîâàíèå86ïëîñêîñòè, çàäàâàåìîé ñ ïîìîùüþ çíà÷åíèÿGL_OBJECT_PLANEpname(ñì. íèæå). Ôîðìóëà âûãëÿäèòñëåäóþùèì îáðàçîì:g = x ∗ xp + y ∗ yp + z ∗ zp + w ∗ wpãäåèëèêè.g ñîîòâåòñòâóþùàÿ òåêñòóðíàÿ êîîðäèíàòà (sp), x, y, z, w êîîðäèíàòû ñîîòâåòñòâóþùåé òî÷xp , yp , zp , wp êîýôôèöèåíòû óðàâíåíèÿ ïëîñêî-ñòè.  ôîðìóëå èñïîëüçóþòñÿ êîîðäèíàòû îáúåêòà.

àíàëîãè÷íîGL_EYE_LINEARGL_OBJECT_LINEAR,òîëüêî â ôîðìóëå èñïîëüçóþòñÿ âèäîâûå êîîðäèíàòû.Ò.å. êîîðäèíàòû òåêñòóðû îáúåêòà â ýòîì ñëó÷àå çàâèñÿò îò ïîëîæåíèÿ ýòîãî îáúåêòà.GL_SPHERE_MAP ïîçâîëÿåò ýìóëèðîâàòü îòðàæå-íèå îò ïîâåðõíîñòè îáúåêòà. Òåêñòóðà êàê áû ¾îáîðà÷èâàåòñÿ¿ âîêðóã îáúåêòà. Äëÿ äàííîãî ìåòîäà èñïîëüçóþòñÿ âèäîâûå êîîðäèíàòû è íåîáõîäèìî çàäàíèå íîðìàëåé.GL_OBJECT_PLANE ïîçâîëÿåò çàäàòü ïëîñêîñòü, ðàñ-ñòîÿíèå äî êîòîðîé áóäåò èñïîëüçîâàòüñÿ ïðè ãåíåðàöèè êîîðäèíàò, åñëè óñòàíîâëåí ðåæèìýòîì ñëó÷àå ïàðàìåòðparamsGL_OBJECT_LINEAR.Âÿâëÿåòñÿ óêàçàòåëåì íà ìàñ-ñèâ èç ÷åòûðåõ êîýôôèöèåíòîâ óðàâíåíèÿ ïëîñêîñòè.GL_EYE_PLANE àíàëîãè÷íî ïðåäûäóùåìó çíà÷åíèþ. Ïîç-âîëÿåò çàäàòü ïëîñêîñòü äëÿ ðåæèìàGL_EYE_LINEAR.Äëÿ óñòàíîâêè àâòîìàòè÷åñêîãî ðåæèìà çàäàíèÿ òåêñòóðíûõglEnable ñ ïàðàìåòðîìGL_TEXTURE_GEN_P.êîîðäèíàò íåîáõîäèìî âûçâàòü êîìàíäóGL_TEXTURE_GEN_SèëèÏðîãðàììà, èñïîëüçóþùàÿ íàëîæåíèå òåêñòóðû è àíèìàöèþ,ïðèâåäåíà â ïðèëîæåíèè Á.6.4.

Êîíòðîëüíûå âîïðîñû876.4. Êîíòðîëüíûå âîïðîñû1) ×òî òàêîå òåêñòóðà è äëÿ ÷åãî èñïîëüçóþòñÿ òåêñòóðû?2) ×òî òàêîå òåêñòóðíûå êîîðäèíàòû è êàê çàäàòü èõ äëÿ îáúåêòà?3) Êàêîé ìåòîä âçàèìîäåéñòâèÿ ñ ìàòåðèàëîì íóæíî èñïîëüçîâàòü, åñëè òåêñòóðà ïðåäñòàâëÿåò ñîáîé êàðòèíó, âèñÿùóþ íà ñòåíå (GL_MODULATE, GL_REPLACE)?4) Ïåðå÷èñëèòå èçâåñòíûå âàì ìåòîäû ãåíåðàöèè òåêñòóðíûõêîîðäèíàò â OpenGL.5) Äëÿ ÷åãî èñïîëüçóþòñÿ óðîâíè äåòàëèçàöèè òåêñòóðû (mipmapping)?6) ×òî òàêîå ðåæèìû ôèëüòðàöèè òåêñòóðû è êàê çàäàòü èõâ OpenGL?Ãëàâà 7.Îïåðàöèè ñ ïèêñåëÿìèÏîñëå ïðîâåäåíèÿ âñåõ îïåðàöèé ïî ïðåîáðàçîâàíèþ êîîðäèíàò âåðøèí, âû÷èñëåíèÿ öâåòà è ò.ï., OpenGL ïåðåõîäèò êýòàïó ðàñòåðèçàöèè, íà êîòîðîì ïðîèñõîäèò ðàñòåðèçàöèÿ âñåõïðèìèòèâîâ, íàëîæåíèå òåêñòóðû, íàëîæåíèå ýôôåêòà òóìàíà.Äëÿ êàæäîãî ïðèìèòèâà ðåçóëüòàòîì ýòîãî ïðîöåññà ÿâëÿåòñÿçàíèìàåìàÿ èì â áóôåðå êàäðà îáëàñòü, êàæäîìó ïèêñåëþ ýòîéîáëàñòè ïðèïèñûâàåòñÿ öâåò è çíà÷åíèå ãëóáèíû.OpenGL èñïîëüçóåò ýòó èíôîðìàöèþ, ÷òîáû çàïèñàòü îáíîâëåííûå äàííûå â áóôåð êàäðà.

Äëÿ ýòîãî OpenGL èìååò íå òîëüêî îòäåëüíûé êîíâåéåð îáðàáîòêè ïèêñåëåé, íî è íåñêîëüêî äîïîëíèòåëüíûõ áóôåðîâ ðàçëè÷íîãî íàçíà÷åíèÿ. Ýòî ïîçâîëÿåòïðîãðàììèñòó ãèáêî êîíòðîëèðîâàòü ïðîöåññ âèçóàëèçàöèè íàñàìîì íèçêîì óðîâíå.Ãðàôè÷åñêàÿ áèáëèîòåêà OpenGL ïîääåðæèâàåò ðàáîòó ñîñëåäóþùèìè áóôåðàìè:ˆˆˆíåñêîëüêî áóôåðîâ öâåòà;áóôåð ãëóáèíû;áóôåð-íàêîïèòåëü (àêêóìóëÿòîð);89Ãëàâà 7. Îïåðàöèè ñ ïèêñåëÿìè90ˆáóôåð ìàñêè.Ãðóïïà áóôåðîâ öâåòà âêëþ÷àåò áóôåð êàäðà, íî òàêèõ áóôåðîâ ìîæåò áûòü íåñêîëüêî. Ïðè èñïîëüçîâàíèè äâîéíîé áóôåðèçàöèè ãîâîðÿò î ðàáî÷åì (front) è ôîíîâîì (back) áóôåðàõ. Êàêïðàâèëî, â ôîíîâîì áóôåðå ïðîãðàììà ñîçäàåò èçîáðàæåíèå, êîòîðîå çàòåì ðàçîì êîïèðóåòñÿ â ðàáî÷èé áóôåð.

Íà ýêðàíå ìîæåòïîÿâèòüñÿ èíôîðìàöèÿ òîëüêî èç áóôåðîâ öâåòà.Áóôåð ãëóáèíû èñïîëüçóåòñÿ äëÿ óäàëåíèÿ íåâèäèìûõ ïîâåðõíîñòåé è ïðÿìàÿ ðàáîòà ñ íèì òðåáóåòñÿ êðàéíå ðåäêî.Áóôåð-íàêîïèòåëü ìîæíî ïðèìåíÿòü äëÿ ðàçëè÷íûõ îïåðàöèé. Áîëåå ïîäðîáíî ðàáîòà ñ íèì îïèñàíà â ðàçäåëå 7.2.Áóôåð ìàñêè èñïîëüçóåòñÿ äëÿ ôîðìèðîâàíèÿ ïèêñåëüíûõìàñîê (òðàôàðåòîâ), ñëóæàùèõ äëÿ âûðåçàíèÿ èç îáùåãî ìàññèâà òåõ ïèêñåëåé, êîòîðûå ñëåäóåò âûâåñòè íà ýêðàí.

Áóôåð ìàñêèè ðàáîòà ñ íèì áîëåå ïîäðîáíî ðàññìîòðåíû â ðàçäåëàõ 7.3, 8.2è 8.3.7.1. Ñìåøèâàíèå èçîáðàæåíèé è ïðîçðà÷íîñòüÐàçíîîáðàçíûåïðîçðà÷íûåîáúåêòû ñòåêëà,ïðîçðà÷íàÿïîñóäà è ò.ä. ÷àñòî âñòðå÷àþòñÿ â ðåàëüíîñòè, ïîýòîìó âàæíî óìåòü ñîçäàâàòü òàêèå îáúåêòû â èíòåðàêòèâíîé ãðàôèêå.OpenGL ïðåäîñòàâëÿåò ïðîãðàììèñòó ìåõàíèçì ðàáîòû ñ ïîëóïðîçðà÷íûìè îáúåêòàìè, êîòîðûé è áóäåò êðàòêî îïèñàí â ýòîìðàçäåëå.Ïðîçðà÷íîñòü ðåàëèçóåòñÿ ñ ïîìîùüþ ñïåöèàëüíîãî ðåæèìà ñìåøèâàíèÿ öâåòîâ (blending). Àëãîðèòì ñìåøèâàíèÿ êîìáèíèðóåò öâåòà òàê íàçûâàåìûõ âõîäÿùèõ ïèêñåëåé (ò.å.

¾êàíäèäàòîâ¿ íà ïîìåùåíèå â áóôåð êàäðà) ñ öâåòàìè ñîîòâåòñòâóþùèõ ïèêñåëåé, óæå õðàíÿùèõñÿ â áóôåðå. Äëÿ ñìåøèâàíèÿèñïîëüçóåòñÿ ÷åòâåðòàÿ êîìïîíåíòà öâåòà àëüôà-êîìïîíåíòà,7.1. Ñìåøèâàíèå èçîáðàæåíèé è ïðîçðà÷íîñòü91ïîýòîìó ýòîò ðåæèì íàçûâàþò åùå àëüôà-ñìåøèâàíèåì. Ïðîãðàììà ìîæåò óïðàâëÿòü èíòåíñèâíîñòüþ àëüôà-êîìïîíåíòûòî÷íî òàê æå, êàê è èíòåíñèâíîñòüþ îñíîâíûõ öâåòîâ, ò.å. çàäàâàòü çíà÷åíèå èíòåíñèâíîñòè äëÿ êàæäîãî ïèêñåëÿ èëè êàæäîéâåðøèíû ïðèìèòèâà.

Ðåæèì âêëþ÷àåòñÿ ñ ïîìîùüþ êîìàíäûglEnable(GL_BLEND).Îïðåäåëèòü ïàðàìåòðû ñìåøèâàíèÿ ìîæíî ñ ïîìîùüþ êîìàíäû:void glBlendFunc (enum src , enum dst )Ïàðàìåòðsrcîïðåäåëÿåò êàê ïîëó÷èòü êîýôôèöèåíòõîäíîãî öâåòà ïèêñåëÿ, aöèåíòàk2dstk1èñ-çàäàåò ñïîñîá ïîëó÷åíèÿ êîýôôè-äëÿ öâåòà â áóôåðå êàäðà. Äëÿ ïîëó÷åíèÿ ðåçóëüòè-res = csrc ∗k1 + cdst ∗ k2 , ãäå csrc öâåò èñõîäíîãî ïèêñåëÿ, cdst öâåò ïèêñåëÿ â áóôåðå êàäðà (res, k1 , k1 , csrc , cdst ÷åòûðåõêîìïîíåíòíûåðóþùåãî öâåòà èñïîëüçóåòñÿ ñëåäóþùàÿ ôîðìóëà:RGBA-âåêòîðû).srcÏðèâåäåì íàèáîëåå ÷àñòî èñïîëüçóåìûå çíà÷åíèÿ àãðóìåíòîâèdst.GL_SRC_ALPHAk = (As , As , As , As )GL_SRC_ONE_MINUS_ALPHAk = (1, 1, 1, 1) − (As , As , As , As )GL_DST_COLORk = (Rd , Gd , Bd )GL_ONE_MINUS_DST_COLORk = (1, 1, 1, 1) − (Rd , Gd , Bd , d )GL_DST_ALPHAk = (Ad , A − d, A − d, Ad )GL_DST_ONE_MINUS_ALPHAk = (1, 1, 1, 1) − (Ad , Ad , Ad , Ad )Ãëàâà 7.

Îïåðàöèè ñ ïèêñåëÿìè92GL_SRC_COLORk = (Rs, Gs, Bs)GL_ONE_MINUS_SRC_COLORk = (1, 1, 1, 1) − (Rs , Gs , Bs , As )Ïðèìåð: ïðåäïîëîæèì, ìû õîòèì ðåàëèçîâàòü âûâîä ïðîçðà÷íûõ îáúåêòîâ. Êîýôôèöèåíò ïðîçðà÷íîñòè çàäàåòñÿ àëüôàêîìïîíåíòîé öâåòà. Ïóñòü 1 íåïðîçðà÷íûé îáúåêò; 0 àáñîëþòíî ïðîçðà÷íûé, ò.å. íåâèäèìûé. Äëÿ ðåàëèçàöèè ñëóæèò ñëåäóþùèé êîä:glEnable (GL_BLEND) ;glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) ;Íàïðèìåð, ïîëóïðîçðà÷íûé òðåóãîëüíèê ìîæíî çàäàòü ñëåäóþùèì îáðàçîì:glColor3f (1.0 , 0.0 , 0.0 , 0.5);g l B e g i n (GL_TRIANGLES) ;glVertex3f (0.0 , 0.0 , 0 . 0 ) ;glVertex3f (1.0 , 0.0 , 0 .

0 ) ;glVertex3f (1.0 , 1.0 , 0 . 0 ) ;glEnd ( ) ;Åñëè â ñöåíå åñòü íåñêîëüêî ïðîçðà÷íûõ îáúåêòîâ, êîòîðûåìîãóò ïåðåêðûâàòü äðóã äðóãà, êîððåêòíûé âûâîä ìîæíî ãàðàíòèðîâàòü òîëüêî â ñëó÷àå âûïîëíåíèÿ ñëåäóþùèõ óñëîâèé:ˆˆâñå ïðîçðà÷íûå îáúåêòû âûâîäÿòñÿ ïîñëå íåïðîçðà÷íûõ;ïðè âûâîäå îáúåêòû ñ ïðîçðà÷íîñòüþ äîëæíû áûòü óïîðÿäî÷åíû ïî óìåíüøåíèþ ãëóáèíû, ò.å.

âûâîäèòüñÿ, íà÷èíàÿñ íàèáîëåå îòäàëåííûõ îò íàáëþäàòåëÿ. OpenGL êîìàíäû îáðàáàòûâàþòñÿ â ïîðÿäêå èõ ïîñòóïëåíèÿ, ïîýòîìó äëÿ ðåàëèçàöèè ïåðå÷èñëåííûõ òðåáîâàíèé äîñòàòî÷íî ðàññòàâèòü â ñîîòâåòñòâóþùåì ïîðÿäêå âûçîâû êîìàíäglVertex,íî è ýòî â îáùåì ñëó÷àå íåòðèâèàëüíî.7.2. Áóôåð-íàêîïèòåëü937.2. Áóôåð-íàêîïèòåëüÁóôåð-íàêîïèòåëü (accumulation buer) ýòî îäèí èç äîïîëíèòåëüíûõ áóôåðîâ OpenGL.

 íåì ìîæíî ñîõðàíÿòü âèçóàëèçèðîâàííîå èçîáðàæåíèå, ïðèìåíÿÿ ïðè ýòîì ïîïèêñåëüíî ñïåöèàëüíûå îïåðàöèè. Áóôåð-íàêîïèòåëü øèðîêî èñïîëüçóåòñÿ äëÿñîçäàíèÿ ðàçëè÷íûõ ñïåöýôôåêòîâ.Èçîáðàæåíèå áåðåòñÿ èç áóôåðà, âûáðàííîãî íà ÷òåíèå êîìàíäîévoid glReadBuffer (enum buf )buf îïðåäåëÿåò áóôåð äëÿ ÷òåíèÿ. Çíà÷åíèÿ buf,ðàâíûå GL_BACK, GL_FRONT, îïðåäåëÿþò ñîîòâåòñòâóþùèåáóôåðû öâåòà äëÿ ÷òåíèÿ. GL_BACK çàäàåò â êà÷åñòâå èñòî÷íèêà ïèêñåëåé âíåýêðàííûé áóôåð; GL_FRONT òåêóùåå ñîäåðÀðãóìåíòæèìîå îêíà âûâîäà. Êîìàíäà èìååò çíà÷åíèå, åñëè èñïîëüçóåòñÿäóáëèðóþùàÿ áóôåðèçàöèÿ.

Характеристики

Тип файла
PDF-файл
Размер
1,68 Mb
Тип материала
Высшее учебное заведение

Список файлов учебной работы

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