Главная » Просмотр файлов » Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (PDF)

Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (PDF) (1124368), страница 7

Файл №1124368 Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (PDF) (Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (PDF)) 7 страницаЮ.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (PDF) (1124368) страница 72019-05-11СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Ìîäåëüíî-âèäîâûå ïðåîáðàçîâàíèÿ59ìåíåííûå êîîðäèíàòû ýòîé âåðøèíû: 0 xxy 0 y  =M z 0 z 11ãäåM ìàòðèöà ìîäåëüíî-âèäîâîãî ïðåîáðàçîâàíèÿ. Ïåðñïåê-òèâíîå ïðåîáðàçîâàíèå è ïðîåöèðîâàíèå ïðîèçâîäèòñÿ àíàëîãè÷íî. Ñàìà ìàòðèöà ìîæåò áûòü ñîçäàíà ñ ïîìîùüþ ñëåäóþùèõêîìàíä:void g l T r a n s l a t e [ f d ] ( GLtype x , GLtype y , GLtype z )void g l R o t a t e [ f d ] ( GLtype angle ,GLtype x , GLtype y , GLtype z )void g l S c a l e [ f d ] ( GLtype x , GLtype y , GLtype z )glTranslateïðîèçâîäèò ïåðåíîñ îáúåêòà, ïðèáàâëÿÿ ê êîîðäè-íàòàì åãî âåðøèí çíà÷åíèÿ ñâîèõ ïàðàìåòðîâ.glRotate ïðîèçâîäèò ïîâîðîò îáúåêòà ïðîòèâ ÷àñîâîé ñòðåëêè(x,y,z).glScale ïðîèçâîäèò ìàñøòàáèðîâàíèå îáúåêòà (ñæàòèå èëèðàñòÿæåíèå) âäîëü âåêòîðà (x,y,z) , óìíîæàÿ ñîîòâåòñòâóþùèåíà óãîë angle (èçìåðÿåòñÿ â ãðàäóñàõ) âîêðóã âåêòîðàêîîðäèíàòû åãî âåðøèí íà çíà÷åíèÿ ñâîèõ ïàðàìåòðîâ.Âñå ýòè ïðåîáðàçîâàíèÿ èçìåíÿþò òåêóùóþ ìàòðèöó, à ïîòîìó ïðèìåíÿþòñÿ ê ïðèìèòèâàì, êîòîðûå îïðåäåëÿþòñÿ ïîçæå. ñëó÷àå, åñëè íàäî, íàïðèìåð, ïîâåðíóòü îäèí îáúåêò ñöåíû,à äðóãîé îñòàâèòü íåïîäâèæíûì, óäîáíî ñíà÷àëà ñîõðàíèòü òåêóùóþ âèäîâóþ ìàòðèöó â ñòåêå êîìàíäîéâûçâàòüglRotateglPushMatrix,çàòåìñ íóæíûìè ïàðàìåòðàìè, îïèñàòü ïðèìèòèâû,èç êîòîðûõ ñîñòîèò ýòîò îáúåêò, à çàòåì âîññòàíîâèòü òåêóùóþìàòðèöó êîìàíäîéglPopMatrix.Êðîìå èçìåíåíèÿ ïîëîæåíèÿ ñàìîãî îáúåêòà, ÷àñòî áûâàåòíåîáõîäèìî èçìåíèòü ïîëîæåíèå íàáëþäàòåëÿ, ÷òî òàêæå ïðèâîäèò ê èçìåíåíèþ ìîäåëüíî-âèäîâîé ìàòðèöû.Ýòî ìîæíî ñäåëàòü ñ ïîìîùüþ êîìàíäûÃëàâà 4.

Ïðåîáðàçîâàíèÿ îáúåêòîâ60void gluLookAt (GLdouble eyex , GLdouble eyey , GLdouble eyez ,GLdouble centx , GLdouble centy , GLdouble centz ,GLdouble upx , GLdouble upy , GLdouble upz )(eyex, eyey, eyez) îïðåäåëÿåò òî÷êó íàáëþäåíèÿ,(centx, centy, centz) çàäàåò öåíòð ñöåíû, êîòîðûé áóäåò ïðîåöèðîâàòüñÿ â öåíòð îáëàñòè âûâîäà, à âåêòîð (upx, upy, upz) çàäàåòïîëîæèòåëüíîå íàïðàâëåíèå îñè y , îïðåäåëÿÿ ïîâîðîò êàìåðû.ãäåòî÷êàÅñëè, íàïðèìåð, êàìåðó íå íàäî ïîâîðà÷èâàòü, òî çàäàåòñÿ çíà÷åíèå(0, 1, 0),à ñî çíà÷åíèåì(0, −1, 0)ñöåíà áóäåò ïåðåâåðíóòà.Ñòðîãî ãîâîðÿ, ýòà êîìàíäà ñîâåðøàåò ïåðåíîñ è ïîâîðîò îáúåêòîâ ñöåíû, íî â òàêîì âèäå çàäàâàòü ïàðàìåòðû áûâàåò óäîáíåå.

Ñëåäóåò îòìåòèòü, ÷òî âûçûâàòü êîìàíäógluLookAt()èìååòñìûñë ïåðåä îïðåäåëåíèåì ïðåîáðàçîâàíèé îáúåêòîâ, êîãäà ìîäåëüíî-âèäîâàÿ ìàòðèöà ðàâíà åäèíè÷íîé.Çàïîìíèòå: ìàòðè÷íûå ïðåîáðàçîâàíèÿ â OpenGL íóæíî çàïèñûâàòü â îáðàòíîì ïîðÿäêå. Íàïðèìåð, åñëè âû õîòèòå ñíà÷àëà ïîâåðíóòü îáúåêò, à çàòåì ïåðåäâèíóòü åãî, ñíà÷àëà âûçîâèòå êîìàíäóglTranslate() , à òîëüêî ïîòîì glRotate().

Ïîñëå ýòîãîîïðåäåëÿéòå ñàì îáúåêò.4.3. Ïðîåêöèè OpenGL ñóùåñòâóþò ñòàíäàðòíûå êîìàíäû äëÿ çàäàíèÿîðòîãðàôè÷åñêîé (ïàðàëëåëüíîé) èïåðñïåêòèâíîéïðîåêöèé.Ïåðâûé òèï ïðîåêöèè ìîæåò áûòü çàäàí êîìàíäàìèvoid glOrtho ( GLdouble l e f t , GLdouble r i g h t ,GLdouble bottom , GLdouble top ,GLdouble near , GLdouble f a r )void gluOrtho2D ( GLdouble l e f t , GLdouble r i g h t ,GLdouble bottom , GLdouble top )4.3. Ïðîåêöèè61Ïåðâàÿ êîìàíäà ñîçäàåò ìàòðèöó ïðîåêöèè â óñå÷åííûé îáúåì âèäèìîñòè (ïàðàëëåëåïèïåä âèäèìîñòè) â ëåâîñòîðîííåé ñèñòåìå êîîðäèíàò.Ïàðàìåòðû êîìàíäû çàäàþò òî÷êè(right, top, zf ar),(lef t, bottom, znear)èêîòîðûå îòâå÷àþò ëåâîìó íèæíåìó è ïðàâî-ìó âåðõíåìó óãëàì îêíà âûâîäà. Ïàðàìåòðûnearèfarçàäàþòðàññòîÿíèå äî áëèæíåé è äàëüíåé ïëîñêîñòåé îòñå÷åíèÿ ïî óäàëåíèþ îò òî÷êè(0, 0, 0)è ìîãóò áûòü îòðèöàòåëüíûìè.Ðèñ.

4.3. Îðòîãðàôè÷åñêàÿ ïðîåêöèÿÂî âòîðîé êîìàíäå, â îòëè÷èå îò ïåðâîé, çíà÷åíèÿóñòàíàâëèâàþòñÿ ðàâíûìè−1è1nearèfarñîîòâåòñòâåííî. Ýòî óäîáíî,åñëè OpenGL èñïîëüçóåòñÿ äëÿ ðèñîâàíèÿ äâóìåðíûõ îáúåêòîâ. ýòîì ñëó÷àå ïîëîæåíèå âåðøèí ìîæíî çàäàâàòü, èñïîëüçóÿêîìàíäûglVertex2.Ïåðñïåêòèâíàÿ ïðîåêöèÿ îïðåäåëÿåòñÿ êîìàíäîévoid g l u P e r s p e c t i v e ( GLdouble angley , GLdouble aspect ,GLdouble znear , GLdouble z f a r )êîòîðàÿ çàäàåò óñå÷åííûé êîíóñ âèäèìîñòè â ëåâîñòîðîííåé ñèñòåìå êîîðäèíàò.

Ïàðàìåòðangleyîïðåäåëÿåò óãîë âèäèìîñòè âãðàäóñàõ ïî îñè ó è äîëæåí íàõîäèòüñÿ â äèàïàçîíå îò 0 äî 180.Ãëàâà 4. Ïðåîáðàçîâàíèÿ îáúåêòîâ62Óãîë âèäèìîñòè âäîëü îñè x çàäàåòñÿ ïàðàìåòðîìaspect,êîòî-ðûé îáû÷íî çàäàåòñÿ êàê îòíîøåíèå ñòîðîí îáëàñòè âûâîäà (êàêïðàâèëî, ðàçìåðîâ îêíà).Ðèñ. 4.4. Ïåðñïåêòèâíàÿ ïðîåêöèÿÏàðàìåòðûzfarèznear çàäàþò ðàññòîÿíèå îò íàáëþäàòåëÿ äîïëîñêîñòåé îòñå÷åíèÿ ïî ãëóáèíå è äîëæíû áûòü ïîëîæèòåëüíûìè. ×åì áîëüøå îòíîøåíèåzf ar/znear,òåì õóæå â áóôåðå ãëó-áèíû áóäóò ðàçëè÷àòüñÿ ðàñïîëîæåííûå ðÿäîì ïîâåðõíîñòè, òàêêàê ïî óìîë÷àíèþ â íåãî áóäåò çàïèñûâàòüñÿ ¾ñæàòàÿ¿ ãëóáèíàâ äèàïàçîíå îò 0 äî 1.Ïðåæäåòå÷åìâêëþ÷èòüçàäàâàòüðåæèììàòðèöûðàáîòûñïðîåêöèé,íóæíîéíåìàòðèöåéçàáóäü-êîìàíäîéglMatrixMode(GL_PROJECTION) è ñáðîñèòü òåêóùóþ ñ ïîìîùüþâûçîâà glLoadIdentity().Ïðèìåð:/* îðòîãðàôè÷åñêàÿ ïðîåêöèÿ */glMatrixMode (GL_PROJECTION) ;glLoadIdentity ( ) ;glOrtho ( 0 , w, 0 , h , − 1.0 , 1 .

0 ) ;4.4. Îáëàñòü âûâîäà634.4. Îáëàñòü âûâîäàÏîñëå ïðèìåíåíèÿ ìàòðèöû ïðîåêöèé íà âõîä ñëåäóþùåãîïðåîáðàçîâàíèÿ ïîäàþòñÿ òàê íàçûâàåìûåóñå÷åííûå(clipped)êîîðäèíàòû. Çàòåì íàõîäÿòñÿ íîðìàëèçîâàííûå êîîðäèíàòû âåðøèí ïî ôîðìóëå:  xnxc /wc yn  =  yc /wc znzc /wcÎáëàñòü âûâîäà ïðåäñòàâëÿåò ñîáîé ïðÿìîóãîëüíèê â îêîííîé ñèñòåìå êîîðäèíàò, ðàçìåðû êîòîðîãî çàäàþòñÿ êîìàíäîévoid glViewPort ( GLint x , GLint y ,GLint width , GLint h e i g h t )Çíà÷åíèÿ âñåõ ïàðàìåòðîâ çàäàþòñÿ â ïèêñåëàõ è îïðåäåëÿþòøèðèíó è âûñîòó îáëàñòè âûâîäà ñ êîîðäèíàòàìè ëåâîãî íèæíåãî óãëà (x,y) â îêîííîé ñèñòåìå êîîðäèíàò.

Ðàçìåðû îêîííîé ñèñòåìû êîîðäèíàò îïðåäåëÿþòñÿ òåêóùèìè ðàçìåðàìè îêíà ïðèëîæåíèÿ, òî÷êà (0,0) íàõîäèòñÿ â ëåâîì íèæíåì óãëó îêíà.Èñïîëüçóÿ ïàðàìåòðû êîìàíäûglViewPort(),OpenGL âû÷èñ-ëÿåò îêîííûå êîîðäèíàòû öåíòðà îáëàñòè âûâîäà (ox,oy) ïî ôîðìóëàì:ox = x + width/2oy = y + height/2Ïóñòüpx = width, py = height,òîãäà ìîæíî íàéòè îêîííûåêîîðäèíàòû êàæäîé âåðøèíû:  xw(px /2)xn + ox yw  = (py /2)yn + oyzw[(f − n)/2]zn + (n + f )/2Ïðè ýòîì öåëûå ïîëîæèòåëüíûå âåëè÷èíûnèfçàäàþò ìè-íèìàëüíóþ è ìàêñèìàëüíóþ ãëóáèíó òî÷êè â îêíå è ïî óìîë÷àíèþ ðàâíû 0 è 1 ñîîòâåòñòâåííî.

Ãëóáèíà êàæäîé òî÷êè çàïèñûâàåòñÿ â ñïåöèàëüíûé áóôåð ãëóáèíû (z-áóôåð), êîòîðûéÃëàâà 4. Ïðåîáðàçîâàíèÿ îáúåêòîâ64èñïîëüçóåòñÿ äëÿ óäàëåíèÿ íåâèäèìûõ ëèíèé è ïîâåðõíîñòåé.Óñòàíîâèòü çíà÷åíèÿnèfìîæíî âûçîâîì ôóíêöèèvoid glDepthRange ( GLclampd n , GLclampd f )ÊîìàíäàglViewPort()îáû÷íî èñïîëüçóåòñÿ â ôóíêöèè, çàðå-ãèñòðèðîâàííîé ñ ïîìîùüþ êîìàíäûglutReshapeFunc(),êîòîðàÿâûçûâàåòñÿ, åñëè ïîëüçîâàòåëü èçìåíÿåò ðàçìåðû îêíà ïðèëîæåíèÿ.4.5.

Êîíòðîëüíûå âîïðîñû1) Êàêèå ñèñòåìû êîîðäèíàò èñïîëüçóþòñÿ â OpenGL?2) Ïåðå÷èñëèòå âèäû ìàòðè÷íûõ ïðåîáðàçîâàíèé â OpenGL.Êàêèì îáðàçîì â OpenGL ïðîèñõîäÿò ïðåîáðàçîâàíèÿ îáúåêòîâ?3) ×òî òàêîå ìàòðè÷íûé ñòåê?4) Ïåðå÷èñëèòå ñïîñîáû èçìåíåíèÿ ïîëîæåíèÿ íàáëþäàòåëÿ âOpenGL.5) Êàêàÿ ïîñëåäîâàòåëüíîñòü âûçîâîâ êîìàíäglRotate() è glScale () ñîîòâåòñòâóåò êîìàíäågluLookAt(0, 0, −10, 10, 0, 0, 0, −1, 0)?glTranslate() ,6) Êàêèå ñòàíäàðòíûå êîìàíäû äëÿ çàäàíèÿ ïðîåêöèé âû çíàåòå?7) ×òî òàêîå âèäîâûå êîîðäèíàòû? Íîðìàëèçîâàííûå êîîðäèíàòû?Ãëàâà 5.Ìàòåðèàëû è îñâåùåíèåÄëÿ ñîçäàíèÿ ðåàëèñòè÷íûõ èçîáðàæåíèé íåîáõîäèìî îïðåäåëèòü êàê ñâîéñòâà ñàìîãî îáúåêòà, òàê è ñâîéñòâà ñðåäû, âêîòîðîé îí íàõîäèòñÿ.

Ïåðâàÿ ãðóïïà ñâîéñòâ âêëþ÷àåò â ñåáÿïàðàìåòðû ìàòåðèàëà, èç êîòîðîãî ñäåëàí îáúåêò, ñïîñîáû íàíåñåíèÿ òåêñòóðû íà åãî ïîâåðõíîñòü, ñòåïåíü ïðîçðà÷íîñòè îáúåêòà. Êî âòîðîé ãðóïïå ìîæíî îòíåñòè êîëè÷åñòâî è ñâîéñòâàèñòî÷íèêîâ ñâåòà, óðîâåíü ïðîçðà÷íîñòè ñðåäû, à òàêæå ìîäåëüîñâåùåíèÿ. Âñå ýòè ñâîéñòâà ìîæíî çàäàâàòü, âûçûâàÿ ñîîòâåòñòâóþùèå êîìàíäû OpenGL.5.1. Ìîäåëü îñâåùåíèÿ OpenGL èñïîëüçóåòñÿ ìîäåëü îñâåùåíèÿ, â ñîîòâåòñòâèè ñêîòîðîé öâåò òî÷êè îïðåäåëÿåòñÿ íåñêîëüêèìè ôàêòîðàìè: ñâîéñòâàìè ìàòåðèàëà è òåêñòóðû, âåëè÷èíîé íîðìàëè â ýòîé òî÷êå,à òàêæå ïîëîæåíèåì èñòî÷íèêà ñâåòà è íàáëþäàòåëÿ. Äëÿ êîððåêòíîãî ðàñ÷åòà îñâåùåííîñòè â òî÷êå íàäî èñïîëüçîâàòü åäèíè÷íûå íîðìàëè, îäíàêî êîìàíäû òèïàglScaleìîãóò èçìåíÿòüäëèíó íîðìàëåé.

×òîáû ýòî ó÷èòûâàòü, èñïîëüçóéòå óæå óïîìèíàâøèéñÿ ðåæèì íîðìàëèçàöèè âåêòîðîâ íîðìàëåé, êîòîðûé65Ãëàâà 5. Ìàòåðèàëû è îñâåùåíèå66âêëþ÷àåòñÿ âûçîâîì êîìàíäûglEnable (GL_NORMALIZE)Äëÿ çàäàíèÿ ãëîáàëüíûõ ïàðàìåòðîâ îñâåùåíèÿ èñïîëüçóþòñÿ êîìàíäûvoid glLightModel [ i f ] (GLenum pname , GLenum param )void glLightModel [ i f ] v (GLenum pname ,const GLtype * params )Àðãóìåíò pname îïðåäåëÿåò, êàêîé ïàðàìåòð ìîäåëè îñâåùåíèÿ áóäåò íàñòðàèâàòüñÿ è ìîæåò ïðèíèìàòü ñëåäóþùèå çíà÷åíèÿ:GL_LIGHT_MODEL_LOCAL_VIEWERparam ïàðàìåòðäîëæåí áûòü áóëåâûì è çàäàåò ïîëîæåíèå íàáëþäà-òåëÿ. Åñëè îí ðàâåíGL_FALSE, òî íàïðàâëåíèå îáçîðà ñ÷è-òàåòñÿ ïàðàëëåëüíûì îñè−zâíå çàâèñèìîñòè îò ïîëîæå-íèÿ â âèäîâûx êîîðäèíàòàõ.

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

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

Список файлов книги

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