Баяковский.Начальный курс OpenGL (1124482), страница 6
Текст из файла (страница 6)
Àâòîìàòè÷åñêîå íàëîæåíèå òåêñòóðû ïðåäóñìîòðåíî òîëüêî äëÿ ôèãóðèç áèáëèîòåêè GLU (ñîçäàíèå òåêñòóð â OpenGL áóäåò ðàññìàòðèâàòüñÿ â ãëàâå 6).3.4. Äèñïëåéíûå ñïèñêè47Íàïðèìåð, ÷òîáû íàðèñîâàòü ñôåðó èëè öèëèíäð, íàäî ñíà÷àëà ñîçäàòü îáúåêò ñïåöèàëüíîãî òèïàGLUquadricObjñ ïîìîùüþêîìàíäûGLUquadricObj * gluNewQuadric ( void ) ;à çàòåì âûçâàòü ñîîòâåòñòâóþùóþ êîìàíäó:void gluSphere ( GLUquadricObj* qobj ,GLdouble radius ,GLint s l i c e s ,GLint s t a c k s )void g l u C y l i n d e r ( GLUquadricObj* qobj ,GLdouble baseRadius ,GLdouble topRadius ,GLdouble height ,GLint s l i c e s ,GLint s t a c k s )ãäå ïàðàìåòðstacks âäîëüslicesçàäàåò êîëè÷åñòâî ðàçáèåíèé âîêðóã îñè z, àîñè z.Áîëåå ïîäðîáíóþ èíôîðìàöèþ îá ýòèõ è äðóãèõ êîìàíäàõïîñòðîåíèÿ ïðèìèòèâîâ ìîæíî íàéòè â ïðèëîæåíèè À.3.4.
Äèñïëåéíûå ñïèñêèÅñëè ìû íåñêîëüêî ðàç îáðàùàåìñÿ ê îäíîé è òîé æå ãðóïïåêîìàíä, òî èõ ìîæíî îáúåäèíèòü â òàê íàçûâàåìûé äèñïëåéíûé ñïèñîê (display list) è âûçûâàòü åãî ïðè íåîáõîäèìîñòè. Äëÿòîãî, ÷òîáû ñîçäàòü íîâûé äèñïëåéíûé ñïèñîê, íàäî ïîìåñòèòüâñå êîìàíäû, êîòîðûå äîëæíû â íåãî âîéòè, ìåæäó ñëåäóþùèìèîïåðàòîðíûìè ñêîáêàìè:void glNewList ( GLuint l i s t , GLenum mode )void glEndList ( )Ãëàâà 3. Ðèñîâàíèå ãåîìåòðè÷åñêèõ îáúåêòîâ48Äëÿ ðàçëè÷åíèÿ ñïèñêîâ èñïîëüçóþòñÿ öåëûå ïîëîæèòåëüíûå ÷èñëà, çàäàâàåìûå ïðè ñîçäàíèè ñïèñêà çíà÷åíèåì ïàðàìåòðàlist .modeÏàðàìåòðîïðåäåëÿåò ðåæèì îáðàáîòêè êîìàíä,âõîäÿùèõ â ñïèñîê:GL_COMPILE êîìàíäû çàïèñûâàþòñÿ â ñïèñîê áåç âûïîë-íåíèÿ;GL_COMPILE_AND_EXECUTE êîìàíäû âûïîëíÿþò-ñÿ, à çàòåì çàïèñûâàþòñÿ â ñïèñîê.Ïîñëå òîãî, êàê ñïèñîê ñîçäàí, åãî ìîæíî âûçâàòü êîìàíäîévoid g l C a l l L i s t ( GLuint l i s t )óêàçàâ â ïàðàìåòðå list èäåíòèôèêàòîð íóæíîãî ñïèñêà.×òîáû âûçâàòü ñðàçó íåñêîëüêî ñïèñêîâ, ìîæíî âîñïîëüçîâàòüñÿ êîìàíäîévoid g l C a l l L i s t s (G L s i z e i n , GLenum type ,*lists )const GLvoidâûçûâàþùåé n ñïèñêîâ ñ èäåíòèôèêàòîðàìè èç ìàññèâà lists,òèï ýëåìåíòîâ êîòîðîãî óêàçûâàåòñÿ â ïàðàìåòðå type.
Ýòî ìî-GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT,GL_INT, GL_UNSIGNED_INT è íåêîòîðûå äðóãèå. Äëÿ óäàëå-ãóò áûòü òèïûíèÿ ñïèñêîâ èñïîëüçóåòñÿ êîìàíäàvoid g l D e l e t e L i s t s ( GLint l i s t , G L s i z e i range )êîòîðàÿ óäàëÿåò ñïèñêè ñ èäåíòèôèêàòîðàìè ID èç äèàïàçîíàlist ≤ ID ≤ list + range − 1.Ïðèìåð:glNewList ( 1 , GL_COMPILE) ;g l B e g i n (GL_TRIANGLES) ;glVertex3f (1.0 f , 1.0 f , 1.0 f ) ;glVertex3f (10.0 f , 1.0 f , 1.0 f ) ;glVertex3f (10.0 f , 10.0 f , 1.0 f ) ;3.5.
Ìàññèâû âåðøèí49glEnd ( ) ;glEndList ( )...glCallList (1);Äèñïëåéíûå ñïèñêè â îïòèìàëüíîì (ñêîìïèëèðîâàííîì) âèäå õðàíÿòñÿ â ïàìÿòè ñåðâåðà, ÷òî ïîçâîëÿåò ðèñîâàòü ïðèìèòèâû â òàêîé ôîðìå ìàêñèìàëüíî áûñòðî.  òî æå âðåìÿ áîëüøèå îáúåìû äàííûõ çàíèìàþò ìíîãî ïàìÿòè, ÷òî âëå÷åò, â ñâîþî÷åðåäü, ïàäåíèå ïðîèçâîäèòåëüíîñòè.
Òàêèå áîëüøèå îáúåìû(áîëüøå íåñêîëüêèõ äåñÿòêîâ òûñÿ÷ ïðèìèòèâîâ) ëó÷øå ðèñîâàòü ñ ïîìîùüþ ìàññèâîâ âåðøèí.3.5. Ìàññèâû âåðøèíÅñëè âåðøèí ìíîãî, òî, ÷òîáû íå âûçûâàòü äëÿ êàæäîé êîìàíäóglVertex,óäîáíî îáúåäèíÿòü âåðøèíû â ìàññèâû, èñïîëü-çóÿ êîìàíäóvoid g l V e r t e x P o i n t e r ( GLint s i z e , GLenum type ,G L s i z e i s t r i d e , void * ptr )êîòîðàÿ îïðåäåëÿåò ñïîñîá õðàíåíèÿ è êîîðäèíàòû âåðøèí.Ïðè ýòîì size îïðåäåëÿåò ÷èñëî êîîðäèíàò âåðøèíû (ìîæåò áûòüðàâåí 2, 3, 4), type îïðåäåëÿåò òèï äàííûõ (ìîæåò áûòü ðàâåíGL_SHORT, GL_INT, GL_FLOAT, GL_DOUBLE).Èíîãäà óäîáíîõðàíèòü â îäíîì ìàññèâå äðóãèå àòðèáóòû âåðøèíû, òîãäà ïàðàìåòð stride çàäàåò ñìåùåíèå îò êîîðäèíàò îäíîé âåðøèíû äîêîîðäèíàò ñëåäóþùåé; åñëè stride ðàâåí íóëþ, ýòî çíà÷èò, ÷òîêîîðäèíàòû ðàñïîëîæåíû ïîñëåäîâàòåëüíî.
 ïàðàìåòðå ptr óêàçûâàåòñÿ àäðåñ, ãäå íàõîäÿòñÿ äàííûå.Àíàëîãè÷íî ìîæíî îïðåäåëèòü ìàññèâ íîðìàëåé, öâåòîâ èíåêîòîðûõ äðóãèõ àòðèáóòîâ âåðøèíû, èñïîëüçóÿ êîìàíäûvoid glNormalPointer ( GLenum type , G L s i z e i s t r i d e ,Ãëàâà 3. Ðèñîâàíèå ãåîìåòðè÷åñêèõ îáúåêòîâ50void * p o i n t e r )void g l C o l o r P o i n t e r ( GLint s i z e , GLenum type ,G L s i z e i s t r i d e , void * p o i n t e r )Äëÿ òîãî, ÷òîáû ýòè ìàññèâû ìîæíî áûëî èñïîëüçîâàòü âäàëüíåéøåì, íàäî âûçâàòü êîìàíäóvoidg l E n a b l e C l i e n t S t a t e (GLenum array )ñ ïàðàìåòðàìè GL_VERTEX_ARRAY, GL_NORMAL_ARRAY,GL_COLOR_ARRAY ñîîòâåòñòâåííî.Ïîñëå îêîí÷àíèÿ ðàáîòû ñ ìàññèâîì æåëàòåëüíî âûçâàòü êîìàíäóvoid g l D i s a b l e C l i e n t S t a t e (GLenum array )ñ ñîîòâåòñòâóþùèì çíà÷åíèåì ïàðàìåòðàarray.Äëÿ îòîáðàæåíèÿ ñîäåðæèìîãî ìàññèâîâ èñïîëüçóåòñÿ êîìàíäàvoid glArrayElement ( GLint index )êîòîðàÿ ïåðåäàåò OpenGL àòðèáóòû âåðøèíû, èñïîëüçóÿ ýëåìåíòû ìàññèâà ñ íîìåðîì index.
Ýòî àíàëîãè÷íî ïîñëåäîâàòåëüíîìó ïðèìåíåíèþ êîìàíä âèäàglColor, glNormal, glVertexc ñîîò-âåòñòâóþùèìè ïàðàìåòðàìè. Îäíàêî âìåñòî íåå îáû÷íî âûçûâàåòñÿ êîìàíäàvoid glDrawArrays (GLenum mode , GLint f i r s t ,G L s i z e i count )ðèñóþùàÿcount ïðèìèòèâîâ, îïðåäåëÿåìûõ ïàðàìåòðîì mode,èñïîëüçóÿ ýëåìåíòû èç ìàññèâîâ ñ èíäåêñàìè îòcount − 1.f irstäîf irst +Ýòî ýêâèâàëåíòíî âûçîâó ïîñëåäîâàòåëüíîñòè êîìàíäglArrayElement()ñ ñîîòâåòñòâóþùèìè èíäåêñàìè. ñëó÷àå, åñëè îäíà âåðøèíà âõîäèò â íåñêîëüêî ïðèìèòèâîâ,âìåñòî äóáëèðîâàíèÿ åå êîîðäèíàò â ìàññèâå óäîáíî èñïîëüçîâàòü åå èíäåêñ.Äëÿ ýòîãî íàäî âûçâàòü êîìàíäó3.6. Êîíòðîëüíûå âîïðîñû51void glDrawElements (GLenum mode , G L s i z e i count ,GLenum type , void * i n d i c e s )ãäåindices ýòîìàññèâíîìåðîââåðøèí,êîòîðûåíà-type îïðåäåGL_UNSIGNED_BYTE,GL_UNSIGNED_SHORT, GL_UNSIGNED_INT, à count çàäàåò èõäîèñïîëüçîâàòüëÿåòòèïäëÿýëåìåíòîâïîñòðîåíèÿýòîãîïðèìèòèâîâ,ìàññèâà:êîëè÷åñòâî.Âàæíî îòìåòèòü, ÷òî èñïîëüçîâàíèå ìàññèâîâ âåðøèí ïîçâîëÿåò îïòèìèçèðîâàòü ïåðåäà÷ó äàííûõ íà ñåðâåð OpenGL, è,êàê ñëåäñòâèå, ïîâûñèòü ñêîðîñòü ðèñîâàíèÿ òðåõìåðíîé ñöåíû.Òàêîé ìåòîä îïðåäåëåíèÿ ïðèìèòèâîâ ÿâëÿåòñÿ îäíèì èç ñàìûõáûñòðûõ è õîðîøî ïîäõîäèò äëÿ âèçóàëèçàöèè áîëüøèõ îáúåìîâäàííûõ.3.6.
Êîíòðîëüíûå âîïðîñû1) ×òî òàêîå ôóíêöèÿ îáðàòíîãî âûçîâà è êàê ôóíêöèè îáðàòíîãî âûçîâà ìîãóò áûòü èñïîëüçîâàíû äëÿ ðàáîòû ñOpenGL?2) Äëÿ ÷åãî íóæíà ôóíêöèÿ îáíîâëåíèÿ èçîáðàæåíèÿ è ÷òîîíà äåëàåò?3) ×òî òàêîå ïðèìèòèâ â OpenGL?4) ×òî òàêîå àòðèáóò? Ïåðå÷èñëèòå èçâåñòíûå âàì àòðèáóòûâåðøèí â OpenGL.5) ×òî â OpenGL ÿâëÿåòñÿ àòîìàðíûì ïðèìèòèâîì? Êàêèåòèïû ïðèìèòèâîâ âû çíàåòå?6) Äëÿ ÷åãî â OpenGL èñïîëüçóþòñÿ êîìàíäûglDisable?glEnableèÃëàâà 3. Ðèñîâàíèå ãåîìåòðè÷åñêèõ îáúåêòîâ527) ×òî òàêîå îïåðàòîðíûå ñêîáêè è äëÿ ÷åãî îíè èñïîëüçóþòñÿâ OpenGL?8) ×òî òàêîå äèñïëåéíûå ñïèñêè? Êàê îïðåäåëèòü ñïèñîê èêàê âûçâàòü åãî îòîáðàæåíèå?9) Ïîÿñíèòå îðãàíèçàöèþ ðàáîòû ñ ìàññèâàìè âåðøèí è èõîòëè÷èå îò äèñïëåéíûõ ñïèñêîâ.10) Ïîÿñíèòå ðàáîòó êîìàíäûglDrawElements().3.6.
Êîíòðîëüíûå âîïðîñûÐèñ. 3.1. Ïðèìèòèâû OpenGL.53Ãëàâà 4.Ïðåîáðàçîâàíèÿ îáúåêòîâ OpenGL èñïîëüçóþòñÿ êàê îñíîâíûå òðè ñèñòåìû êîîðäèíàò: ëåâîñòîðîííÿÿ, ïðàâîñòîðîííÿÿ è îêîííàÿ. Ïåðâûå äâå ñèñòåìû ÿâëÿþòñÿ òðåõìåðíûìè è îòëè÷àþòñÿ äðóã îò äðóãà íàïðàâëåíèåì îñè z: â ïðàâîñòîðîííåé îíà íàïðàâëåíà íà íàáëþäàòåëÿ, â ëåâîñòîðîííåé â ãëóáèíó ýêðàíà.
Îñü x íàïðàâëåíàâïðàâî îòíîñèòåëüíî íàáëþäàòåëÿ, îñü y ââåðõ.Ëåâîñòîðîííÿÿ ñèñòåìà èñïîëüçóåòñÿ äëÿ çàäàíèÿ çíà÷åíèéïàðàìåòðàì êîìàíäûgluPerspective() , glOrtho(),êîòîðûå áóäóòðàññìîòðåíû â ïóíêòå 4.3. Ïðàâîñòîðîííÿÿ ñèñòåìà êîîðäèíàòèñïîëüçóåòñÿ âî âñåõ îñòàëüíûõ ñëó÷àÿõ. Îòîáðàæåíèå òðåõìåðíîé èíôîðìàöèè ïðîèñõîäèò â äâóõìåðíóþ îêîííóþ ñèñòåìóêîîðäèíàò.Ñòðîãî ãîâîðÿ, OpenGL ïîçâîëÿåò ïóòåì ìàíèïóëÿöèé ñ ìàòðèöàìè ìîäåëèðîâàòü êàê ïðàâóþ, òàê è ëåâóþ ñèñòåìó êîîðäèíàò. Íî íà äàííîì ýòàïå ëó÷øå ïîéòè ïðîñòûì ïóòåì è çàïîìíèòü: îñíîâíîé ñèñòåìîé êîîðäèíàò OpenGL ÿâëÿåòñÿ ïðàâîñòîðîííÿÿ ñèñòåìà.55Ãëàâà 4.
Ïðåîáðàçîâàíèÿ îáúåêòîâ56(à)(á)(â)Ðèñ. 4.1. Ñèñòåìû êîîðäèíàò â OpenGL. (à) ïðàâîñòîðîííÿÿ,(á) ëåâîñòîðîííÿÿ, (â) îêîííàÿ.4.1. Ðàáîòà ñ ìàòðèöàìèÄëÿ çàäàíèÿ ðàçëè÷íûõ ïðåîáðàçîâàíèé îáúåêòîâ ñöåíû âOpenGL èñïîëüçóþòñÿ îïåðàöèè íàä ìàòðèöàìè, ïðè ýòîì ðàç-Öëè÷àþò òðè òèïà ìàòðèö: ìîäåëüíî-âèäîâàÿ, ìàòðèöà ïðîåêöèéè ìàòðèöà òåêñòóðû. Âñå îíè èìåþò ðàçìåð 44. Âèäîâàÿ ìàòðè-öà îïðåäåëÿåò ïðåîáðàçîâàíèÿ îáúåêòà â ìèðîâûõ êîîðäèíàòàõ,òàêèå êàê ïàðàëëåëüíûé ïåðåíîñ, èçìåíåíèå ìàñøòàáà è ïîâîðîò.Ìàòðèöà ïðîåêöèé îïðåäåëÿåò, êàê áóäóò ïðîåöèðîâàòüñÿ òðåõìåðíûå îáúåêòû íà ïëîñêîñòü ýêðàíà (â îêîííûå êîîðäèíàòû), àìàòðèöà òåêñòóðû îïðåäåëÿåò íàëîæåíèå òåêñòóðû íà îáúåêò.Óìíîæåíèå êîîðäèíàò íà ìàòðèöû ïðîèñõîäèò â ìîìåíò âûçîâà ñîîòâåòñòâóþùåé êîìàíäû OpenGL, îïðåäåëÿþùåé êîîðäèíàòó (êàê ïðàâèëî, ýòî êîìàíäàglVertex.)Äëÿ òîãî ÷òîáû âûáðàòü, êàêóþ ìàòðèöó íàäî èçìåíèòü, èñïîëüçóåòñÿ êîìàíäà:void glMatrixMode (GLenum mode )âûçîâêîòîðîéñîçíà÷åíèåìmode, ðàâíûìGL_TEXTURE, âêëþ-ïàðàìåòðàGL_MODELVIEW, GL_PROJECTIONèëè÷àåò ðåæèì ðàáîòû ñ ìîäåëüíî-âèäîâîé ìàòðèöåé, ìàòðèöåéïðîåêöèé, èëè ìàòðèöåé òåêñòóðû ñîîòâåòñòâåííî.
Äëÿ âûçîâàêîìàíä, çàäàþùèõ ìàòðèöû òîãî èëè èíîãî òèïà, íåîáõîäèìî4.1. Ðàáîòà ñ ìàòðèöàìè57ñíà÷àëà óñòàíîâèòü ñîîòâåòñòâóþùèé ðåæèì.Äëÿ îïðåäåëåíèÿ ýëåìåíòîâ ìàòðèöû òåêóùåãî òèïà âûçûâàåòñÿ êîìàíäàvoid glLoadMatrix [ f d ] ( GLtype *m)ãäåm óêàçûâàåò íà ìàññèâ èç 16 ýëåìåíòîâ òèïà oat èëè doubleâ ñîîòâåòñòâèè ñ íàçâàíèåì êîìàíäû, ïðè ýòîì ñíà÷àëà â íåìäîëæåí áûòü çàïèñàí ïåðâûé ñòîëáåö ìàòðèöû, çàòåì âòîðîé,òðåòèé è ÷åòâåðòûé. Åùå ðàç îáðàòèì âíèìàíèå: â ìàññèâåmìàòðèöà çàïèñàíà ïî ñòîëáöàì.Êîìàíäàvoidg l L o a d I d e n t i t y ( void )çàìåíÿåò òåêóùóþ ìàòðèöó íà åäèíè÷íóþ.×àñòî áûâàåò íåîáõîäèìî ñîõðàíèòü ñîäåðæèìîå òåêóùåéìàòðèöû äëÿ äàëüíåéøåãî èñïîëüçîâàíèÿ, äëÿ ÷åãî ïðèìåíÿþòñÿ êîìàíäûvoid glPushMatrix ( void )void glPopMatrix ( void )Îíè çàïèñûâàþò è âîññòàíàâëèâàþò òåêóùóþ ìàòðèöó èç ñòåêà, ïðè÷åì äëÿ êàæäîãî òèïà ìàòðèö ñòåê ñâîé.
Äëÿ ìîäåëüíîâèäîâûõ ìàòðèö åãî ãëóáèíà ðàâíà êàê ìèíèìóì 32, äëÿ îñòàëüíûõ êàê ìèíèìóì 2.Äëÿ óìíîæåíèÿ òåêóùåé ìàòðèöû íà äðóãóþ ìàòðèöó èñïîëüçóåòñÿ êîìàíäàvoid glMultMatrix [ f d ] ( GLtype *m)ãäå ïàðàìåòðmÖäîëæåí çàäàâàòü ìàòðèöó ðàçìåðîì 4îáîçíà÷èòü òåêóùóþ ìàòðèöó çàòî â ðåçóëüòàòå âûïîëíåíèÿ êîìàíäûíîâèòñÿ ìàòðèöà4. ÅñëèM , ïåðåäàâàåìóþ ìàòðèöó çà T ,glMultMatrixòåêóùåé ñòà-M ∗ T . Îäíàêî îáû÷íî äëÿ èçìåíåíèÿ ìàòðèöûòîãî èëè èíîãî òèïà óäîáíî èñïîëüçîâàòü ñïåöèàëüíûå êîìàíäû, êîòîðûå ïî çíà÷åíèÿì ñâîèõ ïàðàìåòðîâ ñîçäàþò íóæíóþìàòðèöó è óìíîæàþò åå íà òåêóùóþ.Ãëàâà 4. Ïðåîáðàçîâàíèÿ îáúåêòîâ58 öåëîì, äëÿ îòîáðàæåíèÿ òðåõìåðíûõ îáúåêòîâ ñöåíû â îêíî ïðèëîæåíèÿ èñïîëüçóåòñÿ ïîñëåäîâàòåëüíîñòü, ïîêàçàííàÿ íàðèñóíêå 4.2.Ðèñ.
4.2. Ïðåîáðàçîâàíèÿ êîîðäèíàò â OpenGLÇàïîìíèòå: âñå ïðåîáðàçîâàíèÿ îáúåêòîâ è êàìåðû â OpenGLïðîèçâîäÿòñÿ ñ ïîìîùüþ óìíîæåíèÿ âåêòîðîâ êîîðäèíàò íà ìàòðèöû. Ïðè÷åì óìíîæåíèå ïðîèñõîäèò íà òåêóùóþ ìàòðèöó â ìîìåíò îïðåäåëåíèÿ êîîðäèíàòû êîìàíäîé glVertex è íåêîòîðûìèäðóãèìè.4.2. Ìîäåëüíî-âèäîâûå ïðåîáðàçîâàíèÿÊ ìîäåëüíî-âèäîâûì ïðåîáðàçîâàíèÿì áóäåì îòíîñèòü ïåðåíîñ, ïîâîðîò è èçìåíåíèå ìàñøòàáà âäîëü êîîðäèíàòíûõ îñåé.Äëÿ ïðîâåäåíèÿ ýòèõ îïåðàöèé äîñòàòî÷íî óìíîæèòü íà ñîîòâåòñòâóþùóþ ìàòðèöó êàæäóþ âåðøèíó îáúåêòà è ïîëó÷èòü èç-4.2. Ìîäåëüíî-âèäîâûå ïðåîáðàçîâàíèÿ59ìåíåííûå êîîðäèíàòû ýòîé âåðøèíû: 0 xxy 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.