Баяковский.Начальный курс OpenGL (1124482), страница 21
Текст из файла (страница 21)
( ýòîì ñëó÷àå ëàíäøàôòìîæíî îòòåêñòóðèðîâàòü ñ ïîìîùüþ ñîîòâåòñòâóþùåé öâåòíîéêàðòèíêè è ëèíåéíîé ãåíåðàöèè òåêñòóðíûõ êîîðäèíàò).Âíèìàíèå: èñïîëüçîâàíèå NURBS âîçìîæíî, íî íå ïðèâåòñòâóåòñÿ â ñèëó îãðàíè÷åííîñòè èñïîëüçîâàíèÿ NURBS äëÿ ðåàëüíûõ ïðèëîæåíèé.Â.3. Èíòåðàêòèâíûé ëàíäøàôò209Ðàñêðàñêà ëàíäøàôòà×òîáû ñäåëàòü ïîëó÷èâøóþñÿ ìîäåëü íåìíîãî áîëåå íàïîìèíàþùåé ëàíäøàôò, åå ìîæíî ðàñêðàñèòü. Êàæäîé âåðøèíå ìîæíî ñîïîñòàâèòü ñâîé öâåò, çàâèñÿùèé îò âûñîòû ýòîé âåðøèíû.Íàïðèìåð, âåðøèíû âûøå îïðåäåëåííîãî óðîâíÿ ìîæíî ïîêðàñèòü â áåëûé öâåò â ïîïûòêå ñûìèòèðîâàòü øàïêè ãîð, âåðøèíûïîíèæå â êîðè÷íåâûé öâåò ñêàë, à âåðøèíû óðîâíåì åùå íèæå â çåëåíûé öâåò òðàâû. Çíà÷åíèÿ ¾óðîâíåé¿ ðàñêðàñêè ïîâåðõíîñòè ñëåäóåò ïîäîáðàòü èç ýñòåòè÷åñêèõ ñîîáðàæåíèé.Îñâåùåíèå ëàíäøàôòàÄëÿ åùå áîëüøåãî ðåàëèçìà è äëÿ ïîä÷åðêèâàíèÿ ðåëüåôàîñâåòèòü ìîäåëü ëàíäøàôòà áåñêîíå÷íî óäàëåííûì èñòî÷íèêîìñâåòà (êàê áû ñîëíöåì).Öâåò âåðøèí ìîæíî çàäàâàòü ÷åðåçglColorñîâìåñòíî ñg l C o l o r M a t e r i a l (GL_FRONT, GL_AMBIENT_AND_DIFFUSE) ;Òóìàí×òîáû óñèëèòü (èëè õîòÿ áû ñîçäàòü) èëëþçèþ áîëüøèõ ðàçìåðîâ ìîäåëè è åå ïðîòÿæåííîñòè, ìîæíî âîñïîëüçîâàòüñÿ ýôôåêòîì òóìàíà.
Òèï òóìàíà (ëèíåéíûé èëè ýêñïîíåíöèàëüíûé)ñëåäóåò âûáðàòü èç èíäèâèäóàëüíûõ ýñòåòè÷åñêèõ ïðåäïî÷òåíèé. Ñïîñîá ñîçäàíèÿ òóìàíà îïèñàí â ðàçäåëå 5.4.ÓïðàâëåíèåÝëåìåíòàðíîå óïðàâëåíèå äâèæåíèåì êàìåðû ïî êëàâèàòóðíûì ¾ñòðåëî÷êàì¿. Íàæàòèå íà ñòðåëêó ¾ââåðõ¿ ïåðåäâèæåíèå ïî íàïðàâëåíèþ âçãëÿäà âïåðåä. ¾Íàçàä¿ ïî íàïðàâëåíèþâçãëÿäà íàçàä. ¾Âëåâî¿, ¾Âïðàâî¿ ïî àíàëîãèè, ¾Page Up¿, ¾PageDown¿ ââåðõ, âíèç, ñîîòâåòñòâåííî.Ïðèëîæåíèå Â. Ïðèìåðû ïðàêòè÷åñêèõ çàäàíèé210ÂGLUT'åíî-öèôðîâûõïîëó÷àòüêëàâèøíàæàòèÿìîæíîíå÷åðåçàëôàâèòôóíêöèþglutSpecialFunc(void (*)(int key, int x, int y)),ãäåkey êîíñòàíòà, îáîçíà÷àþùàÿ êëàâèøó (ñì.
â glut .h GLUT_KEY).Ôóíêöèÿ èñïîëüçóåòñÿ àíàëîãè÷íî glutKeyboardFunc().Äîïîëíèòåëüíàÿ ÷àñòüÓïðàâëåíèå ìûøüþÄâèæåíèå ìûøè â ãîðèçîíòàëüíîé ïëîñêîñòè (ñìåùåíèå ïîîñèX)óïðàâëÿåò óãëîì ïîâîðîòà íàïðàâëåíèÿ âçãëÿäà â ãîðè-∈ [0..2π]). Äâèæåíèå ìûøè â(ñìåùåíèå ïî îñè Y ) óïðàâëÿåò óãëîìçîíòàëüíîé ïëîñêîñòè (óãîë àëüôàâåðòèêàëüíîé ïëîñêîñòèïîâîðîòà íàïðàâëåíèÿ âçãëÿäà â âåðòèêàëüíîé ïëîñêîñòè îòíîñèòåëüíî ãîðèçîíòà (óãîë áåòà∈ [−π..π]).Çíàÿ îáà óãëà, âåêòîðíàïðàâëåíèÿ âçãëÿäà â ìèðîâûõ êîîðäèíàòàõ âû÷èñëÿåòñÿ ñëåäóþùèì îáðàçîì:d i r e c t i o n _ z = s i n ( áåòà ) ;d i r e c t i o n _ x = cos ( àëüôà ) * cos ( áåòà ) ;d i r e c t i o n _ y = s i n ( àëüôà ) * cos ( áåòà ) ;à çàòåì íîðìàëèçóåòñÿ.Âåêòîð íàïðàâëåíèÿ ¾âáîê¿ âû÷èñëÿåòñÿ êàê âåêòîðíîå ïðîèçâåäåíèå âåêòîðà íàïðàâëåíèÿ âåðòèêàëüíî ââåðõ, òî åñòü âåêòîðà(0, 0, 1)è óæå èçâåñòíîãî âåêòîðà íàïðàâëåíèÿ âçãëÿäà.Âåêòîð íàïðàâëåíèÿ ¾ââåðõ¿ âû÷èñëÿåòñÿ êàê âåêòîðíîå ïðîèçâåäåíèå âåêòîðà íàïðàâëåíèÿ âçãëÿäà è âåêòîðà íàïðàâëåíèÿ¾âáîê¿.Ïîëîæåíèå êàìåðû â OpenGL ìîæíî ïåðåäàòü c ïîìîùüþ êîìàíäûgluLookAt().
Ïîäñêàçêà:position + direction.ïàðàìåòðtargetìîæíî ïîëîæèòüðàâíûìÑìåùåíèå ïîçèöèè êàìåðû äîëæíî ïðîèñõîäèòü íå íà ôèêñèðîâàííîå ðàññòîÿíèå çà îäèí êàäð, à âû÷èñëÿòüñÿ, èñõîäÿ èçÂ.3. Èíòåðàêòèâíûé ëàíäøàôò211ñêîðîñòè ïåðåäâèæåíèÿ êàìåðû, è âðåìåíè, óøåäøåãî íà îáñ÷åòïîñëåäíåãî êàäðà.
Ïåðåäâèæåíèå êàìåðû äîëæíî îñóùåñòâëÿòüñÿ â íàïðàâëåíèè âçãëÿäà. Ñêàæåì, ïî ëåâîé êíîïêå ìûøè âïåðåä, à ïî ïðàâîé íàçàä. Äëÿ òîãî, ÷òîáû çàñå÷ü âðåìÿ,ìîæíî âîñïîëüçîâàòüñÿ ôóíêöèåétimeGetTime(),îïèñàííîé â¾mmsystem.h¿, è ðåàëèçîâàííîé â áèáëèîòåêå ¾winmm.lib¿ (òîëüêî äëÿ Windows).#include "mmsystem . h"...void Display ( ){...int system_time_before_rendering ;system_time_before_rendering = timeGetTime ( ) ;RenderFrame ( ) ;int time_spent_rendering_msec =timeGetTime ( ) − system_time_before_rendering ;...} GLUT'å äëÿ ýòîãî åñòü ñïåöèàëüíûé âûçîâ (àíàëîãè÷íîtimeGetTime()):time = glutGet (GLUT_ELAPSED_TIME) ;Âîäà, èëè íå÷òî íà íåå ïîõîæååÏðè ðàñêðàñêå ëàíäøàôòà ìîæíî äîáàâèòü åùå îäèí, ñàìûéíèæíèé ¾óðîâåíü¿ óðîâåíü âîäû.
Âåðøèíû, ðàñïîëàãàþùèåñÿíà ýòîì óðîâíå, ìîæíî ïîêðàñèòü â öâåò âîäû ïðåäïîëîæèòåëüíî, ñèíèé. Äëÿ òîãî, ÷òîáû ïîëó÷èâøèåñÿ ¾âîäîåìû¿ íå âûãëÿäåëè ïðîäîëæåíèåì ïîâåðõíîñòè ëàíäøàôòà, ïðîñòî ïîêðàøåííûì â ñèíèé öâåò, à èìåëè ïëîñêóþ ïîâåðõíîñòü, ïðè ãåíåðàöèè ïîëÿ âûñîò ìîæíî óñòàíîâèòü ïîðîã âûñîòû, íèæå êîòîðîãî¾îïóñêàòüñÿ¿ âåðøèíàì çàïðåùàåòñÿ. Åñëè äëÿ ýëåìåíòà ìàòðè-Ïðèëîæåíèå Â. Ïðèìåðû ïðàêòè÷åñêèõ çàäàíèé212öû ãåíåðèðóåòñÿ çíà÷åíèå âûñîòû íèæå ýòîãî ïîðîãà, ýëåìåíòèíèöèàëèçèðóåòñÿ ïîðîãîâûì çíà÷åíèåì.ÎáúåêòûÏî ëàíäøàôòó ìîæíî ðàñêèäàòü â õóäîæåñòâåííîì áåñïîðÿäêå îò ïÿòèäåñÿòè îáúåêòîâ, âñòðå÷àþùèõñÿ íà ëàíäøàôòå âîáû÷íîé æèçíè, íàïðèìåð, äîìîâ èëè äåðåâüåâ.
Ïðè ýòîì åëüñ÷èòàåòñÿ äåðåâîì, à äâå ðàâíîáåäðåííûå âûòÿíóòûå âåðòèêàëüíî ãðàíè, ïîñòàâëåííûå íà ëàíäøàôò êðåñò íàêðåñò è ïîêðàøåííûå â çåëåíûé öâåò, ñ÷èòàþòñÿ åëüþ.Îòðàæåíèÿ â âîäåÑäåëàòü òàê, ÷òîáû ëàíäøàôò îòðàæàëñÿ â âîäå, êîòîðàÿ óæåäîëæíà ïðèñóòñòâîâàòü íà ëàíäøàôòå (òî åñòü ïîäðàçóìåâàåòñÿ,÷òî ýòî äîïîëíèòåëüíîå çàäàíèå ÿâëÿåòñÿ ðàçâèòèåì äîïîëíèòåëüíîãî çàäàíèÿ 2).
Îäèí èç âàðèàíòîâ ðåàëèçàöèè: ðàññ÷èòàâòåêóùóþ ìàòðèöó êàìåðû, îòðàçèòü åå îòíîñèòåëüíî ïëîñêîñòèâîäû è èçîáðàæåíèÿ ëàíäøàôòà, íå âûâîäÿ ïðè ýòîì ãðàíè ïîâåðõíîñòè âîäû. Çàòåì, ïîëüçóÿñü åùå íå îòðàæåííîé ìàòðèöåéêàìåðû, âèçóàëèçèðîâàòü ãðàíè ïîâåðõíîñòè âîäû ïîëóïðîçðà÷íûìè. Ýòî ñîçäàñò èëëþçèþ ïîâåðõíîñòè âîäû, ñêâîçü êîòîðóþâèäíî îòðàæåíèå. Çàòåì, îïÿòü æå ñ íåîòðàæåííîé ìàòðèöåé êàìåðû, íóæíî íàðèñîâàòü ñàì ëàíäøàôò (ýòîò ïîäõîä ÿâëÿåòñÿ÷àñòíûì ñëó÷àåì îïèñàííîãî â ðàçäåëå 8.3).ÒåíèÍà ýòàïå ðàñêðàñêè âåðøèí ëàíäøàôòà (òî åñòü ýòî íàäî ñäåëàòü îäèí ðàç, à íå êàæäûé êàäð) èç êàæäîé âåðøèíû ìîæíî âûïóñòèòü ëó÷, ïðîòèâîïîëîæíûé íàïðàâëåíèþ ñîëíöà.
Åñëè ëó÷íå ïåðåñåêñÿ ñ ïîâåðõíîñòüþ ëàíäøàôòà ðàñêðàøèâàòü êàêÂ.3. Èíòåðàêòèâíûé ëàíäøàôò213çàïëàíèðîâàíî, åñëè ïåðåñåêñÿ çíà÷èò äàííàÿ âåðøèíà ëàíäøàôòà íàõîäèòñÿ â òåíè, è äëÿ íåå íóæíî âçÿòü ìåíåå èíòåíñèâíûé öâåò. Ïðèìå÷àíèå: ðåàëèçàöèÿ òåíåé ÿâëÿåòñÿ çàäà÷åéïîâûøåííîé ñëîæíîñòè (ïðèäåòñÿ ïèñàòü íàõîæäåíèå ïåðåñå÷åíèé ëó÷à ñ ãðàíÿìè, ÷òî â îáùåì ñëó÷àå íåòðèâèàëüíî).ÎöåíêàËàíäøàôò8 áàëëîâÐàñêðàñêà+2 áàëëàÓïðàâëåíèå+2 áàëëàÓïðàâëåíèå ìûøüþ+2 áàëëàÎáúåêòû+3 áàëëàÂîäà+4 áàëëàÎòðàæåíèå+4 áàëëàÒåíè+5 áàëëîâ òàáëèöå óêàçàíî ìàêñèìàëüíîå ÷èñëî áàëëîâ ïî êàæäîìóïóíêòó.
Ñèñòåìà âûñòàâëåíèÿ áàëëîâ ãèáêàÿ, çàâèñèò îò ïðàâäîïîäîáíîñòè è âïå÷àòëåíèÿ îò ðàáîòû.Äîïîëíèòåëüíûå èñòî÷íèêè èíôîðìàöèèhttp://www.vterrain.orgËèòåðàòóðà[1] Êàííèíãåì, Ñ. ACM SIGGRAPH è îáó÷åíèå ìàøèííîé ãðàôèêå â Ñîåäèíåííûõ Øòàòàõ. Ïðîãðàììèðîâàíèå, 4, 1991.[2] Bayakovsky, Yu. Russia: Computer Graphics Education Takeso in 1990s.
Computer Graphics, 30(3), Aug. 1996.[3] Canningham S. An Evoluing Approach to CG Courses in CS.Graphicon'98 Conference Proceedings, MSU, Sept. 1998.[4] Bayakovsky, Yu. Virtual Laboratory for Computer Graphicsand Machine Vision. Graphicon'99, Conference proceedings,MSU, Sept 1999.[5] Ýéíäæåë Ý. Èíòåðàêòèâíàÿ êîìïüþòåðíàÿ ãðàôèêà. Ââîäíûé êóðñ íà áàçå OpenGL, 2 èçä.
Ïåð. ñ àíãë.- Ìîñêâà, ¾Âèëüÿìñ¿, 2001.[6] Ïîðåâ Â.Í. Êîìïüþòåðíàÿ ãðàôèêà. ÑÏá., BHV, 2002.[7] Øèêèí À. Â., Áîðåñêîâ À. Â. Êîìïüþòåðíàÿ ãðàôèêà. Ïîëèãîíàëüíûå ìîäåëè. Ìîñêâà, ÄÈÀËÎÃ-ÌÈÔÈ, 2001.[8] Òèõîìèðîâ Þ. Ïðîãðàììèðîâàíèå òðåõìåðíîé ãðàôèêè.ÑÏá, BHV, 1998.[9] PerformanceOpenGL:PlatformSIGGRAPH 2001 course.215IndependentTechniques.Ëèòåðàòóðà216[10] OpenGL performance optimization, Siggraph'97 course.[11] Visual Introduction in OpenGL, SIGGRAPH'98.[12] The OpenGL graphics system: a specication (version 1.1).[13] Ïðîãðàììèðîâàíèå GLUT: îêíà è àíèìàöèÿ. Miguel AngelSepulveda, LinuxFocus.[14] The OpenGL Utility Toolkit (GLUT) Programming Interface,API version 3, specication.[15] À.Èãíàòåíêî.îáðàçîâàòåëüíûéÎäíîðîäíûåêîîðäèíàòû.èíòåðíåò-æóðíàë¾ÃðàôèêàÍàó÷íîèÌóëü-òèìåäèà¿.
http://cgm.graphicon.ru/content/view/51/61/.Ïðåäìåòíûé óêàçàòåëüÃðàôè÷åñêèé ïðîöåññ, 18API, 11GLU, Graphics Utility Library,Êîìàíäû GLglAccum, 9426glArrayElement, 50GLUT, GL Utility Toolkit, 27glBegin, 44IRIS GL, 12glBindTexture, 80glBlendFunc, 91OpenGL, 11glCallList, 48cèíòàêñèñ êîìàíä, 30glCallLists, 48îïòèìèçàöèÿ, 115glClear, 40îñîáåííîñòè, 12glClearColor, 40îøèáêè, 127glColor, 42ïðèåìû ðàáîòû, 101glColorMaterial, 68glColorPointer, 50Tao Framework, 157glCullFace, 46Àíèìàöèÿ, 20glDeleteLists, 48glDepthRange, 64ÁóôåðglDisable, 43ãëóáèíû, 62, 90glDisableClientState, 50ìàñêè, 94glDrawArrays, 50íàêîïèòåëü, 93glDrawBuer, 93î÷èñòêà, 40glDrawElements, 51glEnable, 43Ãðàíè÷íûå ìîäåëè, 19217Ïðåäìåòíûé óêàçàòåëü218glEnableClientState, 50glEnd, 44glViewport, 63Êîìàíäû GLUglEndList, 47gluBuild2DMipmaps, 79glFog, 73gluCylinder, 47, 165glFrontFace, 45gluDisk, 166glGenTextures, 80gluLookAt, 60glHint, 96gluNewQuadric, 47glLight, 69gluOrtho2D, 60glLightModel, 66gluPartialDisk, 166glLoadIdentity, 57gluPerspective, 61glLoadMatrix, 57gluQuadricTexture, 85glMaterial, 67gluScaleImage, 78glMatrixMode, 56gluSphere, 47, 165glMultMatrix, 57Êîìàíäû GLUTglNewList, 47gluIdleFunc, 135glNormal, 43glutCreateWindow, 35glNormalPointer, 50glutDisplayFunc, 39, 135glOrtho, 60glutInit, 35, 134glPopMatrix, 57glutInitDisplaMode, 134glPushMatrix, 57glutInitDisplayMode, 35glReadBuer, 93glutInitWindowPosition, 134glRotate, 59glutInitWindowSize, 35, 134glScale, 59glutMainLoop, 35, 136glShadeModel, 42glutMotionFunc, 135glStencilFunc, 95glutMouseFunc, 135glStencilOp, 95glutPassiveMotionFunc, 135glTexCoord, 85glutPostRedisplay, 40, 136glTexEnv, 83glutReshapeFunc, 64, 135glTexGen, 85glutSolidCone, 167glTexParameter, 81glutSolidCube, 167glTranslate, 59glutSolidDodecahedron, 168glVertex, 31, 41glutSolidIcosahedron, 168glVertexPointer, 49glutSolidOctahedron, 168Ïðåäìåòíûé óêàçàòåëüglutSolidSphere, 167glutSolidTetrahedron, 168glutSolidTorus, 167glutWireCone, 167glutWireCube, 167glutWireDodecadedron, 168glutWireIcosahedron, 168glutWireOctahedron, 168glutWireSphere, 167glutWireTetrahedron, 168glutWireTorus, 167Êîìàíäû WGLwglCreateContext, 148wglDeleteContext, 149wglMakeCurrent, 149Êîíòåêñò ðèñîâàíèÿ, 148Êîíòåêñò óñòðîéñòâà, 146èäåíòèôèêàòîð, 146ôîðìàò ïèêñåëåé, 147Îáúåìíûå ìîäåëè, 19Ïîëèãîíàëüíûå ìîäåëè, 20Ýêðàíèçàöèÿ, 18219Ôàêóëüòåò âû÷èñëèòåëüíîé ìàòåìàòèêè è êèáåðíåòèêèÌîñêîâñêîãî ãîñóäàðñòâåííîãî óíèâåðñèòåòàèì.
Ì. Â. ËîìîíîñîâàÀÄÐÅÑ:119992, Ìîñêâà, ÃÑÏ-2, Ëåíèíñêèå ãîðû, 1 ÌÃÓ, 2-é ó÷åáíûéêîðïóñ.ÒÅËÅÔÎÍÛ:Ïðèåìíàÿ êîìèññèÿ:939-55-90Ïîäãîòîâèòåëüíûå êóðñû:932-98-08Âå÷åðíÿÿ ìàòåìàòè÷åñêàÿ øêîëà:939-53-74Ïîäãîòîâèòåëüíîå îòäåëåíèå:939-27-17Âå÷åðíåå ñïåöèàëüíîå îòäåëåíèåäëÿ ëèö ñ âûñøèì îáðàçîâàíèåì:939-17-73Ìåæäóíàðîäíûé îòäåëôàêóëüòåòàÈíòåðíåò-ñòðàíèöà ÂÌèÊ ÌÃÓ939-54-55http://www.cs.msu.sue-mail: FAO@cs.msu.suE-mail ôàêóëüòåòà ÂÌèÊ ÌÃÓ:cmc@cs.msu.ruÈíôîðìàöèþ î äðóãèõ ôàêóëüòåòàõ ÌÃÓ, ïðîãðàììàõ âñòóïèòåëüíûõ ýêçàìåíîâ, êîíêóðñå è äðóãóþ èíôîðìàöèþ ìîæíîïîñìîòðåòü íà ñòðàíèöå Ìîñêîâñêîãî óíèâåðñèòåòà:http://www.msu.ruÍÀ×ÀËÜÍÛÉ ÊÓÐÑ OPENGLÞ.Ì. Áàÿêîâñêèé, À.Â. Èãíàòåíêî.