Баяковский.Начальный курс OpenGL (1124482), страница 15
Текст из файла (страница 15)
Èñïîëüçóåòñÿ ïî óìîë÷àíèþ, åñ-ëè íå óêàçàíû ðåæèìû GLUT_RGBA èëèGLUT_RGB Òî æå, ÷òî èGLUT_INDEX.GLUT_RGBA.GLUT_INDEX Ðåæèì èíäåêñèðîâàííûõ öâåòîâ (èñïîëüçîâà-íèå ïàëèòðû). ÎòìåíÿåòGLUT_RGBA.GLUT_SINGLE Îêíî ñ îäèíî÷íûì áóôåðîì. Èñïîëüçóåòñÿïî óìîë÷àíèþ.GLUT_DOUBLE Îêíî ñ äâîéíûì áóôåðîì.ÎòìåíÿåòGLUT_SINGLE.10.1. Ñòðóêòóðà GLUT-ïðèëîæåíèÿ135GLUT_STENCIL Îêíî ñ áóôåðîì ìàñêè.GLUT_ACCUM Îêíî ñ áóôåðîì-íàêîïèòåëåì.GLUT_DEPTH Îêíî ñ áóôåðîì ãëóáèíû.Ýòî íåïîëíûé ñïèñîê ïàðàìåòðîâ äëÿ äàííîé ôóíêöèè, îäíàêî äëÿ áîëüøèíñòâà ñëó÷àåâ ýòîãî áûâàåò äîñòàòî÷íî.Ðàáîòà ñ áóôåðîì ìàñêè è áóôåðîì íàêîïëåíèÿ îïèñàíà âãëàâå 7.Ôóíêöèè áèáëèîòåêè GLUT ðåàëèçóþò òàê íàçûâàåìûé ñîáûòèéíî-óïðàâëÿåìûé ìåõàíèçì.
Ýòî îçíà÷àåò, ÷òî åñòü íåêîòîðûé âíóòðåííèé öèêë, êîòîðûé çàïóñêàåòñÿ ïîñëå ñîîòâåòñòâóþùåé èíèöèàëèçàöèè è îáðàáàòûâàåò îäíî çà äðóãèì âñå ñîáûòèÿ, îáúÿâëåííûå âî âðåìÿ èíèöèàëèçàöèè. Ê ñîáûòèÿì îòíîñÿòñÿ: ùåë÷îê ìûøè, çàêðûòèå îêíà, èçìåíåíèå ñâîéñòâ îêíà,ïåðåäâèæåíèå êóðñîðà, íàæàòèå êëàâèøè è ¾ïóñòîå¿ (idle) ñîáûòèå, êîãäà íè÷åãî íå ïðîèñõîäèò.
Äëÿ ïðîâåäåíèÿ ïåðèîäè÷åñêîéïðîâåðêè ñîâåðøåíèÿ òîãî èëè èíîãî ñîáûòèÿ íàäî çàðåãèñòðèðîâàòü ôóíêöèþ, êîòîðàÿ áóäåò åãî îáðàáàòûâàòü. Äëÿ ýòîãî èñïîëüçóþòñÿ ôóíêöèè âèäà:void glutDisplayFunc ( void ( * func ) ( void ) )void glutReshapeFunc ( void ( * func ) ( int width ,int h e i g h t ) )void glutMouseFunc ( void ( * func ) ( int button ,int s t a t e , int x , int y ) )void g l u t I d l e F u n c ( void ( * func ) ( void ) )void glutMotionFunc ( void ( * func ) ( int x , int y ) ) ;void glutPassiveMotionFunc (void ( * func ) ( int x , int y ) ) ;Ïàðàìåòðîì äëÿ íèõ ÿâëÿåòñÿ èìÿ ñîîòâåòñòâóþùåé ôóíêöèè çàäàííîãî òèïà. Ñ ïîìîùüþglutDisplayFunc() çàäàåòñÿ ôóíê-öèÿ ðèñîâàíèÿ äëÿ îêíà ïðèëîæåíèÿ, êîòîðàÿ âûçûâàåòñÿ ïðèíåîáõîäèìîñòè ñîçäàíèÿ èëè âîññòàíîâëåíèÿ èçîáðàæåíèÿ. ÄëÿÃëàâà 10.
OPENGL-ïðèëîæåíèÿ ñ ïîìîùüþ GLUT136ÿâíîãî óêàçàíèÿ, ÷òî îêíî íàäî îáíîâèòü, èíîãäà óäîáíî èñïîëüçîâàòü ôóíêöèþvoid g l u t P o s t R e d i s p l a y ( void )×åðåçglutReshapeFunc()óñòàíàâëèâàåòñÿ ôóíêöèÿ îáðàáîòêèèçìåíåíèÿ ðàçìåðîâ îêíà ïîëüçîâàòåëåì, êîòîðîé ïåðåäàþòñÿíîâûå ðàçìåðû.glutMouseFunc() îïðåäåëÿåò ôóíêöèþ-îáðàáîò÷èê êîìàíä îòglutIdleFunc() çàäàåò ôóíêöèþ, êîòîðàÿ áóäåò âûçûâàòü-ìûøè, àñÿ êàæäûé ðàç, êîãäà íåò ñîáûòèé îò ïîëüçîâàòåëÿ.Ôóíêöèÿ, îïðåäåëÿåìàÿglutMotionFunñ(),âûçûâàåòñÿ, êîãäàïîëüçîâàòåëü äâèãàåò óêàçàòåëü ìûøè, óäåðæèâàÿ êíîïêó ìûøè.glutPassiveMotionFuncðåãèñòðèðóåò ôóíêöèþ, âûçûâàåìóþ,åñëè ïîëüçîâàòåëü äâèãàåò óêàçàòåëü ìûøè è íå íàæàòî íè îäíîé êïîïêè ìûøè.Êîíòðîëü âñåõ ñîáûòèé ïðîèñõîäèò âíóòðè áåñêîíå÷íîãî öèêëà â ôóíêöèèvoidglutMainLoop( void )êîòîðàÿ îáû÷íî âûçûâàåòñÿ â êîíöå ëþáîé ïðîãðàììû, èñïîëüçóþùåé GLUT.
Ñòðóêòóðà ïðèëîæåíèÿ, èñïîëüçóþùåãî àíèìàöèþ, áóäåò ñëåäóþùåé:#i n c l u d e <GL/ g l u t . h>void MyIdle ( void ){/* Êîä , êîòîðûé ìåíÿåò ïåðåìåííûå ,îïðåäåëÿþùèå ñëåäóþùèé êàäð */...};void MyDisplay ( void ){/* Êîä OpenGL , êîòîðûé îòîáðàæàåò êàäð */...10.2. GLUT â ñðåäå MICROSOFT VISUAL C++ 6.0/* Ïîñëå ðèñîâàíèÿ ïåðåñòàâëÿåìglutSwapBuffers ( ) ;};void main ( int argcp , char{137áóôåðû */** argv )/* Èíèöèàëèçàöèÿ GLUT */g l u t I n i t (&argcp , argv ) ;glutInitWindowSize ( 6 4 0 , 4 8 0 ) ;gl u tI ni tW in do wP os it i on ( 0 , 0 ) ;/* Îòêðûòèå îêíà */glutCreateWindow ( "My OpenGL A p p l i c a t i o n " ) ;/* Âûáîð ðåæèìà :äâîéíîé áóôåð è RGBA öâåòà */g l u t I n i t D i s p l a y M o d e (GLUT_RGBA |GLUT_DOUBLE | GLUT_DEPTH) ;/* Ðåãèñòðàöèÿ âûçûâàåìûõ ôóíêöèé */glutDisplayFunc ( MyDisplay ) ;g l u t I d l e F u n c ( MyIdle ) ;/* Çàïóñê ìåõàíèçìà îáðàáîòêè ñîáûòèé */glutMainLoop ( ) ;}; ñëó÷àå , åñëè ïðèëîæåíèå äîëæíî ñòðîèòü ñòàòè÷íîå èçîáðàæåíèå, ìîæíî çàìåíèòüGLUT_DOUBLEíàGLUT_SINGLE,òàê êàê îäíîãî áóôåðà â ýòîì ñëó÷àå áóäåò äîñòàòî÷íî, è óáðàòüâûçîâ ôóíêöèèglutIdleFunc().10.2.
GLUT â ñðåäå Microsoft Visual C++ 6.0Ïåðåä íà÷àëîì ðàáîòû íåîáõîäèìî ñêîïèðîâàòü ôàéëû glut.h,glut32.lib glut32.dll â êàòàëîãè MSVC\Include\Gl, MSVC\Lib,Windows\System ñîîòâåòñòâåííî. Òàêæå â ýòèõ êàòàëîãàõ íàäî ïðîâåðèòü íàëè÷èå ôàéëîâ gl.h, glu.h, opengl32.lib, glu32.lib,opengl32.dll, glu32.dll, êîòîðûå îáû÷íî âõîäÿò â ñîñòàâ VisualC++ è Windows. Ïðè èñïîëüçîâàíèè êîìàíä èç áèáëèîòåêèÃëàâà 10. OPENGL-ïðèëîæåíèÿ ñ ïîìîùüþ GLUT138GLAUX ê ïåðå÷èñëåííûì ôàéëàì íàäî äîáàâèòü ïîäêëþ÷àåìûåôàéëû áèáëèîòåêè glaux.h è glaux.lib.Äëÿ ñîçäàíèÿ ïðèëîæåíèÿ íàäî âûïîëíèòü ñëåäóþùèå äåéñòâèÿ:ProjectsOK.Ñîçäàíèå ïðîåêòà: äëÿ ýòîãî íàäî âûáðàòü File NewWin32 Console Application, íàáðàòü èìÿ ïðîåêòà, ïîÿâèâøåìñÿ îêíå âûáðàòü ¾An empty project¿, Finish,OK. Òåêñò ïðîãðàììû ìîæíî ëèáî ðàçìåñòèòü â ñîçäàííîì òåêñòîâîì ôàéëå (âûáðàâ FileNewFilesText File), ëèáîäîáàâèòü ôàéë ñ ðàñøèðåíèåì *.c èëè *.cpp â ïðîåêò (âûáðàâ ProjectAdd To ProjectFiles).Ïîäêëþ÷èòü ê ïðîåêòó áèáëèîòåêè OpenGL.
Äëÿ ýòîãî íàäî âûáðàòü ProjectSettingsLink è â ïîëå Object\librarymodules íàáðàòü íàçâàíèÿ íóæíûõ áèáëèîòåê: opengl32.lib,glu32.lib, glut32.lib è, åñëè íàäî, glaux.lib.Äëÿ êîìïèëÿöèè âûáðàòü Buildâûïîëíåíèÿ BuildBuild program.exe, äëÿExecute program.exe.×òîáû ïðè çàïóñêå íå ïîÿâëÿëîñü òåêñòîâîå îêíî, íàäî âûáðàòü ProjectSettingsLink è â ïîëå Project Options âìå-ñòî ¾subsystem:console¿ íàáðàòü ¾subsystem:windows¿, è íàáðàòü òàì æå ñòðîêó ¾/entry:mainCRTStartup¿.Êîãäà ïðîãðàììà ãîòîâà, ðåêîìåíäóåòñÿ ïåðåêîìïèëèðîâàòüåå â ðåæèìå ¾Release¿ äëÿ îïòèìèçàöèè ïî áûñòðîäåéñòâèþ èîáúåìó.
Äëÿ ýòîãî íàäî âûáðàòü BuildSet Active Congurationè îòìåòèòü ¾. . . -Win32 Release¿, à çàòåì çàíîâî ïîäêëþ÷èòü íåîáõîäèìûå áèáëèîòåêè.10.3. GLUT â ñðåäå MICROSOFT VISUAL C++ 200513910.3. GLUT â ñðåäå Microsoft Visual C++2005Ïåðåä íà÷àëîì ðàáîòû íåîáõîäèìî ñêîïèðîâàòü ôàéëû glut.h,glut32.lib è glut32.dll â êàòàëîãè MVS8\VC\PlatformSDK\Include,MVS8\VC\PlatformSDK\Lib,Windows\Systemñîîòâåòñòâåííî.Òàêæå â ýòèõ êàòàëîãàõ íàäî ïðîâåðèòü íàëè÷èå ôàéëîâ gl.h,glu.h, opengl32.lib, glu32.lib, opengl32.dll, glu32.dll, êîòîðûå îáû÷íî âõîäÿò â ñîñòàâ Visual C++ è Windows. Ïðè èñïîëüçîâàíèèêîìàíä èç áèáëèîòåêè GLAUX ê ïåðå÷èñëåííûì ôàéëàì íàäîäîáàâèòü ïîäêëþ÷àåìûå ôàéëû áèáëèîòåêè glaux.h è glaux.lib.Äëÿ ñîçäàíèÿ ïðèëîæåíèÿ íàäî âûïîëíèòü ñëåäóþùèå äåéñòâèÿ:Ñîçäàíèå ïðîåêòà: äëÿ ýòîãî íàäî âûáðàòü FileProjectsWin32ïðîåêòà, OK.
NewWin32 Console Application, íàáðàòü èìÿ ïîÿâèâøåìñÿ îêíå âî âêëàäêå Application Settings âûáðàòü ¾Console application¿, ¾An empty project¿, Finish. Òåêñò ïðîãðàììû ìîæíî ëèáî ðàçìåñòèòü â ñîçäàííîìòåêñòîâîì ôàéëå (âûáðàâ FileNewFilesVisual C++C++File ), ëèáî äîáàâèòü ôàéë ñ ðàñøèðåíèåì *.c èëè *.cppâ ïðîåêò (âûáðàâ ProjectAdd To ProjectFiles).Ïîäêëþ÷èòü ê ïðîåêòó áèáëèîòåêè OpenGL. Äëÿ ýòîãî íà-äî âûáðàòü ProjectLinkerPropertiesConguration PropertiesInput è â ïîëå Additional dependencies íàáðàòü íà-çâàíèÿ íóæíûõ áèáëèîòåê: opengl32.lib, glu32.lib, glut32.libè, åñëè íàäî, glaux.lib.Äëÿ êîìïèëÿöèè âûáðàòü Buildíåíèÿ DebugDebugging.program.exe, äëÿ âûïîë-Start Debugging èëè DebugStart WithoutÃëàâà 10. OPENGL-ïðèëîæåíèÿ ñ ïîìîùüþ GLUT140×òîáû ïðè çàïóñêå ïðîãðàììû íå ïîÿâëÿëîñü êîíñîëüíîåòåêñòîâîåîêíî,CongurationSubSystemíàäîPropertiesâìåñòîLinker¾Console¿ðåéòè â ðàçäåë LinkerâûáðàòüProjectSystemâûáðàòüPropertiesèâïîëå¾Windows¿.Ïå-Advanced è â ïîëå Entry Pointíàïèñàòü ¾wmainCRTStartup¿ (áåç êàâû÷åê).Êîãäà ïðîãðàììà ãîòîâà, ðåêîìåíäóåòñÿ ïåðåêîìïèëèðîâàòüåå â ðåæèìå ¾Release¿ äëÿ îïòèìèçàöèè ïî áûñòðîäåéñòâèþ èîáúåìó.
Äëÿ ýòîãî íàäî âûáðàòü BuildConguration Manager èâ ïîëå ¾Active solution conguration¿ âûáðàòü ¾Release¿, à çàòåìçàíîâî ïîäêëþ÷èòü íåîáõîäèìûå áèáëèîòåêè äëÿ ýòîé êîíôèãóðàöèè.10.4. GLUT â ñðåäå Borland C++ Builder 6Ïåðåäglut.h,íà÷àëîìglut32.lib,ðàáîòûglut32.dllíåîáõîäèìîâêàòàëîãèCBuilder6\Lib,Windows\Systemýòèõíàäîêàòàëîãàõopengl32.lib,glu32.lib,ïðîâåðèòüñêîïèðîâàòüñîîòâåòñòâåííî.íàëè÷èåopengl32.dll,ôàéëûCBuilder6\Include\Gl,ôàéëîâglu32.dll,Òàêæågl.h,êîòîðûåâglu.h,îáû÷íîâõîäÿò â ñîñòàâ Borland C++ è Windows.Ïðè ýòîì íàäî ó÷èòûâàòü, ÷òî îðèãèíàëüíûå (äëÿ MicrosoftVisual C++) âåðñèè ôàéëà glut32.lib c Borland C++ Builder6 ðàáîòàòü íå áóäóò, è ñëåäóåò èñïîëüçîâàòü òîëüêî ñîâìåñòèìóþ âåðñèþ.
×òîáû ñîçäàòü òàêóþ âåðñèþ, íàäî èñïîëüçîâàòüñòàíäàðòíóþ ïðîãðàììó 'implib', êîòîðàÿ íàõîäèòñÿ â êàòàëîãåÑBuilder6\Bin. Äëÿ ýòîãî â êîìàíäíîé ñòðîêå íàäî âûïîëíèòüêîìàíäóimplib glut32.libglut32.dllêîòîðàÿ ñîçäàåò íóæíûé lib-ôàéë èç ñîîòâåòñòâóþùåãî dll-ôàéëà.10.5. GLUT â ñðåäå BORLAND C++ BUILDER 2006141Äëÿ ñîçäàíèÿ ïðèëîæåíèÿ íàäî âûïîëíèòü ñëåäóþùèå äåéñòâèÿ:Ñîçäàíèå ïðîåêòà: äëÿ ýòîãî íàäî âûáðàòü FileOtherConsole Wizard, OK. New ïîÿâèâøåìñÿ îêíå âûáðàòü Source Type Ñ++, ConsoleApplication, ñáðîñèòü îïöèè ¾Use VCL¿, ¾Use CLX¿, ¾MultiThreaded¿. Íàæàòü ÎÊ.Òåêñò ïðîãðàììû ìîæíî ëèáî ðàçìåñòèòü â ñîçäàííîìòåêñòîâîì ôàéëå, ëèáî óäàëèòü åãî èç ïðîåêòà (ProjectRemove From Project) è äîáàâèòü ôàéë ñ ðàñøèðåíèåì *.cèëè *.cpp â ïðîåêò (âûáðàâ ProjectAdd To Project).Ñîõðàíèòå ñîçäàííûé ïðîåêò â æåëàåìîì êàòàëîãå (âûáðàâFileSave All).Ïîäêëþ÷èòü ê ïðîåêòó áèáëèîòåêó GLUT.
Äëÿ ýòîãî íàäîâûáðàòü ProjectAdd To Project è äîáàâèòü ôàéë glut32.libÄëÿ êîìïèëÿöèè âûáðàòü Projectíèÿ RunRun.Build . . . , äëÿ âûïîëíå-Êîãäà ïðîãðàììà ãîòîâà, ðåêîìåíäóåòñÿ ïåðåêîìïèëèðîâàòüåå â ðåæèìå ¾Release¿ äëÿ îïòèìèçàöèè ïî áûñòðîäåéñòâèþ èîáúåìó. Äëÿ ýòîãî ñíà÷àëà íàäî âûáðàòü ProjectCompiler è íàæàòü êíîïêó ¾Release¿.Options10.5. GLUT â ñðåäå Borland C++ Builder2006Ïåðåäíà÷àëîìglut.h,ðàáîòûâàòüôàéëûãèBorland\BDS\4.0\Include\Gl,glut32.lib,íåîáõîäèìîglut32.dllñêîïèðîâêàòàëî-Borland\BDS\4.0\Lib,Ãëàâà 10.