Баяковский.Начальный курс OpenGL (Раздаточные материалы)
Описание файла
Файл "Баяковский.Начальный курс OpenGL" внутри архива находится в папке "Раздаточные материалы". PDF-файл из архива "Раздаточные материалы", который расположен в категории "". Всё это находится в предмете "инженерная графика" из 5 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст из PDF
ÌÎÑÊÎÂÑÊÈÉ ÃÎÑÓÄÀÐÑÒÂÅÍÍÛÉ ÓÍÈÂÅÐÑÈÒÅÒÈÌÅÍÈ Ì.Â. ËÎÌÎÍÎÑÎÂÀÔÀÊÓËÜÒÅÒ ÂÛ×ÈÑËÈÒÅËÜÍÎÉÌÀÒÅÌÀÒÈÊÈ È ÊÈÁÅÐÍÅÒÈÊÈËÀÁÎÐÀÒÎÐÈß ÊÎÌÏÜÞÒÅÐÍÎÉÃÐÀÔÈÊÈ È ÌÓËÜÒÈÌÅÄÈÀÞ.Ì. Áàÿêîâñêèé, À.Â. ÈãíàòåíêîÍÀ×ÀËÜÍÛÉ ÊÓÐÑOPENGLÏËÀÍÅÒÀ ÇÍÀÍÈÉÌîñêâà2007ÓÄÊ 681.3.07ÁÁÊ 32.973.26-018.2Á34Áàÿêîâñêèé Þ.Ì., Èãíàòåíêî À.Â. Íà÷àëüíûé êóðñ OpenGL.Ì.: ½Ïëàíåòà Çíàíèé, 2007. 221c.ISBN 978-5-903242-02-3Íàñòîÿùàÿ êíèãà ïðåäñòàâëÿåò ñîáîé ïðàêòè÷åñêîå ðóêîâîäñòâî ïî ðàáîòå ñ ãðàôè÷åñêîé áèáëèîòåêîé OpenGL.
Ðóêîâîäñòâî ðàçðàáîòàíî ñ ó÷åòîìîïûòà ÷òåíèÿ êóðñà ¾Êîìïüþòåðíàÿ ãðàôèêà¿ íà ôàêóëüòåòå ÂÌèÊ ÌÃÓèì. Ì.Â. Ëîìîíîñîâà. Êíèãà âêëþ÷àåò â ñåáÿ îïèñàíèå áàçîâûõ âîçìîæíîñòåé OpenGL è ïðèåìû ðàáîòû ñ áèáëèîòåêîé, âîïðîñû îïòèìèçàöèè ïðèëîæåíèé è èñïîëüçîâàíèÿ OpenGL â ðàçëè÷íûõ ñðåäàõ ïðîãðàììèðîâàíèÿ.Êíèãà ñíàáæåíà âîïðîñàìè è ïðàêòè÷åñêèìè çàäàíèÿìè.Ðóêîâîäñòâî ðàññ÷èòàíî íà ÷èòàòåëåé, çíàêîìûõ ñ ÿçûêàìè ïðîãðàììèðîâàíèÿ Ñ/C++ è èìåþùèõ ïðåäñòàâëåíèå î áàçîâûõ àëãîðèòìàõ êîìïüþòåðíîé ãðàôèêè. Ðåêîìåíäóåòñÿ ñòóäåíòàì ìàòåìàòè÷åñêèõ è ïðèêëàäíûõñïåöèàëüíîñòåé, àñïèðàíòàì, íàó÷íûì ñîòðóäíèêàì è âñåì æåëàþùèì èçó÷èòü OpenGL â ñæàòûå ñðîêè.Èçäàíèå ïîäãîòîâëåíî â ðàìêàõ îáðàçîâàòåëüíîé ïðîãðàììû ¾Ôîðìèðîâàíèå ñèñòåìû èííîâàöèîííîãî îáðàçîâàíèÿ â ÌÃÓ¿.Ðåöåíçåíòû:Øèêèí Å.Â., ïðîôåññîð, äîêòîð ôèç.-ìàò. íàóê, ô-ò ÂÌèÊ ÌÃÓÊðûëîâ À.Ñ., êàíäèäàò ôèç.-ìàò.
íàóê, ô-ò ÂÌèÊ ÌÃÓISBN 978-5-903242-02-3©©Áàÿêîâñêèé Þ.Ì., Èãíàòåíêî À.Â.ÎÎÎ ½Ïëàíåòà Çíàíèé, 2007ÎãëàâëåíèåÏðåäèñëîâèåÂâåäåíèåI. . . . . . . . . . . . . . . . . . . . . . . . .7. . . . . . . . . . . . . . . . . . . . . . . . . . .11Îñíîâû OpenGL151. Ãðàôè÷åñêèé ïðîöåññ è OpenGL171.1.Ãðàôè÷åñêèé ïðîöåññ . . . . . . .
. . . . . . . . . .171.2.Ãåîìåòðè÷åñêèå ìîäåëè . . . . . . . . . . . . . . . .191.3.Àíèìàöèÿ . . . . . . . . . . . . . . . . . . . . . . . .201.4.Ìàòåðèàëû . . . . . . . . . . . . . . . . . . . . . . .211.5.Îñâåùåíèå221.6.Âèðòóàëüíàÿ êàìåðà. . . . . . . .
. . . . . . . . .221.7.Àëãîðèòì ýêðàíèçàöèè . . . . . . . . . . . . . . . .23. . . . . . . . . . . . . . . . . . . . . . .2. Ââåäåíèå â OpenGL252.1.Îñíîâíûå âîçìîæíîñòè . . . . . . . . . . . . . . . .252.2.Èíòåðôåéñ OpenGL . . . . . . . . . . . . . . . . . .262.3.Àðõèòåêòóðà OpenGL . . . .
. . . . . . . . . . . . .282.4.Ñèíòàêñèñ êîìàíä . . . . . . . . . . . . . . . . . . .302.5.Ïðèìåð ïðèëîæåíèÿ. . . . . . . . . . . . . . . . .312.6.Êîíòðîëüíûå âîïðîñû. . . . . . . . . . . . . . . .363Îãëàâëåíèå43. Ðèñîâàíèå ãåîìåòðè÷åñêèõ îáúåêòîâ393.1.Ïðîöåññ îáíîâëåíèÿ èçîáðàæåíèÿ . . . . . . . . . .393.2.Âåðøèíû è ïðèìèòèâû . . . . . . . . . . .
. . . . .413.3.Îïåðàòîðíûå ñêîáêè glBegin / glEnd. . . . . . . .433.4.Äèñïëåéíûå ñïèñêè. . . . . . . . . . . . . . . . . .473.5.Ìàññèâû âåðøèí . . . . . . . . . . . . . . . . . . . .493.6.Êîíòðîëüíûå âîïðîñû51. . . . . . . . . . . . . . . .4. Ïðåîáðàçîâàíèÿ îáúåêòîâ554.1.Ðàáîòà ñ ìàòðèöàìè . . . .
. . . . . . . . . . . . . .564.2.Ìîäåëüíî-âèäîâûå ïðåîáðàçîâàíèÿ . . . . . . . . .584.3.Ïðîåêöèè . . . . . . . . . . . . . . . . . . . . . . . .604.4.Îáëàñòü âûâîäà634.5.Êîíòðîëüíûå âîïðîñû. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .5. Ìàòåðèàëû è îñâåùåíèå64655.1.Ìîäåëü îñâåùåíèÿ . . . . . . . . .
. . . . . . . . . .655.2.Ñïåöèôèêàöèÿ ìàòåðèàëîâ . . . . . . . . . . . . . .675.3.Îïèñàíèå èñòî÷íèêîâ ñâåòà695.4.Ñîçäàíèå ýôôåêòà òóìàíà5.5.Êîíòðîëüíûå âîïðîñû. . . . . . . . . . . . .. . . . . . . . . . . . . .73. . . . . . . . . . . . . . . .746. Òåêñòóðèðîâàíèå776.1.Ïîäãîòîâêà òåêñòóðû6.2.Íàëîæåíèå òåêñòóðû íà îáúåêòû.
. . . . . . . . . . . . . . . .6.3.Òåêñòóðíûå êîîðäèíàòû6.4.Êîíòðîëüíûå âîïðîñû77. . . . . . . . . .81. . . . . . . . . . . . . . .84. . . . . . . . . . . . . . . .877. Îïåðàöèè ñ ïèêñåëÿìè897.1.Ñìåøèâàíèå èçîáðàæåíèé è ïðîçðà÷íîñòü . . . . .7.2.Áóôåð-íàêîïèòåëü . . . . . . . . . . . . . . . . . . .937.3.Áóôåð ìàñêè . . . .
. . . . . . . . . . . . . . . . . .947.4.Óïðàâëåíèå ðàñòåðèçàöèåé . . . . . . . . . . . . . .967.5.Êîíòðîëüíûå âîïðîñû98. . . . . . . . . . . . . . . .90ÎãëàâëåíèåII5Ïðèåìû ðàáîòû ñ OpenGL998. Ãðàôè÷åñêèå àëãîðèòìû íà îñíîâå OpenGL8.1.Óñòðàíåíèå ñòóïåí÷àòîñòè. . . . . . . .
. . . . . .1018.2.Ïîñòðîåíèå òåíåé. . . . . . . . . . . . . . . . . . .1038.3.Çåðêàëüíûå îòðàæåíèÿ . . . . . . . . . . . . . . . .1098.4.Êîíòðîëüíûå âîïðîñû113. . . . . . . . . . . . . . . .9. Îïòèìèçàöèÿ ïðîãðàììIII1011159.1.Îðãàíèçàöèÿ ïðèëîæåíèÿ9.2.Îïòèìèçàöèÿ âûçîâîâ OpenGL. . . . . . . . . . . . . .9.3.Êîíòðîëüíûå âîïðîñû115. . . . . . . . .
. .120. . . . . . . . . . . . . . . .128Ñîçäàíèå ïðèëîæåíèé ñ OpenGL13110.OpenGL-ïðèëîæåíèÿ ñ ïîìîùüþ GLUT13310.1. Ñòðóêòóðà GLUT-ïðèëîæåíèÿ . . . . . . . . . . . .13310.2. GLUT â ñðåäå Microsoft Visual C++ 6.0. . . . . .137. . . . .139. . . . . . .14010.5. GLUT â ñðåäå Borland C++ Builder 2006 . . .
. . .14110.3. GLUT â ñðåäå Microsoft Visual C++ 200510.4. GLUT â ñðåäå Borland C++ Builder 611.Èñïîëüçîâàíèå OpenGL â MFC è VCL11.1. Êîíòåêñò óñòðîéñòâà. . . . . . . . . . . . . . . . .11.2. Óñòàíîâêà ôîðìàòà ïèêñåëåé. . . . . . . . . . . .11.3. Êîíòåêñò ðèñîâàíèÿ (render context)11.4. Êëàññ GLRC145146147. .
. . . . . .148. . . . . . . . . . . . . . . . . . . . . .14911.5. Èñïîëüçîâàíèå OpenGL c MFC. . . . . . . . . . .15011.6. Èñïîëüçîâàíèå OpenGL c VCL . . . . . . . . . . . .15312.OpenGL â .NET12.1. GLUT â ñðåäå Microsoft Visual C# 2005157. . . . . .15712.2. Èñïîëüçîâàíèå OpenGL â WindowsForms . . .
. . .160Îãëàâëåíèå6IVÏðèëîæåíèÿ163À. Ïðèìèòèâû áèáëèîòåê GLU è GLUT165Á. Äåìîíñòðàöèîííûå ïðîãðàììû169Á.1. Ïðèìåð 1: Ïðîñòîå GLUT-ïðèëîæåíèå . . . . . . .169Á.2. Ïðèìåð 2: Ìîäåëü îñâåùåíèÿ OpenGL . . . . . . .173Á.3. Çàãðóçêà BMP ôàéëà . . . . . . . . . . . . . . .
. .178Á.4. Ïðèìåð 3: Òåêñòóðèðîâàíèå è àíèìàöèÿ . . . . . .186Á.5. Êëàññ äëÿ ðàáîòû ñ OpenGL â Win32 . . . . . . . .195Â. Ïðèìåðû ïðàêòè÷åñêèõ çàäàíèéÂ.1. Cornell Box . . . . . . . . . . . . . . . . . . . . . . .201201Â.2. Âèðòóàëüíûå ÷àñû . .
. . . . . . . . . . . . . . . . .204Â.3. Èíòåðàêòèâíûé ëàíäøàôò . . . . . . . . . . . . . .206Ëèòåðàòóðà215Ïðåäìåòíûé óêàçàòåëü217ÏðåäèñëîâèåÊîìïüþòåðíàÿ (ìàøèííàÿ) ãðàôèêà î÷åíü ìîëîäàÿ äèñöèïëèíà. Ïîÿâëåíèå ìàøèííîé ãðàôèêè êàê íàó÷íî-èññëåäîâàòåëüñêîãî íàïðàâëåíèÿ îáû÷íî ñâÿçûâàþò ñ èìåíåì Àéâåíà Ñàçåðëåíäà (Ivan Sutherland), êîòîðûé â 1963 ã. îïóáëèêîâàë ñòàòüþñ ðåçóëüòàòàìè ñâîåé äèññåðòàöèîííîé ðàáîòû.
 1967 ã. áûëàîáðàçîâàíà ïðîôåññèîíàëüíàÿ ãðóïïà ACM SIGGRAPH.  ðàííèé ïåðèîä ðàçâèòèÿ ìàøèííîé ãðàôèêè àññîöèàöèÿ SIGGRAPHðàçâèâàëàñü êàê íàó÷íî-òåõíè÷åñêàÿ îðãàíèçàöèÿ.  1983 ã. áûëñôîðìèðîâàí Êîìèòåò SIGGRAPH ïî îáðàçîâàíèþ äëÿ ñîâåðøåíñòâîâàíèÿ îáó÷åíèÿ ìàøèííîé ãðàôèêå è èñïîëüçîâàíèÿ ååâ ó÷åáíîì ïðîöåññå.Ìû ñòàëè ñâèäåòåëÿìè äðàìàòè÷åñêèõ èçìåíåíèé, êîòîðûåïðîèçîøëè â êîìïüþòåðíîé ãðàôèêå â 1990-å ãîäû. Åñëè â êîíöå 80-õ ãðàôè÷åñêèå ðàáî÷èå ñòàíöèè ñòîèëè áåçóìíî äîðîãî èðàáîòàòü ñ íèìè ìîãëè òîëüêî â î÷åíü áîãàòûõ îðãàíèçàöèÿõ(êàê ïðàâèëî èç ÂÏÊ), òî â êîíöå 1990-õ ãðàôè÷åñêèå ñòàíöèè ñâïîëíå óäîâëåòâîðèòåëüíûìè âîçìîæíîñòÿìè çà 1000 USD ñòàëè äîñòóïíû óíèâåðñèòåòàì è äàæå îòäåëüíûì ñòóäåíòàì. Åñëèâ 1980-å èñïîëüçîâàëàñü ïðåèìóùåñòâåííî âåêòîðíàÿ ãðàôèêà,òî â êîíöå 1990-õ ðàñòðîâàÿ ïîëíîöâåòíàÿ ãðàôèêà ïî÷òè ïîëíîñòüþ âûòåñíèëà âåêòîðíóþ.
Òðåõìåðíàÿ ãðàôèêà ñòàëà ñòîëüæå ðàñïðîñòðàíåííîé, êàê äâóõìåðíàÿ, ïîñêîëüêó ïîÿâèëèñü èáûñòðî ñîâåðøåíñòâóþòñÿ âèäåîïëàòû ñ ãðàôè÷åñêèìè óñêîðè7Îãëàâëåíèå8òåëÿìè è z-áóôåðîì.Ïàðàëëåëüíî ñ èçìåíåíèÿìè ãðàôè÷åñêîé àïïàðàòóðû ïðîèñõîäèëè ãëóáîêèå ìåòàìîðôîçû â ïðîãðàììíîì îáåñïå÷åíèè.Âñëåä çà øèðîêèì ðàñïðîñòðàíåíèåì â 1970-å ãîäû ãðàôè÷åñêèõáèáëèîòåê (â îñíîâíîì âåêòîðíûõ, â áîëüøèíñòâå ñâîåì ôîðòðàííûõ) â 1980-å ãîäû ïîòðåáîâàëîñü íåñêîëüêî ýòàïîâ ñòàíäàðòèçàöèè ãðàôè÷åñêîãî îáåñïå÷åíèÿ (Core System, PHIGS, GKS),÷òîáû ê ñåðåäèíå 1990-õ ïðèéòè ê Îòêðûòîé Ãðàôè÷åñêîé Áèáëèîòåêå (OpenGL).  íàñòîÿùåå âðåìÿ ìíîãèå ôóíêöèè ýòîé áèáëèîòåêè ðåàëèçîâàíû àïïàðàòíî.Âñå ýòè ïðîöåññû íå ìîãëè íå ñêàçàòüñÿ íà ïðåïîäàâàíèèêîìïüþòåðíîé ãðàôèêè â óíèâåðñèòåòàõ.
Îäíàêî, äàæå â ÑØÀäî êîíöà 1970-õ ãîäîâ ìàøèííàÿ ãðàôèêà îñòàâàëàñü íåîáû÷íûì ïðåäìåòîì ñðåäè óíèâåðñèòåòñêèõ êóðñîâ.  ó÷åáíûõ ïëàíàõ ACM 1978 ã. ìàøèííàÿ ãðàôèêà îòñóòñòâîâàëà.  1980-å ãîäû è â ïåðâîé ïîëîâèíå 1990-õ öåëüþ êóðñà áûëî èçó÷åíèå è ïðîãðàììèðîâàíèå áàçîâûõ àëãîðèòìîâ ãðàôèêè (ðèñîâàíèå ïðÿìîéè êðèâîé, êëèïïèðîâàíèå, øòðèõîâêà èëè ðàñòåðèçàöèÿ ìíîãîóãîëüíèêà, îäíîðîäíûå êîîðäèíàòû è àôôèííûå ïðåîáðàçîâàíèÿ, âèäîâûå ïðåîáðàçîâàíèÿ) [1, 2].
Òåïåðü, ïðè íàëè÷èè èíòåðôåéñà ïðèêëàäíîãî ïðîãðàììèðîâàíèÿ (API) âûñîêîãî óðîâíÿ,êîãäà ýëåìåíòàðíûå ôóíêöèè èìåþòñÿ â áèáëèîòåêå OpenGL èçà÷àñòóþ ðåàëèçóþòñÿ àïïàðàòíî, ïðèøëîñü ïåðåñìîòðåòü êîíöåïöèþ êóðñà.  ñàìîì äåëå, çà÷åì ó÷èòüñÿ óìíîæàòü ñòîëáèêîì, åñëè ó êàæäîãî â ðóêàõ êàëüêóëÿòîð. Ïîÿâèëàñü âîçìîæíîñòü âêëþ÷èòü â êóðñ áîëåå ñëîæíûå è áîëåå ñîâðåìåííûå ðàçäåëû êîìïüþòåðíîé ãðàôèêè, òàêèå êàê òåêñòóðèðîâàíèå, àíèìàöèÿ.