Баяковский.Начальный курс OpenGL (Раздаточные материалы), страница 2
Описание файла
Файл "Баяковский.Начальный курс OpenGL" внутри архива находится в папке "Раздаточные материалы". PDF-файл из архива "Раздаточные материалы", который расположен в категории "". Всё это находится в предмете "инженерная графика" из 5 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 2 страницы из PDF
Èìåííî â ñîîòâåòñòâèè ñ ýòîé îáùåìèðîâîé òåíäåíöèåéýâîëþöèîíèðîâàë êóðñ êîìïüþòåðíîé ãðàôèêè íà ôàêóëüòåòåÂÌèÊ ÌÃÓ (ñ 1999 ã. èíòåðíåò-âåðñèþ êóðñà ìîæíî íàéòè íàñàéòå http://courses.graphicon.ru).Ñëåäóÿ ïðèíöèïó "ó÷èñü, äåëàÿ"(learning-by-doing), ìû, êðîìå òðàäèöèîííûõ ëåêöèé, âêëþ÷àåì â êóðñ âûïîëíåíèå 5-6 íåáîëü-Îãëàâëåíèå9øèõ ïðîåêòîâ, êàæäûé ïðîäîëæèòåëüíîñòüþ äâå íåäåëè. (Ïðèìåðû òàêèõ çàäàíèé âû íàéäåòå â ýòîé êíèãå.) Íàñòîÿùàÿ êíèãàïðèçâàíà ïîìî÷ü ñòóäåíòàì â âûïîëíåíèè ýòèõ ïðîåêòîâ.  îòëè÷èå îò äðóãèõ ñïðàâî÷íûõ ïóáëèêàöèé ïî OpenGL, â êíèãåãîâîðèòüñÿ íå òîëüêî î òîì, ÷òî èìååòñÿ â áèáëèîòåêå, íî è îòîì, êàê ýòèìè ñðåäñòâàìè ýôôåêòèâíî ïîëüçîâàòüñÿ.
Íàïðèìåð, êàê âèçóàëèçèðîâàòü çåðêàëüíûå îáúåêòû, êàê ïîñòðîèòüòåíè.Ìîäåëèðóÿ ðåàëüíóþ ðàáî÷óþ ñðåäó, ìû ó÷èì ñòóäåíòîâ ñàìîñòîÿòåëüíîé ðàáîòå.  ýòèõ óñëîâèÿõ ïîñîáèå ïî èñïîëüçîâàíèþ îòêðûòîé ãðàôè÷åñêîé áèáëèîòåêè èãðàåò âàæíóþ ðîëü.Àâòîðû áëàãîäàðíû Å. Êîñòèêîâîé è Ê.
Êàøòàíîâîé çà ïîìîùü â ïîäãîòîâêå òåêñòà è èëëþñòðàöèé.Þ.Ì. ÁàÿêîâñêèéÀïðåëü 2007 ãîäàÂâåäåíèåÂñå, ÷òî ìû âèäèì íà ýêðàíå êîìïüþòåðíîãî ìîíèòîðà, ÿâëÿåòñÿ ðåçóëüòàòîì ðàáîòû àëãîðèòìîâ ñèíòåçà èçîáðàæåíèé.Ýòè àëãîðèòìû ðåøàþò òàêèå çàäà÷è, êàê âèçóàëèçàöèÿ òåêñòà ñ èñïîëüçîâàíèåì çàäàííîãî íàáîð øðèôòîâ, îòîáðàæåíèåóêàçàòåëÿ êóðñîðà, ðèñîâàíèå âñïîìîãàòåëüíûõ ýëåìåíòîâ ãðàôè÷åñêîãî èíòåðôåéñà, âèçóàëèçàöèþ èçîáðàæåíèé. Êðîìå ýòîãî, àëãîðèòìû ñèíòåçà ðåøàþò çàäà÷è âèçóàëèçàöèè òðåõìåðíûõäàííûõ, íàïðèìåð, ñ öåëüþ ñîçäàíèÿ èíòåðàêòèâíîé ôîòîðåàëèñòè÷íîé àíèìàöèè, ëèáî äëÿ íàãëÿäíîãî ïðåäñòàâëåíèÿ ðåçóëüòàòîâ êàêèõ-ëèáî âû÷èñëåíèé.Äëÿ îáëåã÷åíèÿ âûïîëíåíèÿ ïðîãðàììèñòàìè òàêèõ çàäà÷åùå â 80-õ ãîäàõ 20-ãî âåêà ñòàëè ïîÿâëÿòüñÿ ïðîãðàììíûå èíñòðóìåíòàðèè (áèáëèîòåêè), ñîäåðæàùèå â ñåáå íàáîðû áàçîâûõ àëãîðèòìîâ (òàêèõ, êàê âèçóàëèçàöèÿ ïðîñòûõ ãåîìåòðè÷åñêèõ îáúåêòîâ), ÷òî ïîçâîëèëî ïåðåéòè íà áîëåå âûñîêèé óðîâåíü àáñòðàêöèè ïðè ðåøåíèè ïðèêëàäíûõ çàäà÷.
 íàñòîÿùååâðåìÿ ïðîãðàììèðîâàíèå ãðàôè÷åñêèõ àëãîðèòìîâ íåìûñëèìîáåç èñïîëüçîâàíèÿ ñïåöèàëüíûõ ïðîãðàììíûõ èíñòðóìåíòàðèåâ,òàêæå íàçûâàåìûõ ïðèêëàäíûìè ïðîãðàììíûìè èíòåðôåéñàìè(API Application Programming Interface).OpenGL ÿâëÿåòñÿ îäíèì èç ñàìûõ ïîïóëÿðíûõ ïðèêëàäíûõïðîãðàììíûõ èíòåðôåéñîâ äëÿ ðàçðàáîòêè ïðèëîæåíèé â îáëàñòè äâóõìåðíîé è òðåõìåðíîé ãðàôèêè.11Îãëàâëåíèå12Ñòàíäàðò OpenGL (Open Graphics Library îòêðûòàÿ ãðàôè÷åñêàÿ áèáëèîòåêà) áûë ðàçðàáîòàí è óòâåðæäåí â 1992 ãîäóâåäóùèìè ôèðìàìè â îáëàñòè ðàçðàáîòêè ïðîãðàììíîãî îáåñïå÷åíèÿ êàê ýôôåêòèâíûé àïïàðàòíî-íåçàâèñèìûé èíòåðôåéñ,ïðèãîäíûé äëÿ ðåàëèçàöèè íà ðàçëè÷íûõ ïëàòôîðìàõ. Îñíîâîé ñòàíäàðòà ñòàëà áèáëèîòåêà IRIS GL, ðàçðàáîòàííàÿ ôèðìîéSilicon Graphics Inc.Áèáëèîòåêà íàñ÷èòûâàåò îêîëî 120 ðàçëè÷íûõ êîìàíä, êîòîðûå ïðîãðàììèñò èñïîëüçóåò äëÿ çàäàíèÿ îáúåêòîâ è îïåðàöèé,íåîáõîäèìûõ äëÿ íàïèñàíèÿ èíòåðàêòèâíûõ ãðàôè÷åñêèõ ïðèëîæåíèé.Íà ñåãîäíÿøíèé äåíü ãðàôè÷åñêàÿ ñèñòåìà OpenGL ïîääåðæèâàåòñÿ áîëüøèíñòâîì ïðîèçâîäèòåëåé àïïàðàòíûõ è ïðîãðàììíûõ ïëàòôîðì.
Ýòà ñèñòåìà äîñòóïíà òåì, êòî ðàáîòàåòâ ñðåäå Windows, ïîëüçîâàòåëÿì êîìïüþòåðîâ Apple. Ñâîáîäíî ðàñïðîñòðàíÿåìûå êîäû ñèñòåìû Mesa (ïàêåò API íà áàçåOpenGL) ìîæíî êîìïèëèðîâàòü â áîëüøèíñòâå îïåðàöèîííûõñèñòåì, â òîì ÷èñëå â Linux.Õàðàêòåðíûìè îñîáåííîñòÿìè OpenGL, êîòîðûå îáåñïå÷èëèðàñïðîñòðàíåíèå è ðàçâèòèå ýòîãî ãðàôè÷åñêîãî ñòàíäàðòà, ÿâëÿþòñÿ: Ñòàáèëüíîñòü. Äîïîëíåíèÿ è èçìåíåíèÿ â ñòàíäàðòå ðåà-ëèçóþòñÿ òàêèì îáðàçîì, ÷òîáû ñîõðàíèòü ñîâìåñòèìîñòüñ ðàçðàáîòàííûì ðàíåå ïðîãðàììíûì îáåñïå÷åíèåì. Íàäåæíîñòü è ïåðåíîñèìîñòü. Ïðèëîæåíèÿ, èñïîëüçóþ-ùèå OpenGL, ãàðàíòèðóþò îäèíàêîâûé âèçóàëüíûé ðåçóëüòàò âíå çàâèñèìîñòè îò òèïà èñïîëüçóåìîé îïåðàöèîííîé ñèñòåìû è îðãàíèçàöèè îòîáðàæåíèÿ èíôîðìàöèè.Êðîìå òîãî, ýòè ïðèëîæåíèÿ ìîãóò âûïîëíÿòüñÿ êàê íàïåðñîíàëüíûõ êîìïüþòåðàõ, òàê è íà ðàáî÷èõ ñòàíöèÿõ èñóïåðêîìïüþòåðàõ.Îãëàâëåíèå13 Ëåãêîñòü ïðèìåíåíèÿ.
Ñòàíäàðò OpenGL èìååò ïðîäóìàí-íóþ ñòðóêòóðó è èíòóèòèâíî ïîíÿòíûé èíòåðôåéñ, ÷òîïîçâîëÿåò ñ ìåíüøèìè çàòðàòàìè ñîçäàâàòü ýôôåêòèâíûåïðèëîæåíèÿ, ñîäåðæàùèå ìåíüøå ñòðîê êîäà, ÷åì ñ èñïîëüçîâàíèåì äðóãèõ ãðàôè÷åñêèõ áèáëèîòåê. Íåîáõîäèìûå ôóíêöèè äëÿ îáåñïå÷åíèÿ ñîâìåñòèìîñòè ñ ðàçëè÷íûì îáîðóäîâàíèåì ðåàëèçîâàíû íà óðîâíå áèáëèîòåêè èçíà÷èòåëüíî óïðîùàþò ðàçðàáîòêó ïðèëîæåíèé.Íàëè÷èå õîðîøåãî áàçîâîãî ïàêåòà äëÿ ðàáîòû ñ òðåõìåðíûìè ïðèëîæåíèÿìè óïðîùàåò ïîíèìàíèå ñòóäåíòàìè êëþ÷åâûõòåì êóðñà êîìïüþòåðíîé ãðàôèêè ìîäåëèðîâàíèå òðåõìåðíûõîáúåêòîâ, çàêðàøèâàíèå, òåêñòóðèðîâàíèå, àíèìàöèþ è ò.ä. Øèðîêèå ôóíêöèîíàëüíûå âîçìîæíîñòè OpenGL ñëóæàò õîðîøèìôóíäàìåíòîì äëÿ èçëîæåíèÿ òåîðåòè÷åñêèõ è ïðàêòè÷åñêèõ àñïåêòîâ ïðåäìåòà.Êíèãà ñîñòîèò èç òðåõ ÷àñòåé è äâóõ ïðèëîæåíèé.
Ïåðâàÿ÷àñòü ïîñâÿùåíà íåïîñðåäñòâåííî îïèñàíèþ ðàáîòû ñ áèáëèîòåêîé, îñíîâíûì êîìàíäàì è ïåðåìåííûì. Âî âòîðîé ÷àñòè ðàññìàòðèâàþòñÿ ïðèíöèïû ðåàëèçàöèè áîëåå ñëîæíûõ àëãîðèòìîâêîìïüþòåðíîé ãðàôèêè ñ ïîìîùüþ ñðåäñòâ OpenGL.  òðåòüåé÷àñòè ïðèâîäèòñÿ îïèñàíèå íàñòðîéêè ðàáîòû ñ OpenGL â ðàçëè÷íûõ èíòåãðèðîâàííûõ ñðåäàõ ïðîãðàììèðîâàíèÿ è ñîçäàíèåïðèëîæåíèé, ïðèìåíÿþùèõ OpenGL äëÿ ñèíòåçà èçîáðàæåíèé. ïðèëîæåíèÿõ ìîæíî íàéòè äåìîíñòðàöèîííûå ïðîãðàììû íàOpenGL è ïðèìåðû ïðàêòè÷åñêèõ çàäàíèé äëÿ ñàìîêîíòðîëÿ. ïîñîáèè ðàññìàòðèâàåòñÿ ñòàíäàðò OpenGL 1.2.×àñòü IÎñíîâû OpenGL15Ãëàâà 1.Ãðàôè÷åñêèé ïðîöåññ èOpenGLÏðåæäå ÷åì ïåðåéòè ê îïèñàíèþ ôóíêöèé OpenGL, íåîáõîäèìî ïîíÿòü åå ìåñòî â ïðîöåññå ôîðìèðîâàíèÿ èçîáðàæåíèÿ íàýêðàíå, îïðåäåëèòü îáëàñòü, çàäà÷è êîòîðîé ìîæíî ðåøàòü ñ ïîìîùüþ áèáëèîòåêè.1.1.
Ãðàôè÷åñêèé ïðîöåññÒðàäèöèîííîé çàäà÷åé êîìïüþòåðíîé ãðàôèêè ÿâëÿåòñÿ ñèíòåç èçîáðàæåíèé îáúåêòîâ ðåàëüíîãî ìèðà (êàê ñóùåñòâóþùèõ,òàê è âîîáðàæàåìûõ). Äëÿ òîãî, ÷òîáû ñäåëàòü òàêîé ñèíòåç âîçìîæíûì, íà âõîäå àëãîðèòìà íåîáõîäèìû ñëåäóþùèå äàííûå:Ãåîìåòðè÷åñêèå ìîäåëè çàäàþò ôîðìó è âíóòðåííþþ ñòðóê-òóðó îáúåêòà, îáû÷íî â òðåõìåðíîì åâêëèäîâîì ïðîñòðàíñòâå. Ïðèìåðû ïðîñòûõ ìîäåëåé:ñôåðà, çàäàííàÿ ñ ïîìîùüþ ïîëîæåíèÿ öåíòðà è ðàäèóñà;17Ãëàâà 1. Ãðàôè÷åñêèé ïðîöåññ è OPENGL18êóá, çàäàííûé ÷åðåç ïîëîæåíèå öåíòðà è äëèíû ðåáðà.Àíèìàöèÿ ñëóæèò äëÿ çàäàíèÿ ìîäåëè äâèæåíèÿ, èçìåíåíèÿôîðìû èëè ìàòåðèàëà îáúåêòà ñ òå÷åíèåì âðåìåíè.
Íàïðèìåð, ïðîäîëüíîå ïåðåìåùåíèå îáúåêòà âäîëü îñèñêîðîñòüþsxñîì/c ìîæåò áûòü çàäàíî ñ ïîìîùüþ ôîðìóëû:x(t) = st.Ìàòåðèàëû è òåêñòóðû îïðåäåëÿþò, êàê ïîâåðõíîñòü îáúåê-òà âçàèìîäåéñòâóåò ñî ñâåòîì. Ìàòåðèàëû íåîáõîäèìû äëÿïîëó÷åíèÿ èçîáðàæåíèÿ îáúåêòà, ñ èõ ïîìîùüþ âû÷èñëÿåòñÿ êîëè÷åñòâî îòðàæåííîãî ñâåòà, ïîïàäàþùåãî â ¾ãëàç¿âèðòóàëüíîãî íàáëþäàòåëÿ.
Ïðîñòåéøàÿ ìîäåëü ìàòåðèàëà öâåò îáúåêòà.Îñâåùåíèå çàäàåò ðàñïîëîæåíèå è õàðàêòåðèñòèêè èñòî÷íèêîâñâåòà, ÷òî â ñîâîêóïíîñòè ñ ìàòåðèàëîì ïîçâîëÿåò âûñ÷èòàòü öâåò êàæäîé òî÷êè îáúåêòà, èçîáðàæåíèå êîòîðîãîòðåáóåòñÿ ïîñòðîèòü. Ïðèìåð ìîäåëè îñâåùåíèÿ: ñîëíöå,çàäàâàåìîå íàïðàâëåíèåì è ìîùíîñòüþ èçëó÷åíèÿ.Âèðòóàëüíàÿ êàìåðà îïðåäåëÿåò, êàê òðåõìåðíûå äàííûå áó-äóò îòîáðàæàòüñÿ (ïðîåöèðîâàòüñÿ) íà äâóõìåðíîå èçîáðàæåíèå.Çàìåòèì, ÷òî äëÿ çàäà÷, íå òðåáóþùèõ ðåàëèñòè÷íîñòè ïîëó÷àåìîãî èçîáðàæåíèÿ (íàïðèìåð, íàó÷íàÿ âèçóàëèçàöèÿ), ìàòåðèàëû ìîãóò ñâîäèòüñÿ ê ïðîñòåéøèì ôîðìàì, íàïðèìåð, êðàçíûì öâåòàì îáúåêòîâ, à îñâåùåíèå îòñóòñòâîâàòü.Äàëåå â äåëî âñòóïàåò àëãîðèòì ñèíòåçà èçîáðàæåíèé, â îïèñûâàåìîì ÷àñòíîì ñëó÷àå íàçûâàåìûé ïðîöåññîìýêðàíèçàöèè(rendering). Èìåÿ íà âõîäå íàáîð ìîäåëåé, àëãîðèòì äîëæåí ïîñòðîèòü ñîîòâåòñòâóþùåå èçîáðàæåíèå íà ýêðàíå ìîíèòîðà.Îïèñàííàÿ ñõåìà ãðàôè÷åñêîé îáðàáîòêè îò ïîëó÷åíèÿ ãåîìåòðè÷åñêîé ìîäåëè îáúåêòà äî ñèíòåçà èçîáðàæåíèÿ íà ýêðàíåíàçûâàåòñÿãðàôè÷åñêèì ïðîöåññîì .1.2.
Ãåîìåòðè÷åñêèå ìîäåëè19Îñòàíîâèìñÿ áîëåå ïîäðîáíî íà òîì, êàêóþ ïîìîùü OpenGLîêàçûâàåò â ðåàëèçàöèè ãðàôè÷åñêîãî ïðîöåññà.Ðèñ. 1.1. Ãðàôè÷åñêèé ïðîöåññ è ìåñòî OpenGL â íåì.1.2. Ãåîìåòðè÷åñêèå ìîäåëè êîìïüþòåðíîé ãðàôèêå èñïîëüçóåòñÿ áîëüøîå êîëè÷åñòâîðàçíîîáðàçíûõ ìîäåëåé äëÿ îïèñàíèÿ ôîðìû. Ïðè÷èíîé ýòîãîÿâëÿåòñÿ î÷åâèäíàÿ íåâîçìîæíîñòü ïîëíîñòüþ îöèôðîâàòü ðåàëüíûé îáúåêò. Ñëåäîâàòåëüíî, íåîáõîäèìî âûáèðàòü òå îñîáåííîñòè îáúåêòà, êîòîðûå âàæíû äëÿ êîíêðåòíîé çàäà÷è è çàäàííîãî êëàññà îáúåêòîâ.  ÷àñòíîñòè, ìîäåëè ìîæíî ïîäåëèòü íàîáúåìíûå è ãðàíè÷íûå. Îáúåìíûå ìîäåëè ïîçâîëÿþò îïèñàòüâíóòðåííîñòü îáúåêòà, à ãðàíè÷íûå ãåîìåòðè÷åñêèå ñâîéñòâàïîâåðõíîñòè.
Ïðèìåð îáúåìíîé ìîäåëè ïîêàçàí íà ðèñóíêå 1.2. íàñòîÿùåå âðåìÿ íàèáîëüøóþ ïîïóëÿðíîñòü çàâîåâàëè ãðàíè÷íûå ìîäåëè, ïîëó÷àåìûå ñ ïîìîùüþ ëîêàëüíîé êóñî÷íîëèíåéíîé àïïðîêñèìàöèè ïîâåðõíîñòè. Òàêàÿ ìîäåëü ïðåäñòàâëÿåò ñîáîé íàáîð ñâÿçàííûõ ÷åðåç îáùèå âåðøèíû ìíîãîóãîëüíèêîâ (ïîëèãîíîâ), ïîýòîìó ýòè ìîäåëè åùå íàçûâàåòïîëèãîíàëü-Ãëàâà 1. Ãðàôè÷åñêèé ïðîöåññ è OPENGL20Ðèñ.
1.2. Îáúåìíàÿ (âîêñåëüíàÿ) ìîäåëü òîðàíûìè . Ïðè÷èíà ïîïóëÿðíîñòè ïîëèãîíàëüíûõ ìîäåëåé êðîåòñÿâ èõ ÷ðåçâû÷àéíîé ãèáêîñòè è ïðîñòîòå, ÷òî ïîçâîëèëî ïîääåðæàòü îïåðàöèè ñ òàêèìè ìîäåëÿìè â ãðàôè÷åñêîé àïïàðàòóðå.Ïðèìåð ãðàíè÷íîé ìîäåëè ïðèâåäåí íà ðèñóíêå 1.3.Îñíîâíûì òèïîì ãåîìåòðè÷åñêèõ ìîäåëåé, ïîääåðæèâàåìûìOpenGL, ÿâëÿþòñÿ êàê ðàç ãðàíè÷íûå ïîëèãîíàëüíûå ìîäåëè.Îòìåòèì, ÷òî ïðè ýòîì áèáëèîòåêà íå ñîäåðæèò êàêèõ-ëèáîñðåäñòâ ïîääåðæêè õðàíåíèÿ äàííûõ íà âíåøíèõ íîñèòåëÿõ.Òàêæå â áèáëèîòåêå íåò ñðåäñòâ äëÿ îáðàáîòêè è ðåäàêòèðîâàíèÿ ìîäåëåé åäèíñòâåííîé çàäà÷åé OpenGL ÿâëÿåòñÿ ðåàëèçàöèÿ àëãîðèòìîâ ýêðàíèçàöèè òðåõìåðíûõ ìîäåëåé.Áîëåå ïîäðîáíî ðàáîòà ñ ìîäåëÿìè îïèñàíà â ãëàâå 3.1.3.