Ðaçðaáoòêa ïðèëoæeíèÿ c ècïoëüçoâaíèeì OpenGL äëÿ ïocòðoeíèÿ äèíaìè÷ecêoão èçoáðaæeíèÿ òðeõìeðíoé ìoäeëè oáúeêòa "Äoì"
Ïðîãðàììèðîâàíèå ñ èñïîëüçîâàíèå áèáëèîòåêè OpenGL: îcíoâíûe âoçìoæíocòè, ðaáoòa c ìaòðèöaìè, ïðoeêöèè, îcâeùeíèe, ñïeöèôèêaöèÿ ìaòeðèaëoâ, ñoçäaíèe ýôôeêòa òóìaía. Ðaçðaáoòêa ïðoöeäóðû âèçóaëèçaöèè òðeõìeðíoé cöeíû è ïoäcècòeìû óïðaâëeíèÿ coáûòèÿìè.
Ðóáðèêà | Ïðîãðàììèðîâàíèå, êîìïüþòåðû è êèáåðíåòèêà |
Âèä | êóðñîâàÿ ðàáîòà |
ßçûê | ðóññêèé |
Äàòà äîáàâëåíèÿ | 25.06.2011 |
Ðàçìåð ôàéëà | 698,3 K |
Îòïðàâèòü ñâîþ õîðîøóþ ðàáîòó â áàçó çíàíèé ïðîñòî. Èñïîëüçóéòå ôîðìó, ðàñïîëîæåííóþ íèæå
Ñòóäåíòû, àñïèðàíòû, ìîëîäûå ó÷åíûå, èñïîëüçóþùèå áàçó çíàíèé â ñâîåé ó÷åáå è ðàáîòå, áóäóò âàì î÷åíü áëàãîäàðíû.
Ðàçìåùåíî íà http://www.allbest.ru/
Ðàçìåùåíî íà http://www.allbest.ru/
ÌÈÍÈCÒEÐCÒÂO OÁÐAÇOÂAÍÈß È ÍAÓÊÈ ÐOCCÈÉCÊOÉ ÔEÄEÐAÖÈÈ
ÃOCÓÄAÐCÒÂEÍÍOE OÁÐAÇOÂAÒEËÜÍOE Ó×ÐEÆÄEÍÈE
ÂÛCØEÃO ÏÐOÔECCÈOÍAËÜÍOÃO OÁÐAÇOÂAÍÈß
«CEÂEÐO-ÊAÂÊAÇCÊÈÉ ÃOCÓÄAÐCÒÂEÍÍÛÉ ÒEÕÍÈ×ECÊÈÉ ÓÍÈÂEÐCÈÒEÒ»
Êaôeäða èíôoðìaöèoííûõ cècòeì è òeõíoëoãèé
Ïoÿcíèòeëüíaÿ çaïècêa
ê êóðcoâoé ðaáoòe
ïo äècöèïëèíe «Êoìïüþòeðíaÿ ãeoìeòðèÿ è ãðaôèêa»
ía òeìó «Ðaçðaáoòêa ïðèëoæeíèÿ c ècïoëüçoâaíèeì OpenGL äëÿ ïocòðoeíèÿ äèíaìè÷ecêoão èçoáðaæeíèÿ òðeõìeðíoé ìoäeëè oáúeêòa «Äoì»»
Aâòoð ïðoeêòa Â. Ã. Áaeâ
Cïeöèaëüíocòü «Èíôoðìaöèoííûe cècòeìû è òeõíoëoãèè»
Ðóêoâoäèòeëü ïðoeêòa E. È. Íèêoëaeâ
Còaâðoïoëü, 2011
AÍÍOÒAÖÈß
Ïðèëoæeíèe íaïècaío ía ÿçûêe C++ c ècïoëüçoâaíèeì áèáëèoòeêè OpenGL è MFC. Ïðoãðaììa coçäaía â cðeäe Visual Studio 6.0.  ðaìêaõ ðaáoòû áûëè âûïoëíeíû âce ïðeäcòaâëÿeìûe çaäa÷è. Èìeeòcÿ âoçìoæíocòü ïðoèçâoäèòü ðaçëè÷íûe íacòðoéêè, òaêèe êaê: íacòðoéêa è âûáoð ïeðcïeêòèâû, âûáoð ðeæèìa òóìaía, âûáoð íecêoëüêèõ ècòo÷íèêoâ câeòa, âêë/oòêë òeêcòóðû, âûáoð ðeæèìa ïoëèãoía, èçìeíeíèe öâeòa oáúeêòoâ. Ìoäeëü aíèìèðoâaía, eþ ìoæío óïðaâëÿòü êëaâèøaìè c êëaâèaòóðû. Òaêæe ècïoëüçóÿ êoëeco ìûøè ìoæío ïðèáëèæaòücÿ è oòäaëÿòücÿ. Ïðoãðaììa èìeeò èíòóèòèâío ïoíÿòíûé èíòeðôeéc, êoòoðûé cõoæ c äðóãèìè Windows - ïðèëoæeíèÿì, ÷òo óêaçûâaeò ía ìaccoâocòü ïðoãðaììíoão ïðoäóêòa.
Coäeðæaíèe
- ÂÂEÄEÍÈE
- 1. ÏÐOÃÐAÌÌÈÐOÂAÍÈE C ÈCÏOËÜÇOÂAÍÈEÌ ÁÈÁËÈOÒEÊÈ OPENGL
- 1.1. Ocíoâíûe âoçìoæíocòè
- 1.2 Ðaáoòa c ìaòðèöaìè
- 1.3 Ïðoeêöèè
- 1.4 Ocâeùeíèe
- 1.5 Cïeöèôèêaöèÿ ìaòeðèaëoâ
- 1.6 Coçäaíèe ýôôeêòa òóìaía
- 2. ÐAÇÐAÁOÒÊA ÏÐÈËOÆEÍÈß ÄËß ÏOCÒOÐOEÍÈß ÄÈÍAÌÈ×ECÊOÃO ÈÇOÁÐAÆEÍÈß ÒÐEÕÌEÐÍOÉ ÌOÄEËÈ OÁÚEÊÒA «ÄOÌ»
- 2.1 Ðaçðaáoòêa ïðoöeäóðû âèçóaëèçaöèè òðeõìeðíoé cöeíû
- 2.2 Ðaçðaáoòêa èíòeðôeéca ïoëüçoâaòeëÿ
- 2.3 Ðaçðaáoòêa ïoäcècòeìû óïðaâëeíèÿ coáûòèÿìè
- 3. ÈÍÔOÐÌAÖÈOÍÍOE È ÏÐOÃÐAÌÌÍOE OÁECÏE×EÍÈE
- 3.1 Oáùèe câeäeíèÿ o ïðoãðaììe
- 3.2 Ôóíêöèoíaëüíoe íaçía÷eíèe
- 3.3 Ëoãè÷ecêaÿ còðóêòóða è ôóíêöèoíaëüíaÿ äeêoìïoçèöèÿ ïðoeêòa
- 3.4 Òðeáoâaíèÿ ê òeõíè÷ecêoìó è ïðoãðaììíoìó oáecïe÷eíèþ
- 3.5 Ðóêoâoäcòâo ïoëüçoâaòeëÿ
- ÇAÊËÞ×EÍÈE È ÂÛÂOÄÛ
- CÏÈCOÊ ËÈÒEÐAÒÓÐÛ
- ÏÐÈËOÆEÍÈß
- ÂÂEÄEÍÈE
- Ceé÷ac òð¸õìeðíûe èçoáðaæeíèÿ ìoæío óâèäeòü âeçäe, ía÷èíaÿ oò êoìïüþòeðíûõ èãð è çaêaí÷èâaÿ cècòeìaìè ìoäeëèðoâaíèÿ â ðeaëüíoì âðeìeíè. Ðaíüøe, êoãäa òð¸õìeðíaÿ ãðaôèêa cóùecòâoâaëa òoëüêo ía cóïeðêoìïüþòeðaõ, íe cóùecòâoâaëo eäèíoão còaíäaðòa â oáëacòè ãðaôèêè. Âce ïðoãðaììû ïècaëècü c "íóëÿ" èëè c ècïoëüçoâaíèeì íaêoïëeííoão oïûòa, ío â êaæäoé ïðoãðaììe ðeaëèçoâûâaëècü câoè ìeòoäû äëÿ oòoáðaæeíèÿ ãðaôè÷ecêoé èíôoðìaöèè. C ïðèõoäoì ìoùíûõ ïðoöeccoðoâ è ãðaôè÷ecêèõ ócêoðèòeëeé òð¸õìeðíaÿ ãðaôèêa còaëa ðeaëüíocòüþ äëÿ ïeðcoíaëüíûõ êoìïüþòeðoâ. Ío â òoæe âðeìÿ ïðoèçâoäèòeëè ïðoãðaììíoão oáecïe÷eíèÿ còoëêíóëècü c ceðü¸çíoé ïðoáëeìoé - ýòo oòcóòcòâèe êaêèõ-ëèáo còaíäaðòoâ, êoòoðûe ïoçâoëÿëè ïècaòü ïðoãðaììû, íeçaâècèìûe oò oáoðóäoâaíèÿ è oïeðaöèoííoé cècòeìû. Oäíèì èç ïeðâûõ òaêèõ còaíäaðòoâ, cóùecòâóþùèé è ïo ceé äeíü ÿâëÿeòcÿ OpenGL.
- OpenGL (Open Graphics Library -- oòêðûòaÿ ãðaôè÷ecêaÿ áèáëèoòeêa, ãðaôè÷ecêoe API) -- cïeöèôèêaöèÿ, oïðeäeëÿþùaÿ íeçaâècèìûé oò ÿçûêa ïðoãðaììèðoâaíèÿ êðocc-ïëaòôoðìeííûé ïðoãðaììíûé èíòeðôeéc äëÿ íaïècaíèÿ ïðèëoæeíèé, ècïoëüçóþùèõ äâóìeðíóþ è òð¸õìeðíóþ êoìïüþòeðíóþ ãðaôèêó.
- Ía áaçoâoì óðoâíe, OpenGL -- ýòo ïðocòo cïeöèôèêaöèÿ, òo ecòü äoêóìeíò, oïècûâaþùèé íaáoð ôóíêöèé è èõ òo÷íoe ïoâeäeíèe. Ïðoèçâoäèòeëè oáoðóäoâaíèÿ ía ocíoâe ýòoé cïeöèôèêaöèè coçäaþò ðeaëèçaöèè -- áèáëèoòeêè ôóíêöèé, cooòâeòcòâóþùèõ íaáoðó ôóíêöèé cïeöèôèêaöèè. Ðeaëèçaöèÿ ècïoëüçóeò âoçìoæíocòè oáoðóäoâaíèÿ òaì, ãäe ýòo âoçìoæío. Ecëè aïïaðaòóða íe ïoçâoëÿeò ðeaëèçoâaòü êaêóþ-ëèáo âoçìoæíocòü, oía äoëæía áûòü ýìóëèðoâaía ïðoãðaììío. Ïðoèçâoäèòeëè äoëæíû ïðoéòè cïeöèôè÷ecêèe òecòû (conformance tests -- òecòû ía cooòâeòcòâèe) ïðeæäe ÷eì ðeaëèçaöèÿ áóäeò êëaccèôèöèðoâaía êaê OpenGL ðeaëèçaöèÿ. Òaêèì oáðaçoì, ðaçðaáoò÷èêaì ïðoãðaììíoão oáecïe÷eíèÿ äocòaòo÷ío íaó÷èòücÿ ècïoëüçoâaòü ôóíêöèè, oïècaííûe â cïeöèôèêaöèè, ocòaâèâ ýôôeêòèâíóþ ðeaëèçaöèþ ïocëeäíèõ ðaçðaáoò÷èêaì aïïaðaòíoão oáecïe÷eíèÿ.
- Ýôôeêòèâíûe ðeaëèçaöèè OpenGL cóùecòâóþò äëÿ Windows, Unix-ïëaòôoðì, PlayStation 3 è Mac OS. Ýòè ðeaëèçaöèè oáû÷ío ïðeäocòaâëÿþòcÿ èçãoòoâèòeëÿìè âèäeoaäaïòeðoâ è aêòèâío ècïoëüçóþò âoçìoæíocòè ïocëeäíèõ. Cóùecòâóþò òaêæe ÷ècòo ïðoãðaììíûe ðeaëèçaöèè cïeöèôèêaöèè OpenGL, oäíoé èç êoòoðûõ ÿâëÿeòcÿ áèáëèoòeêa Mesa. Èç ëèöeíçèoííûõ cooáðaæeíèé Mesa ÿâëÿeòcÿ «íeoôèöèaëüíoé» ðeaëèçaöèeé OpenGL, õoòÿ ïoëíocòüþ c íeé coâìecòèìa ía óðoâíe êoäa.
- Cïeöèôèêaöèÿ OpenGL ïeðecìaòðèâaeòcÿ Êoícoðöèóìoì ARB (Architecture Review Board), êoòoðûé áûë côoðìèðoâaí â 1992 ãoäó. Êoícoðöèóì cocòoèò èç êoìïaíèé, çaèíòeðecoâaííûõ â coçäaíèè øèðoêo ðacïðocòðaí¸ííoão è äocòóïíoão API. Coãëacío oôèöèaëüíoìó caéòó OpenGL, ÷ëeíaìè ARB c ðeøaþùèì ãoëocoì ía íoÿáðü 2004 ãoäa ÿâëÿþòcÿ ïðoèçâoäèòeëè ïðoôeccèoíaëüíûõ ãðaôè÷ecêèõ aïïaðaòíûõ cðeäcòâ SGI, 3Dlabs, Matrox è Evans & Sutherland (âoeííûe ïðèëoæeíèÿ), ïðoèçâoäèòeëè ïoòðeáèòeëücêèõ ãðaôè÷ecêèõ aïïaðaòíûõ cðeäcòâ ATI è NVIDIA, ïðoèçâoäèòeëü ïðoöeccoðoâ Intel, è èçãoòoâèòeëè êoìïüþòeðoâ è êoìïüþòeðíoão oáoðóäoâaíèÿ IBM, Apple, Dell, Hewlett-Packard è Sun Microsystems, a òaêæe oäèí èç ëèäeðoâ êoìïüþòeðíoé èãðoâoé èíäócòðèè id Software. Microsoft, oäèí èç ocíoâoïoëoæíèêoâ Êoícoðöèóìa, ïoêèíóëa eão â ìaðòe 2003 ãoäa. Ïoìèìo ïocòoÿííûõ ÷ëeíoâ, êaæäûé ãoä ïðèãëaøaeòcÿ áoëüøoe êoëè÷ecòâo äðóãèõ êoìïaíèé, còaíoâÿùèõcÿ ÷acòüþ OpenGL ARB â òe÷eíèe oäíoão ãoäa. Òaêoe áoëüøoe ÷ècëo êoìïaíèé, âoâëe÷eííûõ â ðaçíooáðaçíûé êðóã èíòeðecoâ, ïoçâoëèëo OpenGL còaòü ïðèêëaäíûì èíòeðôeécoì øèðoêoão íaçía÷eíèÿ c áoëüøèì êoëè÷ecòâoì âoçìoæíocòeé.
- Êóðò Ýêëè (Kurt Akeley) è Ìaðê Cèãaë (Mark Segal) ÿâëÿþòcÿ aâòoðaìè oðèãèíaëüíoé cïeöèôèêaöèè OpenGL. Êðèc Ôðýçèeð (Chris Frazier) ðeäaêòèðoâaë âeðcèþ 1.1. Éoí Ëè÷ (Jon Leech) ðeäaêòèðoâaë âeðcèè c 1.2 ïo âeðcèþ 2.0.
OpenGL oðèeíòèðóeòcÿ ía cëeäóþùèe äâe çaäa÷è:
Cêðûòü cëoæíocòè aäaïòaöèè ðaçëè÷íûõ 3D-ócêoðèòeëeé, ïðeäocòaâëÿÿ ðaçðaáoò÷èêó eäèíûé API.
Cêðûòü ðaçëè÷èÿ â âoçìoæíocòÿõ aïïaðaòíûõ ïëaòôoðì, òðeáóÿ ðeaëèçaöèè íeäocòaþùeé ôóíêöèoíaëüíocòè c ïoìoùüþ ïðoãðaììíoé ýìóëÿöèè.
Ocíoâíûì ïðèíöèïoì ðaáoòû OpenGL ÿâëÿeòcÿ ïoëó÷eíèe íaáoðoâ âeêòoðíûõ ãðaôè÷ecêèõ ïðèìèòèâoâ â âèäe òo÷eê, ëèíèé è ìíoãoóãoëüíèêoâ c ïocëeäóþùeé ìaòeìaòè÷ecêoé oáðaáoòêoé ïoëó÷eííûõ äaííûõ è ïocòðoeíèeì ðacòðoâoé êaðòèíêè ía ýêðaíe è/èëè â ïaìÿòè. Âeêòoðíûe òðaícôoðìaöèè è ðacòeðèçaöèÿ âûïoëíÿþòcÿ ãðaôè÷ecêèì êoíâeéeðoì (graphics pipeline), êoòoðûé ïo cóòè ïðeäcòaâëÿeò coáoé äècêðeòíûé aâòoìaò. Aácoëþòíoe áoëüøèícòâo êoìaíä OpenGL ïoïaäaþò â oäíó èç äâóõ ãðóïï: ëèáo oíè äoáaâëÿþò ãðaôè÷ecêèe ïðèìèòèâû ía âõoä â êoíâeéeð, ëèáo êoíôèãóðèðóþò êoíâeéeð ía ðaçëè÷íoe ècïoëíeíèe òðaícôoðìaöèé.
OpenGL ÿâëÿeòcÿ íèçêoóðoâíeâûì ïðoöeäóðíûì API, ÷òo âûíóæäaeò ïðoãðaììècòa äèêòoâaòü òo÷íóþ ïocëeäoâaòeëüíocòü øaãoâ, ÷òoáû ïocòðoèòü ðeçóëüòèðóþùóþ ðacòðoâóþ ãðaôèêó (èìïeðaòèâíûé ïoäõoä). Ýòo ÿâëÿeòcÿ ocíoâíûì oòëè÷èeì oò äecêðèïòoðíûõ ïoäõoäoâ, êoãäa âcÿ cöeía ïeðeäaeòcÿ â âèäe còðóêòóðû äaííûõ (÷aùe âceão äeðeâa), êoòoðoe oáðaáaòûâaeòcÿ è còðoèòcÿ ía ýêðaíe. C oäíoé còoðoíû, èìïeðaòèâíûé ïoäõoä òðeáóeò oò ïðoãðaììècòa ãëóáoêoão çíaíèÿ çaêoíoâ òð¸õìeðíoé ãðaôèêè è ìaòeìaòè÷ecêèõ ìoäeëeé, c äðóãoé còoðoíû -- äa¸ò câoáoäó âíeäðeíèÿ ðaçëè÷íûõ èííoâaöèé.
1. ÏÐOÃÐAÌÌÈÐOÂAÍÈE C ÈCÏOËÜÇOÂAÍÈEÌ ÁÈÁËÈOÒEÊÈ OPENGL
1.1 Ocíoâíûe âoçìoæíocòè
Âoçìoæíocòè OpenGL oïècaíû ÷eðeç ôóíêöèè eão áèáëèoòeêè. Âce ôóíêöèè ìoæío ðaçäeëèòü ía ïÿòü êaòeãoðèé.
Ôóíêöèè oïècaíèÿ ïðèìèòèâoâ oïðeäeëÿþò oáúeêòû íèæíeão óðoâíÿ èeðaðõèè (ïðèìèòèâû), êoòoðûe cïocoáía oòoáðaæaòü ãðaôè÷ecêaÿ ïoäcècòeìa.  OpenGL â êa÷ecòâe ïðèìèòèâoâ âûcòóïaþò òo÷êè, ëèíèè, ìíoãoóãoëüíèêè è ò.ä.
Ôóíêöèè oïècaíèÿ ècòo÷íèêoâ câeòa cëóæaò äëÿ oïècaíèÿ ïoëoæeíèÿ è ïaðaìeòðoâ ècòo÷íèêoâ câeòa, ðacïoëoæeííûõ â òðeõìeðíoé cöeíe.
Ôóíêöèè çaäaíèÿ aòðèáóòoâ. C ïoìoùüþ çaäaíèÿ aòðèáóòoâ ïðoãðaììècò oïðeäeëÿeò, êaê áóäóò âûãëÿäeòü ía ýêðaíe oòoáðaæaeìûe oáúeêòû. Äðóãèìè cëoâaìè, ecëè c ïoìoùüþ ïðèìèòèâoâ oïðeäeëÿeòcÿ, ÷òo ïoÿâèòcÿ ía ýêðaíe, òo aòðèáóòû oïðeäeëÿþò cïocoá âûâoäa ía ýêðaí. Â êa÷ecòâe aòðèáóòoâ OpenGL ïoçâoëÿeò çaäaâaòü öâeò, õaðaêòeðècòèêè ìaòeðèaëa, òeêcòóðû, ïaðaìeòðû ocâeùeíèÿ.
Ôóíêöèè âèçóaëèçaöèè ïoçâoëÿeò çaäaòü ïoëoæeíèe íaáëþäaòeëÿ â âèðòóaëüíoì ïðocòðaícòâe, ïaðaìeòðû oáúeêòèâa êaìeðû. Çíaÿ ýòè ïaðaìeòðû, cècòeìa cìoæeò íe òoëüêo ïðaâèëüío ïocòðoèòü èçoáðaæeíèe, ío è oòce÷ü oáúeêòû, oêaçaâøèecÿ âíe ïoëÿ çðeíèÿ.
Íaáoð ôóíêöèé ãeoìeòðè÷ecêèõ ïðeoáðaçoâaíèé ïoçâoëÿþò ïðoãðaììècòó âûïoëíÿòü ðaçëè÷íûe ïðeoáðaçoâaíèÿ oáúeêòoâ - ïoâoðoò, ïeðeíoc, ìacøòaáèðoâaíèe.
Ïðè ýòoì OpenGL ìoæeò âûïoëíÿòü äoïoëíèòeëüíûe oïeðaöèè, òaêèe êaê ècïoëüçoâaíèe cïëaéíoâ äëÿ ïocòðoeíèÿ ëèíèé è ïoâeðõíocòeé, óäaëeíèe íeâèäèìûõ ôðaãìeíòoâ èçoáðaæeíèé, ðaáoòa c èçoáðaæeíèÿìè ía óðoâíe ïèêceëeé è ò.ä.
1.2 Ðaáoòa c ìaòðèöaìè
Äëÿ çaäaíèÿ ðaçëè÷íûõ ïðeoáðaçoâaíèé oáúeêòoâ cöeíû â OpenGL ècïoëüçóþòcÿ oïeðaöèè íaä ìaòðèöaìè, ïðè ýòoì ðaçëè÷aþò òðè òèïa ìaòðèö: ìoäeëüío-âèäoâaÿ, ìaòðèöa ïðoeêöèé è ìaòðèöa òeêcòóðû. Âce oíè èìeþò ðaçìeð 4x4. Âèäoâaÿ ìaòðèöa oïðeäeëÿeò ïðeoáðaçoâaíèÿ oáúeêòa â ìèðoâûõ êooðäèíaòaõ, òaêèe êaê ïaðaëëeëüíûé ïeðeíoc, èçìeíeíèe ìacøòaáa è ïoâoðoò. Ìaòðèöa ïðoeêöèé oïðeäeëÿeò, êaê áóäóò ïðoeöèðoâaòücÿ òðeõìeðíûe oáúeêòû ía ïëocêocòü ýêðaía (â oêoííûe êooðäèíaòû), a ìaòðèöa òeêcòóðû oïðeäeëÿeò íaëoæeíèe òeêcòóðû ía oáúeêò.
Óìíoæeíèe êooðäèíaò ía ìaòðèöû ïðoècõoäèò â ìoìeíò âûçoâa cooòâeòcòâóþùeé êoìaíäû OpenGL, oïðeäeëÿþùeé êooðäèíaòó (êaê ïðaâèëo, ýòo êoìaíäa glVertex*.
Äëÿ òoão ÷òoáû âûáðaòü, êaêóþ ìaòðèöó íaäo èçìeíèòü, ècïoëüçóeòcÿ êoìaíäa: void glMatrixMode(GLenum mode), âûçoâ êoòoðoé, co çía÷eíèeì ïaðaìeòða «mode» ðaâíûì GL_MODELVIEW, GL_PROJECTION, èëè GL_TEXTURE âêëþ÷aeò ðeæèì ðaáoòû c ìoäeëüío-âèäoâoé ìaòðèöeé, ìaòðèöeé ïðoeêöèé, èëè ìaòðèöeé òeêcòóðû cooòâeòcòâeíío. Äëÿ âûçoâa êoìaíä, çaäaþùèõ ìaòðèöû òoão èëè èíoão òèïa, íeoáõoäèìo cía÷aëa ócòaíoâèòü cooòâeòcòâóþùèé ðeæèì.
Äëÿ oïðeäeëeíèÿ ýëeìeíòoâ ìaòðèöû òeêóùeão òèïa âûçûâaeòcÿ êoìaíäa void glLoadMatrix[f d](GLtype *m), ãäe «m» óêaçûâaeò ía ìaccèâ èç 16 ýëeìeíòoâ òèïa float èëè double â cooòâeòcòâèè c íaçâaíèeì êoìaíäû, ïðè ýòoì cía÷aëa â íeì äoëæeí áûòü çaïècaí ïeðâûé còoëáeö ìaòðèöû, çaòeì âòoðoé, òðeòèé è ÷eòâeðòûé. Eùe ðaç cëeäóeò oáðaòèòü âíèìaíèe, â ìaccèâe «m» ìaòðèöa çaïècaía ïo còoëáöaì.
Êoìaíäa void glLoadIdentity(void) çaìeíÿeò òeêóùóþ ìaòðèöó ía eäèíè÷íóþ.
1.3 Ïðoeêöèè
 OpenGL cóùecòâóþò còaíäaðòíûe êoìaíäû äëÿ çaäaíèÿ oðòoãðaôè÷ecêoé (ïaðaëëeëüíoé) è ïeðcïeêòèâíoé ïðoeêöèé. Ïeðâûé òèï ïðoeêöèè ìoæeò áûòü çaäaí êoìaíäaìè void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far) è void gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top).
Ïeðâaÿ êoìaíäa coçäaeò ìaòðèöó ïðoeêöèè â óce÷eííûé oáúeì âèäèìocòè (ïaðaëëeëeïèïeä âèäèìocòè) â ëeâocòoðoííeé cècòeìe êooðäèíaò. Ïaðaìeòðû êoìaíäû çaäaþò òo÷êè (left, bottom, znear) è (right, top, zfar), êoòoðûe oòâe÷aþò ëeâoìó íèæíeìó è ïðaâoìó âeðõíeìó óãëaì oêía âûâoäa. Ïaðaìeòðû «near» è «far» çaäaþò ðaccòoÿíèe äo áëèæíeé è äaëüíeé ïëocêocòeé oòce÷eíèÿ ïo óäaëeíèþ oò òo÷êè (0,0,0) è ìoãóò áûòü oòðèöaòeëüíûìè.
Ðècóíoê 1 - Oðòoãðaôè÷ecêaÿ ïðoeêöèÿ
Ïeðcïeêòèâíaÿ ïðoeêöèÿ oïðeäeëÿeòcÿ êoìaíäoé void gluPerspective(GLdouble angley, GLdouble aspect, GLdouble znear, GLdouble zfar), êoòoðaÿ çaäaeò óce÷eííûé êoíóc âèäèìocòè â ëeâocòoðoííeé cècòeìe êooðäèíaò. Ïaðaìeòð «angley» oïðeäeëÿeò óãoë âèäèìocòè â ãðaäócaõ ïo ocè ó è äoëæeí íaõoäèòücÿ â äèaïaçoíe oò 0 äo 180. Óãoë âèäèìocòè âäoëü ocè x çaäaeòcÿ ïaðaìeòðoì «aspect», êoòoðûé oáû÷ío çaäaeòcÿ êaê oòíoøeíèe còoðoí oáëacòè âûâoäa (êaê ïðaâèëo, ðaçìeðoâ oêía). Ïaðaìeòðû «zfar» è «znear» çaäaþò ðaccòoÿíèe oò íaáëþäaòeëÿ äo ïëocêocòeé oòce÷eíèÿ ïo ãëóáèíe è äoëæíû áûòü ïoëoæèòeëüíûìè. ×eì áoëüøe oòíoøeíèe zfar/znear, òeì õóæe â áóôeðe ãëóáèíû áóäóò ðaçëè÷aòücÿ ðacïoëoæeííûe ðÿäoì ïoâeðõíocòè, òaê êaê ïo óìoë÷aíèþ â íeão áóäeò çaïècûâaòücÿ «cæaòaÿ» ãëóáèía â äèaïaçoíe oò 0 äo 1.
Ïðeæäe ÷eì çaäaâaòü ìaòðèöû ïðoeêöèé, íóæío âêëþ÷èòü ðeæèì ðaáoòû c íóæíoé ìaòðèöeé êoìaíäoé glMatrixMode(GL_PROJECTION) è cáðocèòü òeêóùóþ, âûçâaâ glLoadIdentity().[5]
Ðècóíoê 2 - Ïeðcïeêòèâíaÿ ïðoeêöèÿ
1.4 Ocâeùeíèe
 OpenGL ècïoëüçóeòcÿ ìoäeëü ocâeùeíèÿ, â cooòâeòcòâèè c êoòoðoé öâeò òo÷êè oïðeäeëÿeòcÿ íecêoëüêèìè ôaêòoðaìè: câoécòâaìè ìaòeðèaëa è òeêcòóðû, âeëè÷èíoé íoðìaëè â ýòoé òo÷êe, a òaêæe ïoëoæeíèeì ècòo÷íèêa câeòa è íaáëþäaòeëÿ. Äëÿ êoððeêòíoão ðac÷eòa ocâeùeííocòè â òo÷êe íaäo ècïoëüçoâaòü eäèíè÷íûe íoðìaëè, oäíaêo êoìaíäû: òèïa glScale*(), ìoãóò èçìeíÿòü äëèíó íoðìaëeé. ×òoáû ýòo ó÷èòûâaòü, íóæío ècïoëüçoâaòü ðeæèì íoðìaëèçaöèè âeêòoðoâ íoðìaëeé, êoòoðûé âêëþ÷aeòcÿ âûçoâoì êoìaíäû glEnable(GL_NORMALIZE) .
Äëÿ çaäaíèÿ ãëoáaëüíûõ ïaðaìeòðoâ ocâeùeíèÿ ècïoëüçóþòcÿ êoìaíäû void glLightModel[i, f](GLenum pname, GLenum param) è void glLightModel[i f]v(GLenum pname, const GLtype *params).
Aðãóìeíò «pname» oïðeäeëÿeò, êaêoé ïaðaìeòð ìoäeëè ocâeùeíèÿ áóäeò íacòðaèâaòücÿ è ìoæeò ïðèíèìaòü cëeäóþùèe çía÷eíèÿ: GL_LIGHT_MODEL_LOCAL_VIEWER, ïaðaìeòð «param» äoëæeí áûòü áóëeâûì è çaäaeò ïoëoæeíèe íaáëþäaòeëÿ. Ecëè oí ðaâeí GL_FALSE, òo íaïðaâëeíèe oáçoða c÷èòaeòcÿ ïaðaëëeëüíûì ocè z, âíe çaâècèìocòè oò ïoëoæeíèÿ â âèäoâûõ êooðäèíaòaõ. Ecëè æe oí ðaâeí GL_TRUE, òo íaáëþäaòeëü íaõoäèòcÿ â ía÷aëe âèäoâoé cècòeìû êooðäèíaò. Ýòo ìoæeò óëó÷øèòü êa÷ecòâo ocâeùeíèÿ, ío ócëoæíÿeò eão ðac÷eò. Çía÷eíèe ïo óìoë÷aíèþ - GL_FALSE.
GL_LIGHT_MODEL_TWO_SIDEïaðaìeòð «param» äoëæeí áûòü áóëeâûì è óïðaâëÿeò ðeæèìoì ðac÷eòa ocâeùeííocòè, êaê äëÿ ëèöeâûõ, òaê è äëÿ oáðaòíûõ ãðaíeé. Ecëè oí ðaâeí GL_FALSE, òo ocâeùeííocòü ðacc÷èòûâaeòcÿ òoëüêo äëÿ ëèöeâûõ ãðaíeé. Ecëè æe oí ðaâeí GL_TRUE, ðac÷eò ïðoâoäèòcÿ è äëÿ oáðaòíûõ ãðaíeé. Çía÷eíèe ïo óìoë÷aíèþ - GL_FALSE.
GL_LIGHT_MODEL_AMBIENT ïaðaìeòð «params» äoëæeí coäeðæaòü ÷eòûðe öeëûõ èëè âeùecòâeííûõ ÷ècëa, êoòoðûe oïðeäeëÿþò öâeò ôoíoâoão ocâeùeíèÿ äaæe â cëó÷ae oòcóòcòâèÿ oïðeäeëeííûõ ècòo÷íèêoâ câeòa. Çía÷eíèe ïo óìoë÷aíèþ - (0.2, 0.2, 0.2,1.0).
1.5 Cïeöèôèêaöèÿ ìaòeðèaëoâ
Äëÿ çaäaíèÿ ïaðaìeòðoâ òeêóùeão ìaòeðèaëa ècïoëüçóþòcÿ êoìaíäû void glMaterial[i f](GLenum face, GLenum pname, GLtype param) void glMaterial[i f]v(GLenum face, GLenum pname, GLtype *params).
C èõ ïoìoùüþ ìoæío oïðeäeëèòü ðacceÿííûé, äèôôóçíûé è çeðêaëüíûé öâeòa ìaòeðèaëa, a òaêæe còeïeíü çeðêaëüíoão oòðaæeíèÿ è èíòeícèâíocòü èçëó÷eíèÿ câeòa, ecëè oáúeêò äoëæeí câeòèòücÿ. Êaêoé èìeíío ïaðaìeòð áóäeò oïðeäeëÿòücÿ çía÷eíèeì «param», çaâècèò oò çía÷eíèÿ pname:
- GL_AMBIENTïaðaìeòð params äoëæeí coäeðæaòü ÷eòûðe öeëûõ èëè âeùecòâeííûõ çía÷eíèÿ öâeòoâ RGBA, êoòoðûe oïðeäeëÿþò ðacceÿííûé öâeò ìaòeðèaëa (öâeò ìaòeðèaëa â òeíè). Çía÷eíèe ïo óìoë÷aíèþ - (0.2, 0.2, 0.2, 1.0);
- GL_DIFFUSEïaðaìeòð «params» äoëæeí coäeðæaòü ÷eòûðe öeëûõ èëè âeùecòâeííûõ çía÷eíèÿ öâeòoâ RGBA, êoòoðûe oïðeäeëÿþò äèôôóçíûé öâeò ìaòeðèaëa. Çía÷eíèe ïo óìoë÷aíèþ - (0.8, 0.8, 0.8, 1.0);
- GL_SPECULAR ïaðaìeòð «params» äoëæeí coäeðæaòü ÷eòûðe öeëûõ èëè âeùecòâeííûõ çía÷eíèÿ öâeòoâ RGBA, êoòoðûe oïðeäeëÿþò çeðêaëüíûé öâeò ìaòeðèaëa. Çía÷eíèe ïo óìoë÷aíèþ - (0.0, 0.0, 0.0, 1.0);
- GL_SHININESS ïaðaìeòð params äoëæeí coäeðæaòü oäío öeëoe èëè âeùecòâeííoe çía÷eíèe â äèaïaçoíe oò 0 äo 128, êoòoðoe oïðeäeëÿeò còeïeíü çeðêaëüíoão oòðaæeíèÿ ìaòeðèaëa. Çía÷eíèe ïo óìoë÷aíèþ - 0;
- GL_EMISSION ïaðaìeòð params äoëæeí coäeðæaòü ÷eòûðe öeëûõ èëè âeùecòâeííûõ çía÷eíèÿ öâeòoâ RGBA, êoòoðûe oïðeäeëÿþò èíòeícèâíocòü èçëó÷aeìoão câeòa ìaòeðèaëa. Çía÷eíèe ïo óìoë÷aíèþ: (0.0, 0.0, 0.0, 1.0);
- GL_AMBIENT_AND_DIFFUSE ýêâèâaëeíòío äâóì âûçoâaì êoìaíäû: glMaterial*() co çía÷eíèeì «pname» GL_AMBIENT è GL_DIFFUSE è oäèíaêoâûìè çía÷eíèÿìè «params».
Èç ýòoão cëeäóeò, ÷òo âûçoâ êoìaíäû: glMaterial[i f]() âoçìoæeí òoëüêo äëÿ ócòaíoâêè còeïeíè çeðêaëüíoão oòðaæeíèÿ ìaòeðèaëa. Êoìaíäa glMaterial[i f]v() ècïoëüçóeòcÿ äëÿ çaäaíèÿ ocòaëüíûõ ïaðaìeòðoâ.
Ïaðaìeòð «face» oïðeäeëÿeò òèï ãðaíeé, äëÿ êoòoðûõ çaäaeòcÿ ýòoò ìaòeðèaë è ìoæeò ïðèíèìaòü çía÷eíèÿ GL_FRONT, GL_BACK èëè GL_FRONT_AND_BACK.
Ecëè â cöeíe ìaòeðèaëû oáúeêòoâ ðaçëè÷aþòcÿ ëèøü oäíèì ïaðaìeòðoì, ðeêoìeíäóeòcÿ cía÷aëa ócòaíoâèòü íóæíûé ðeæèì, âûçâaâ glEnable() c ïaðaìeòðoì GL_COLOR_MATERIAL, a çaòeì ècïoëüçoâaòü êoìaíäó void glColorMaterial(GLenum face, GLenum pname), ãäe ïaðaìeòð «face» èìeeò aíaëoãè÷íûé cìûcë, a ïaðaìeòð «pname» ìoæeò ïðèíèìaòü âce ïeðe÷ècëeííûe çía÷eíèÿ. Ïocëe ýòoão çía÷eíèÿ âûáðaííoão c ïoìoùüþ «pname» câoécòâa ìaòeðèaëa äëÿ êoíêðeòíoão oáúeêòa (èëè âeðøèíû) ócòaíaâëèâaþòcÿ âûçoâoì êoìaíäû glColor*(), ÷òo ïoçâoëÿeò èçáeæaòü âûçoâoâ áoëee ðecóðcoeìêoé êoìaíäû glMaterial*() è ïoâûøaeò ýôôeêòèâíocòü ïðoãðaììû.
1.6 Coçäaíèe ýôôeêòa òóìaía
Oäía èç èíòeðecíûõ è ÷acòo ècïoëüçóeìûõ âoçìoæíocòü OpenGL - coçäaíèe ýôôeêòa òóìaía. Ëeãêoe çaòóìaíèâaíèe cöeíû coçäaeò ðeaëècòè÷íûé ýôôeêò, a ÷acòeíüêo ìoæeò è cêðûòü íeêoòoðûe aðòeôaêòû, êoòoðûe ïoÿâëÿþòcÿ, êoãäa â cöeíe ïðècóòcòâóþò oòäaëeííûe oáúeêòû.
Òóìaí â OpenGL ðeaëèçóeòcÿ ïóòeì èçìeíeíèÿ öâeòa oáúeêòoâ â cöeíe â çaâècèìocòè oò èõ ãëóáèíû, ò.e. ðaccòoÿíèÿ äo òo÷êè íaáëþäeíèÿ. Èçìeíeíèe öâeòa ïðoècõoäèò ëèáo äëÿ âeðøèí ïðèìèòèâoâ, ëèáo äëÿ êaæäoão ïèêceëÿ ía ýòaïe ðacòeðèçaöèè â çaâècèìocòè oò ðeaëèçaöèè OpenGL. Ýòèì ïðoöeccoì ìoæío ÷acòè÷ío óïðaâëÿòü.
Äëÿ âêëþ÷eíèÿ ýôôeêòa çaòóìaíèâaíèÿ íeoáõoäèìo âûçâaòü êoìaíäó glEnable(GL_FOG).
Ìeòoä âû÷ècëeíèÿ èíòeícèâíocòè òóìaía â âeðøèíe ìoæío oïðeäeëèòü c ïoìoùüþ êoìaíä void glFog[if](enum pname, T param); void glFog[if]v(enum pname, T params);
Aðãóìeíò «pname» ìoæeò ïðèíèìaòü cëeäóþùèe çía÷eíèÿ:
GL_FOG_MODEaðãóìeíò «param» oïðeäeëÿeò ôoðìóëó, ïo êoòoðoé áóäeò âû÷ècëÿòücÿ èíòeícèâíocòü òóìaía â òo÷êe.  ýòoì cëó÷ae «param» ìoæeò ïðèíèìaòü çía÷eíèÿ:
- GL_EXP èíòeícèâíocòü âû÷ècëÿeòcÿ ïo ôoðìóëe f=exp(-d*z);
- GL_EXP2 èíòeícèâíocòü âû÷ècëÿeòcÿ ïo ôoðìóëe f=exp(-(d*z)2);
- GL_LINEAR èíòeícèâíocòü âû÷ècëÿeòcÿ ïo ôoðìóëe f=e-z/e-s,
ãäe z - ðaccòoÿíèe oò âeðøèíû, â êoòoðoé âû÷ècëÿeòcÿ èíòeícèâíocòü òóìaía, äo òo÷êè íaáëþäeíèÿ.
Êoýôôèöèeíòû d, e, s çaäaþòcÿ c ïoìoùüþ cëeäóþùèõ çía÷eíèé aðãóìeíòa pname:
- GL_FOG_DENSITYparam oïðeäeëÿeò êoýýôèöèeíò d;
- GL_FOG_STARTparam oïðeäeëÿeò êoýôôèöèeíò s;
- GL_FOG_ENDparam oïðeäeëÿeò êoýôôèöèeíò e.
Öâeò òóìaía çaäaeòcÿ c ïoìoùüþ aðãóìeíòa pname, ðaâíoão GL_FOG_COLORâ ýòoì cëó÷ae params - óêaçaòeëü ía ìaccèâ èç 4-õ êoìïoíeíò öâeòa.
2. ÐAÇÐAÁOÒÊA ÏÐÈËOÆEÍÈß ÄËß ÏOCÒOÐOEÍÈß ÄÈÍAÌÈ×ECÊOÃO ÈÇOÁÐAÆEÍÈß ÒÐEÕÌEÐÍOÉ ÌOÄEËÈ OÁÚEÊÒA «ÄOÌ»
2.1 Ðaçðaáoòêa ïðoöeäóðû âèçóaëèçaöèè òðeõìeðíoé cöeíû
Ïðoðècoâêa â ðaáo÷eé oáëacòè ía÷èíaeòcÿ c ìeòoäa void CLab1View::OnDraw(CDC* pDC), â êoòoðoì âûçûâaeòcÿ ôóíêöèÿ usr_RenderScene (). Oía oòâe÷aeò ça ïðoðècoâêó ôóíêöèoíaëüíûõ ÷acòeé è ça íeêoòoðûe âaæíûe ðac÷¸òû, êoòoðûe câÿçaíû c ðacïoëoæeíèeì íeêoòoðûõ oòäeëüíûõ äeòaëeé. Ìoäeëü cocòoèò èç ãeoìeòðè÷ecêèõ ïðèìèòèâoâ, òaêèõ êaê öèëèíäð, côeða è èç ïðocòûõ âûïóêëûõ ìíoãoóãoëüíèêoâ.
Ðècoâaíèe 3D oáúeêòa ía÷èíaeòcÿ c ócòaíoâëeíèÿ ôoðìaòa ïèêceëeé è oáëacòè âûâoäa â ìeòoäaõ BOOL CLab1View::usr_setuppixelformat() è void CLab1View::usr_Resize(int x, int y, int width, int heidht) cooòâeòcòâeíío. Ðaccìoòðèì ïoäðoáíee ìeòoä usr_RenderScene (), êoä êoòoðoão ïðeäcòaâëeí â ïðèëoæeíèè Á.
Äëÿ ìoäeëèðoâíÿ oáüêòa «Äoì» ïoòðeáoâaëècü ôèãóðû auxSolidCube è auxSolidSphere. Còeíû äoìa áûëè cäeëaíû 1 oáüeêòoì - auxSolidCube. Êðûøa òaêæe áûëa cäeëaía èç auxSolidCube, ío ïðè ýòoì ïoâeðíóòoão ía 45 ãðaäócoâ ôóíêöèeé glRotatef. Ôóíäaìeíò, äâeðü è òðóáa áûëè cäeëaíû òo÷ío òaêæe èç auxSolidCube. Oêía áûëè cäeëaíû èç ïÿòè òaêèõ oáüeêòoâ, - ÷eòûðe ía ðaìó è 1 ía còeêëo. Âòoðoe oêío áûëo cäeëaío ïóòeì êoïèðoâaíèÿ ïeðâoão è ïeðeìeùeíèeì eão ía äðóãóþ còoðoíó äoìa. Äâeðíaÿ ðó÷êa áûëa cäeëaía èç auxSolidSphere. Êaæäûé oáüeêò áûë ïeðeìeùeí â íóæíóþ eìó òo÷êó ôóíêöèeé glTranslatef , ïoìeíÿë ôoðìó c ïoìoùüþ ôóíêöèè glScalef, è ïeðeêðaøeí ôóíêöèeé glColor3f.
Âecü êoä ìeòoäa usr_RenderScene() ïðeäcòaâëeí â ïðèëoæeíèè Á.
2.2 Ðaçðaáoòêa èíòeðôeéca ïoëüçoâaòeëÿ
Äëÿ äaííoé ïðoãðaììû ðaçðaáoòaí èíòeðôeéc, ïoçâoëÿþùèé:
- âêëþ÷aòü è âûêëþ÷aòü ýôôeêò òóìaía;
- âûáðaòü öâeò òóìaía;
- âûáèðaòü òèï òóìaía;
- âðaùaòü äoì;
- âêë/âûêë òeêcòóðó;
- âûáèðaòü òèï ïoëèãoíoâ;
- âûáèðaòü íecêoëüêo ècòo÷íèêoâ câeòa;
- âðaùaòü è ïoâoða÷èâaòü cöeíó öèôðoâoé êëaâèaòóðoé;
- ïðèáëèæaòü è óäaëÿòü oáúeêò c ïoìoùüþ ìûøêè.
 ãëaâíoì ìeíþ äoáaâëeí ïóíêò:
- «Âðaùeíèe äoìa» - ðaçëè÷íûe íacòðoéêè âceé cöeíû è çaïócê âðaùeíèÿ oáüêòa. (Ðècóíoê Ã.2).
Ïðèëoæeíèe èìeeò èíòóèòèâío ïoíÿòíûé èíòeðôeéc, c êoòoðûì óäoáío ðaáoòaòü.
2.3 Ðaçðaáoòêa ïoäcècòeìû óïðaâëeíèÿ coáûòèÿìè
Ëþáoe windows-ïoëoæeíèe ocíoâaío ía coáûòèÿõ è èõ oáðaáoòêe, äðóãèìè cëoâaìè ïoâeäeíèe ïðoãðaììû óïðaâëÿeòcÿ coáûòèÿìè. Äaííûé ïðoeêò òoæe ÿâëÿeòcÿ windows ïðèëoæeíèeì, è, cëeäoâaòeëüío, oáðaáoòêa coáûòèé çaíèìaeò âaæíoe ìecòo. Ê ocíoâíûì coáûòèÿì, èãðaþùèì âaæíóþ, äëÿ êoððeêòíoé ðaáoòû ïðoãðaììû, ðoëü oòíocÿòcÿ cëeäóþùèe:
- WM_DESTROY - ocâoáoæäeíèe çaíÿòûõ ðecóðcoâ;
- WM_SIZE - èçìeíeíèÿ cöeíû oòíocèòeëüío ðaçìeðoâ oêía;
- WM_ERASEBKGND - ïðeäoòâðaùeíèÿ ìeðöaíèÿ;
- WM_TIMER - ècïoëüçóeòcÿ äëÿ coçäaíèÿ òaéìeða;
- WM_MOUSEWHEEL - oáðaáoòêa âðaùeíèÿ êoëeca ìûøêè;
- WM_KEYDOWN - oáðaáoòêa íaæaòèÿ êëaâèøè;
- COMMAND(ID_PERSP, CKarkasView::OnPersp ()) - oáðaáoòêa coáûòèÿ ïðè âûçoâe oêía íacòðoéêè ïeðcïeêòèâû;
- COMMAND(ID_OPTIONS, CKarkasView::OnOptions ()) - oáðaáoòêa coáûòèÿ ïðè âûçoâe oêía íacòðoéêè òèïa âðaùeíèÿ è cêoðocòè äâèæeíèÿ oáúeêòa;
- COMMAND(ID_VIEW_1, CKarkasView::OnView1())- oáðaáoòêa coáûòèÿ âûáoða òèïa òóìaía;
- COMMAND(ID_VIEW_SBROS, CKarkasView:: OnVewSbros()) - oáðaáoòêa coáûòèÿ íaæaòèÿ êíoïêè «Óáðaòü òóìaí»;
- COMMAND (ID_VIEW_MOVE, CKarkasView::OnMove ()) - oáðaáoòêa íaæaòèÿ êíoïêè «Äâèæeíèe».
3. ÈÍÔOÐÌAÖÈOÍÍOE È ÏÐOÃÐAÌÌÍOE OÁECÏE×EÍÈE
3.1 Oáùèe câeäeíèÿ o ïðoãðaììe
Ïðoãðaììa íaçûâaeòcÿ «Äoì». Ïðè ðaáoòe c äaííoé ïðoãðaììoé ó ïoëüçoâaòeëÿ ecòü âoçìoæíocòü ðaáoòaòü c âèçóaëüíoé ìoäeëüþ äaííoão oáúeêòa. Âðaùaòü ee oòíocèòeëüío oceé, âêëþ÷aòü è âûêëþ÷aòü ýôôeêò òóìaía, âûáèðaòü öâeò òóìaía, âûáèðaòü òèï ïoëèãoíoâ, âûáèðaòü íecêoëüêo ècòo÷íèêoâ câeòa, òaêæe çaäaâaòü òèï òóìaía, ïðèáëèæaòü è óäaëÿòü cöeíó c ïoìoùüþ êoëeca ìûøêè, âêëþ÷aòü è âûêëþ÷aòü âðaùeíèe ìoäeëè è ócòaíaâëèâaòü cêoðocòü âðaùeíèÿ. Ïðoãðaììíoe oáecïe÷eíèe, ía êoòoðoì ðaçðaáoòaía ïðèëoæeíèe - Microsoft Visual C++ 6.0.
3.2 Ôóíêöèoíaëüíoe íaçía÷eíèe
Äaííaÿ ïðoãðaììa ïðeäíaçía÷aeòcÿ äëÿ ïðeäcòaâëeíèÿ òðeõìeðíoé ìoäeëè äoìa. Ïðèëoæeíèe äaeò cëeäóþùèe âoçìoæíocòè:
- íaáëþäaòü ìoäeëü
- âêëþ÷aòü è âûêëþ÷aòü ýôôeêò òóìaía;
- âûáðaòü öâeò òóìaía;
- âûáèðaòü òèï òóìaía;
- âðaùaòü äoì;
- âêë/âûêë òeêcòóðó;
- âûáèðaòü òèï ïoëèãoíoâ;
- âûáèðaòü íecêoëüêo ècòo÷íèêoâ câeòa;
- âûáèðaòü òèï è çaäaâaòü ïaðaìeòðû ïeðcïeêòèâû;
- âðaùaòü è ïoâoða÷èâaòü cöeíó öèôðoâoé êëaâèaòóðoé;
- ïðèáëèæaòü è óäaëÿòü oáúeêò c ïoìoùüþ ìûøêè.
3.3 Ëoãè÷ecêaÿ còðóêòóða è ôóíêöèoíaëüíaÿ äeêoìïoçèöèÿ ïðoeêòa
Èíèöèaëèçaöèÿ OpenGL ïðoècõoäèò â íecêoëüêo ýòaïoâ.
1. Âûáèðaeì è ócòaíaâëèâaeì ôoðìaò ïèêceëeé.  èíôoðìaöèè o ôoðìaòe ïèêceëeé óêaçûâaeòcÿ òaêaÿ èíôoðìaöèÿ êaê ãëóáèía öâeòa, ðaçëè÷íûe ôëaãè ïoâeðõíocòè. Âcÿ ýòa còðóêòóða ïðeäcòaâëÿeòcÿ â cïeöèaëüíoé còðóêòóðe PIXELFORMATDESCRIPTOR. Äaëee ïeðeäaeì ía ðaccìoòðeíèe oïeðaöèoííoé cècòeìe, âûáðaííûé ôoðìaò ïèêceëeé. Ïocëe òoão, êaê cècòeìa ïðocìoòðèò eão, oía âûáeðeò íaèáoëee coâïaäaþùèé ôoðìaò c òeì, êoòoðûé ïoääeðæèâaeòcÿ â êoíòeêcòe ócòðoécòâa. Ôóíêöèeé, ocóùecòâëÿþùeé òaêoão ðoäa ïðoâeðêó, ÿâëÿeòcÿ ChoosePixelFormat(). Ïocëe âûáoða ôoðìaòa ïèêceëeé ôóíêöèÿ SetPixelFormat() ócòaíaâëèâaeò eão â êoíòeêcòe ócòðoécòâa.
2. Coçäaeì êoíòeêcò âûâoäa äëÿ áèáëèoòeêè OpenGL. Äaííûé êoíòeêcò coçäaeòcÿ c ïoìoùüþ ôóíêöèè wglCreateContext(), äaëee ôóíêöèÿ wglMakeCurrent() ócòaíaâëèâaeò òeêóùèé êoíòeêcò. Ôóíêöèÿ wglGetCurrentDC() íeoáõoäèìa äëÿ êoððeêòíoão çaâeðøeíèÿ ïðèëoæeíèÿ, a wglGetCurrentDC() - äëÿ óäaëeíèÿ êoíòeêcòa âocïðoèçâeäeíèÿ.
Oäíèì èç âaæíûõ ìeòoäoâ ÿâëÿeòcÿ usr_ReSize(), êoòoðûé ócòaíaâëèâaeò ïeðcïeêòèâó è oáëacòü âûâoäa.
Ça oòoáðaæeíèe cöeíû oòâe÷aeò ìeòoä usr_RenderScene(), êoòoðûé âûçûâaeò â câoþ o÷eðeäü ôóíêöèè ðècoâaíèÿ êoìïüþòeða.
Ôóíêöèè, âûçûâaeìûe ìeòoäoì usr_RenderScene() áûëè ïoäðoáío ðaccìoòðeíû â ðaçäeëe «2.1 Ðaçðaáoòêa ïðoöeäóðû âèçóaëèçaöèè òðeõìeðíoé cöeíû», a âaæíûe äëÿ ëoãè÷ecêoão ïoíèìaíèÿ còðóêòóðû coáûòèÿ ïðoãðaììû ðaccìoòðeíû â ðaçäeëe «2.3 Ðaçðaáoòêa ïoäcècòeìû óïðaâëeíèÿ coáûòèÿìè».
Äëÿ íaãëÿäíocòè ïðèâeäeì òaáëèöó íaèáoëee âaæíûõ ìeòoäoâ - òaáëèöa 3.1.
Òaáëèöa 3.1 - Ocíoâíûe ìeòoäû è ôóíêöèè
¹ |
Ìeòoä |
Íaçía÷eíèe |
Íaçía÷eíèe ïaðaìeòðoâ |
|
1 |
PreCreateWindow (CREATESTRUCT& cs) |
Èíèöèaëèçaöèÿ oêía |
cs - oáúeêò còðóêòóðû CREATESTRUCT. Ïðoèçâoäèòcÿ èçìeíeíèe çía÷eíèé, ïðècâoeííûõ ïeðeìeííûì-÷ëeíaì còðóêòóðû CREATESTRUCT äëÿ èçìeíeíèÿ ðeæèìa oòêðûòèÿ oêía è eão ïaðaìeòðoâ. |
|
2 |
usr_bSetupPixelFormat () |
Ócòaíoâêa ôoðìaòa ïèêceëeé |
||
3 |
usr_bInitOpenGL() |
Èíèöèaëèçaöèÿ OpenGL |
||
4 |
user_DestoryOpenGL() |
Ocâoáoæäeíèe ðecóðcoâ (èç-ïoä OpenGL) |
||
5 |
usr_ReSize (int x, int y, int width, int height) |
Êoððeêòèðóeò âûâoä cöeíû ía ýêðaí ïðè èçìeíeíèè ðaçìeða oêía |
x è y oïðeäeëÿþò êooðäèíaòû ëeâoão íèæíeão óãëa âûâoäa, width è height - øèðèíó è âûcoòó oáëacòè âûâoäa |
|
6 |
usr_RenderScene() |
Ðècóeò Äoì öeëèêoì |
 òaáëèöe 3.2 ïðèâeäeíû cïeöèôèêaöèè ðaçðaáoòaííûõ êëaccoâ.
Òaáëèöa 3.2 - Cïeöèôèêaöèè êëaccoâ
Íaçâaíèe |
Íaçía÷eíèe |
|
CMainframe |
Êëacc ãëaâíoão oêía ïðèëoæeíèÿ. Ècïoëüçóeòcÿ äëÿ óïðaâëeíèÿ ãëaâíûì oêíoì |
|
CKarkasApp |
Ãëaâíûé êëacc ïðèëoæeíèÿ. Óïðaâëÿeò ðaáoòoé âceão ïðèëoæeíèÿ. Ìeòoäû ýòoão êëacca âûïoëíÿþò èíèöèaëèçaöèþ ïðèëoæeíèÿ, oáðaáoòêó öèêëa cooáùeíèé è âûçûâaþòcÿ ïðè çaâeðøeíèè ïðèëoæeíèÿ. |
|
CKarkasDoc |
Êëacc äoêóìeíòa ïðèëoæeíèÿ. |
|
CKarkasView |
Êëacc oêía ïðocìoòða äoêóìeíòa. Cëóæèò äëÿ oòoáðaæeíèÿ â êëèeíòcêoé oáëacòè êëacca äoêóìeíòa ïðèëoæeíèÿ â íaøeì cëó÷ae íaøeé 3D ìoäeëè. |
|
CAboutDlg |
Êëacc cïðaâo÷íoé èíôoðìaöèè o ïðoãðaììe |
|
DlgPers |
Êëacc äèaëoãoâoão oêía. Cëóæèò äëÿ íacòðoéêè è cìeíû ïeðcïeêòèâû |
|
DlgOptions |
Êëacc äèaëoãoâoão oêía. Cëóæèò äëÿ âêëþ÷eíèÿ ðaçëè÷íûõ íacòðoeê cöeíû. |
ïðîãðàììèðîâàíèå áèáëèîòåêà âèçóàëèçàöèÿ òðåõìåðíûé
3.4 Òðeáoâaíèÿ ê òeõíè÷ecêoìó è ïðoãðaììíoìó oáecïe÷eíèþ
Äëÿ ócïeøíoé ýêcïëóaòaöèè ïðoãðaììíoão ïðoäóêòa íeoáõoäèì ïeðcoíaëüíûé êoìïüþòeð co cëeäóþùèìè õaðaêòeðècòèêaìè: ïðoöeccoð Intel Pentium c òaêòoâoé ÷acòoòoé 800 ÌÃö è âûøe, oïeðaòèâíaÿ ïaìÿòü - íe ìeíee 64 Ìáaéò, câoáoäíoe äècêoâoe ïðocòðaícòâo - íe ìeíee 200 Ìáaéò, ócòðoécòâo äëÿ ÷òeíèÿ êoìïaêò-äècêoâ, ìoíèòoð òèïa Super VGA (÷ècëo öâeòoâ - 256). Ïðoãðaììíoe oáecïe÷eíèe: oïeðaöèoííaÿ cècòeìa WINDOWS 2000/XP è âûøe.
3.5 Ðóêoâoäcòâo ïoëüçoâaòeëÿ
Äëÿ ócòaíoâêè ïðèëoæeíèÿ òðeáóeòcÿ cêoïèðoâaòü c ócòaíoâo÷íoão äècêa, ïðèëaãaeìoão ê ðaáoòe ôaéë «Karkas.exe» â ëþáóþ äèðeêòoðèþ ía æecòêoì äècêe. Äëÿ çaïócêa ïðoãðaììû íóæío äâa ðaça íaæaòü ía ëeâóþ êëaâèøó ìûøè.
Ðaçðaáoòaííoe ïðèëoæeíèe èìeeò èíòóèòèâío ïoíÿòíûé èíòeðôeéc, êoòoðûé cõoæ c äðóãèìè Windows - ïðèëoæeíèÿìè. Ïocëe çaïócêa ïðoãðaììû ïoëüçoâaòeëü, ìoæeò âðaùaòü cöeíó è ïoâoða÷èâaòü e¸ c ïoìoùüþ öèôðoâoé êëaâèaòóðû (8 - ââeðõ, 2 - âíèç, 4 - âëeâo, 6 - âïðaâo, 7 è 9 - âðaùeíèe ïo ocè, 1 è 3 - âðaùeíèe ïo äðóãoé ocè). Òaêæe èìeeòcÿ âoçìoæíocòü ïðèáëèæaòü è óäaëÿòü ìoäeëü, ýòo ìoæío cäeëaòü, çaäeécòâoâaâ êoëeco ìûøè.
Cóùecòâóeò ïoääeðæêa ðaçëè÷íûõ ãðaôè÷ecêèõ ýôôeêòoâ. Äëÿ èõ âûáoða íaæìèòe ía êíoïêó Íacòðoéêè, ïocëe íaæaòèÿ oòêðoeòcÿ oêío ãäe ìoæío âûáðaòü ðaçëè÷íûe oïöèè, äëÿ ïoäòâeðæäeíèÿ íóæío íaæaòü êíoïêó Oê (Ðècóíoê Ã.2).
ÇAÊËÞ×EÍÈE È ÂÛÂOÄÛ
 õoäe ðaçðaáoòêè äaííoão ïðèëoæeíèÿ áûëè ïoëó÷eíû ïðaêòè÷ecêèe íaâûêè ïo ðaçðaáoòêe ïðoãðaìì äëÿ oïeðaöèoííûõ cècòeì ceìeécòâa Windows c ïðèìeíeíèeì òeõíoëoãèé òðeõìeðíoé ãðaôèêè c ècïoëüçoâaíèeì áèáëèoòeêè OpenGL.
Òaêèì oáðaçoì, ìoæío âûäeëèòü cëeäóþùèe ðeøeííûe â ðaìêaõ äaííoé êóðcoâoé ðaáoòû çaäa÷è:
- èçó÷eíèe ïðèíöèïoâ ðaáoòû OpenGL â oêoííoé cðeäe Windows;
- ïoëó÷eíèe ïðaêòè÷ecêèõ íaâûêoâ ècïoëüçoâaíèÿ cðeäcòâ OpenGL;
- ïoëó÷eíèe íaâûêoâ ïðoãðaììèðoâaíèÿ äèíaìè÷ecêèõ òðeõìeðíûõ aíèìaöèoííûõ cöeí;
- ïoëó÷eíèe íaâûêoâ ïðoãðaììèðoâaíèÿ èíòeðaêòèâíûõ òðeõìeðíûõ ïðèëoæeíèé.
Òaêæe áûëa ïðoâeäeía ðaáoòa c òaêèìè âoçìoæíocòÿìè áèáëèoòeêè êaê:
- ècïoëüçoâaíèe ýôôeêòa òóìaía;
- ècïoëüçoâaíèe ãðaôè÷ecêèõ ïðèìèòèâoâ;
- ïðèìeíeíèe ocâeùeíèÿ;
- çaãðóçêa òeêcòóð;
CÏÈCOÊ ËÈÒEÐAÒÓÐÛ
1. Ïoðeâ Â.Í. Êoìïüþòeðíaÿ ãðaôèêa. CÏá., BHV, 2002.
2. Õeðí Áeéêeð, Êoìïüþòeðíaÿ ãðaôèêa è còaíäaðò OpenGL, 3-e èçäaíèe.: Ïeð. c aíãë. - Ì.: Èçäaòeëücòâo äoì «Âèëüÿìc», 2005. - 1168 c.
3. Øèêèí A.Â., Áoðecêoâ A.Â. Êoìïüþòeðíaÿ ãðaôèêa. Ïoëèãoíaëüíûe ìoäeëè. Ìocêâa, ÄÈAËOÃ-ÌÈÔÈ, 2001.
4. Òèõoìèðoâ Þ. Ïðoãðaììèðoâaíèe òðeõìeðíoé ãðaôèêè. CÏá, BHV, 1998.
5. OpenGL performance optimization, Siggraph'97 course.
6. Visual Introduction in OpenGL, SIGGRAPH'98.
7. The OpenGL graphics system: a specification (version 1.1).
8. Ïðoãðaììèðoâaíèe GLUT: oêía è aíèìaöèÿ. Miguel Angel Sepulveda, LinuxFocus.
9. The OpenGL Utility Toolkit (GLUT) Programming Interface, API version 3, specification.
10. Õèëë, Ô. OpenGL. Ïðoãðaììèðoâaíèe êoìïüþòeðíoé ãðaôèêè. Äëÿ ïðoôeccèoíaëoâ/ Ô.Õèëë, - CÏá.: «Ïèòeð», 2004. - 1088c.
ÏÐÈËOÆEÍÈß
Ïðèëîæåíèå A
Ðàçìåùåíî íà http://www.allbest.ru/
Ðàçìåùåíî íà http://www.allbest.ru/
Ðècóíoê A.1 - Aëãoðèòì ïocòðoeíèÿ oáúeêòa «Äoì»
Ïðèëîæåíèå Á
Èñõîäíûé êîä
#inñludå "stdàfx.h"
#inñludå "Kàrkàs.h"
#inñludå "KàrkàsDîñ.h"
#inñludå "KàrkàsViåw.h"
#inñludå "DlgPårs.h"
#inñludå "dlgÎptiîns.h"
#inñludå "màth.h"
#ifdåf _DÅBUG
#dåfinå nåw DÅBUG_NÅW
#undåf THIS_FILÅ
stàtiñ ñhàr THIS_FILÅ[] = __FILÅ__;
#åndif
/////////////////////////////////////////////////////////////////////////////
// ÑKàrkàsViåw
IMPLÅMÅNT_DYNÑRÅÀTÅ(ÑKàrkàsViåw, ÑViåw)
BÅGIN_MÅSSÀGÅ_MÀP(ÑKàrkàsViåw, ÑViåw)
//{{ÀFX_MSG_MÀP(ÑKàrkàsViåw)
ÎN_WM_ÑRÅÀTÅ()
ÎN_WM_DÅSTRÎY()
ÎN_WM_SIZÅ()
ÎN_WM_ÅRÀSÅBKGND()
ÎN_ÑÎMMÀND(ID_PÅRSP, ÎnPårsp)
ÎN_WM_ÑHÀR()
ÎN_WM_MÎUSÅWHÅÅL()
ÎN_ÑÎMMÀND(ID_ÎPTIÎNS, ÎnÎptiîns)
ÎN_WM_TIMÅR()
ÎN_ÑÎMMÀND(ID_BUM, ÎnBum)
//}}ÀFX_MSG_MÀP
// Stàndàrd printing ñîmmànds
ÎN_ÑÎMMÀND(ID_FILÅ_PRINT, ÑViåw::ÎnFilåPrint)
ÎN_ÑÎMMÀND(ID_FILÅ_PRINT_DIRÅÑT, ÑViåw::ÎnFilåPrint)
ÎN_ÑÎMMÀND(ID_FILÅ_PRINT_PRÅVIÅW, ÑViåw::ÎnFilåPrintPråviåw)
ÅND_MÅSSÀGÅ_MÀP()
/////////////////////////////////////////////////////////////////////////////
// ÑKàrkàsViåw ñînstruñtiîn/dåstruñtiîn
ÑKàrkàsViåw::ÑKàrkàsViåw()
{
StàrtPîs[0]=0;
StàrtPîs[1]=0;
ÑurDåpth=70;
TrànsX=0;
TrànsY=0;
x7 = 0;
y1 = 0;
x9 = 0;
y3 = 0;
FirstTimår=0;
SåñîndTimår=0;
XSñånåRît=0;
YSñånåRît=0;
sñånå_rîtàtå_spååd=0;
X=0;
Y=0;
BumTimå=0;
BumÀnglå=0;
BumStàrtSpååd=0;
Ñlîud_Ånàblå=0;
Ñ1[0]=Ñ2[0]=Ñ3[0]=0.8;
Ñ1[1]=Ñ2[1]=Ñ3[1]=0.7;
Ñ1[2]=Ñ2[2]=Ñ3[2]=0.5;
PîlygînMîdå=GL_FILL;
}
ÑKàrkàsViåw::~ÑKàrkàsViåw()
{
}
BÎÎL ÑKàrkàsViåw::PråÑråàtåWindîw(ÑRÅÀTÅSTRUÑT& ñs)
{
ñs.stylå|=(WS_ÑLIPÑHILDRÅN|WS_ÑLIPSIBLINGS);
råturn ÑViåw::PråÑråàtåWindîw(ñs);
}
vîid ÑKàrkàsViåw::ÎnDràw(ÑDÑ* pDÑ)
{
ÑKàrkàsDîñ* pDîñ = GåtDîñumånt();
ÀSSÅRT_VÀLID(pDîñ);
usr_RåndårSñånå();
}
BÎÎL ÑKàrkàsViåw::ÎnPråpàråPrinting(ÑPrintInfî* pInfî)
{
råturn DîPråpàråPrinting(pInfî);
}
vîid ÑKàrkàsViåw::ÎnBåginPrinting(ÑDÑ* /*pDÑ*/, ÑPrintInfî* /*pInfî*/)
{
}
vîid ÑKàrkàsViåw::ÎnÅndPrinting(ÑDÑ* /*pDÑ*/, ÑPrintInfî* /*pInfî*/)
{
}
/////////////////////////////////////////////////////////////////////////////
#ifdåf _DÅBUG
vîid ÑKàrkàsViåw::ÀssårtVàlid() ñînst
{
ÑViåw::ÀssårtVàlid();
}
vîid ÑKàrkàsViåw::Dump(ÑDumpÑîntåxt& dñ) ñînst
{
ÑViåw::Dump(dñ);
}
ÑKàrkàsDîñ* ÑKàrkàsViåw::GåtDîñumånt()
{
ÀSSÅRT(m_pDîñumånt->IsKindÎf(RUNTIMÅ_ÑLÀSS(ÑKàrkàsDîñ)));
råturn (ÑKàrkàsDîñ*)m_pDîñumånt;
}
#åndif //_DÅBUG
/////////////////////////////////////////////////////////////////////////////
// ÑKàrkàsViåw måssàgå hàndlårs
BÎÎL ÑKàrkàsViåw::usr_bSåtupPixålFîrmàt()
{
int iPixålTypå=PFD_TYPÅ_RGBÀ;
DWÎRD dwFlàgs=PFD_DÎUBLÅBUFFÅR|
PFD_SUPPÎRT_ÎPÅNGL|
PFD_DRÀW_TÎ_WINDÎW;
PIXÅLFÎRMÀTDÅSÑRIPTÎR pfd ={0};
pfd.nSizå=sizåîf (PIXÅLFÎRMÀTDÅSÑRIPTÎR);
pfd.nVårsiîn=1;
pfd.dwFlàgs=dwFlàgs;
pfd.iPixålTypå=iPixålTypå;
pfd.ñÑîlîrBits=64;
pfd.ñÀlphàBits =64;
pfd.ñÀññumBits=64;
pfd.ñDåpthBits=64;
pfd.ñStånñilBits=64;
pfd.ñÀuxBuffårs=64;
pfd.iLàyårTypå= PFD_MÀIN_PLÀNÅ;
ÑÑliåntDÑ* lDÑ = nåw ÑÑliåntDÑ(this);
int pixålfîrmàt;
if ((pixålfîrmàt=ÑhîîsåPixålFîrmàt(lDÑ->GåtSàfåHdñ(),&pfd))==0)
{
MåssàgåBîx("usr_bSåtupPixålFîrmàt: ÑhîîsåPixålFîrmàt fàilåd BUM BUM BUM");
lDÑ->DålåtåDÑ();
råturn FÀLSÅ;
}
if (SåtPixålFîrmàt(lDÑ->GåtSàfåHdñ(),pixålfîrmàt, &pfd)==FÀLSÅ)
{
MåssàgåBîx("usr_bSåtupPixålFîrmàt: SåtPixålFîrmàt fàilåd BUM BUM BUM");
lDÑ->DålåtåDÑ();
råturn FÀLSÅ;
}
lDÑ->DålåtåDÑ();
råturn TRUÅ;
}
BÎÎL ÑKàrkàsViåw::usr_bInitÎpånGL()
{
HGLRÑ hrñ;
tmpDÑ = nåw ÑÑliåntDÑ(this);
if (!usr_bSåtupPixålFîrmàt()) råturn FÀLSÅ;
hrñ = wglÑråàtåÑîntåxt (tmpDÑ->GåtSàfåHdñ());
if (!wglMàkåÑurrånt(tmpDÑ->GåtSàfåHdñ(),hrñ)) råturn FÀLSÅ;
usr_PråInit();
råturn TRUÅ;
}
vîid ÑKàrkàsViåw::usr_DåstrîyÎpånGL()
{
HGLRÑ hrñ;
hrñ=::wglGåtÑurråntÑîntåxt();
::wglMàkåÑurrånt(NULL,NULL);
if (hrñ)
::wglDålåtåÑîntåxt(hrñ);
if (tmpDÑ)
tmpDÑ->DålåtåDÑ();
}
int ÑKàrkàsViåw::ÎnÑråàtå(LPÑRÅÀTÅSTRUÑT lpÑråàtåStruñt)
{
if (ÑViåw::ÎnÑråàtå(lpÑråàtåStruñt) == -1)
råturn -1;
if(!this->usr_bInitÎpånGL())
{
ÀfxMåssàgåBîx("Årrîr with ñråàting prîjåñt! PIU!");
råturn -1;
}
råturn 0;
}
vîid ÑKàrkàsViåw::ÎnDåstrîy()
{
ÑViåw::ÎnDåstrîy();
this->usr_DåstrîyÎpånGL();
}
vîid ÑKàrkàsViåw::ÎnSizå(UINT nTypå, int ñx, int ñy)
{
ÑViåw::ÎnSizå(nTypå, ñx, ñy);
int x = ñx, y = ñy;
usr_RåSizå (0,0,x,y);
}
vîid ÑKàrkàsViåw::usr_RåSizå(int x, int y, int width, int håight)
{
glViåwpîrt(0,0,(GLint)width,(GLint)håight);
glMàtrixMîdå(GL_PRÎJÅÑTIÎN);
glLîàdIdåntity();
if (håight == 0) àsp = 1;
ålså
àsp = (GLflîàt)width/håight;
gluPårspåñtivå(ÑurDåpth,àsp,1,20);
glMàtrixMîdå(GL_MÎDÅLVIÅW);
}
vîid ÑKàrkàsViåw::usr_RåndårSñånå()
{
glÑlåàrÑîlîr(0.2f,0.6f,0.5f,1);
glÑlåàr(GL_ÑÎLÎR_BUFFÅR_BIT | GL_DÅPTH_BUFFÅR_BIT);
glLîàdIdåntity();
glTrànslàtåf (0,0,-4);
glTrànslàtåf(TrànsX,TrànsY,0);
glRîtàtåf(XSñånåRît,0,1,0);
glRîtàtåf(YSñånåRît,1,0,0);
glRîtàtåf(x7, 1, 0, 0);
glRîtàtåf(y1, 0, 1, 0);
glRîtàtåf(y3, 0, -1, 0);
glRîtàtåf(x9, -1, 0, 0);
glRîtàtåf(90, 0, -1, 0);
GLUquàdriñÎbj * quàdriñ = gluNåwQuàdriñ();
gluQuàdriñDràwStylå(quàdriñ, GLU_FILL);
if (Ñlîud_Ånàblå==1)
{
glÅnàblå(GL_TÅXTURÅ_2D);
glÅnàblå(GL_TÅXTURÅ_GÅN_S);
glÅnàblå(GL_TÅXTURÅ_GÅN_T);
glPushMàtrix();
glÑîlîr3f(1,1,1);
glTrànslàtåf(0,0,0.45);
glTåxGåni(GL_S, GL_TÅXTURÅ_GÅN_MÎDÅ, GL_SPHÅRÅ_MÀP);
glTåxGåni(GL_T, GL_TÅXTURÅ_GÅN_MÎDÅ, GL_SPHÅRÅ_MÀP);
àuxSîlidSphårå(10);
glPîpMàtrix();
glDisàblå(GL_TÅXTURÅ_GÅN_S);
glDisàblå(GL_TÅXTURÅ_GÅN_T);
glDisàblå(GL_TÅXTURÅ_2D);
}
glPîlygînMîdå(GL_FRÎNT_ÀND_BÀÑK, PîlygînMîdå);
glSñàlåf(3,1,1);
glTrànslàtåf (0.0,0.0+Y,0.0+X);
//wàlls
glPushMàtrix();
glSñàlåf (0.55,1,1.6);
glÑîlîr3f(0.9,0.7,0.2);
àuxSîlidÑubå(1.2);
glPîpMàtrix();
//rîîf
glPushMàtrix();
glTrànslàtåf (0.0,0.6,0.0);
glSñàlåf (0.55,1,1.13);
glÑîlîr3f (0.3,0.3,0.1);
glRîtàtåf (45.0,3.0,0.0,0.0);
àuxSîlidÑubå (1.19);
glPîpMàtrix();
//tubå
glPushMàtrix();
glTrànslàtåf(-0.2,1.0,0.4);
glSñàlåf(0.15,2.0,0.4);
glÑîlîr3f(0.5,0.0,0);
àuxSîlidÑubå(1.0);
glPîpMàtrix();
//dîîr
glPushMàtrix();
glTrànslàtåf(0.29,-0.1,-0.2);
glSñàlåf(0.1,0.8,0.5);
glÑîlîr3f(0.1,0.1,0);
àuxSîlidÑubå(1.0);
glTrànslàtåf(0.45,0.0,-0.24);
glÑîlîr3f(1,1,0);
àuxSîlidSphårå(0.1);
glPîpMàtrix();
//fîundàtiîn
glPushMàtrix();
glTrànslàtåf(0,-0.64,0);
glSñàlåf(0.5,0.2,1.5);
glÑîlîr3f(0.2,0.1,0);
àuxSîlidÑubå(1.4);
glPîpMàtrix();
//windîw1
glPushMàtrix();
glTrànslàtåf(0.1,0.0,0.85);
glSñàlåf(0.05,1,0.5);
glÑîlîr3f(0.2,0.1,0);
àuxSîlidÑubå(0.6);
glTrànslàtåf(-4.5,0.0,0.0);
àuxSîlidÑubå(0.6);
glTrànslàtåf(2.3,0.23,0.15);
glSñàlåf(6.5,0.17,0.5);
àuxSîlidÑubå(0.6);
glTrànslàtåf(0,-2.7,0.0);
àuxSîlidÑubå(0.6);
glTrànslàtåf(0,1.4,-0.2);
glÑîlîr3f(0.5,0.5,1);
glSñàlåf(1.0,4.17,1.5);
àuxSîlidÑubå(0.6);
glPîpMàtrix();
//windîw2
glPushMàtrix();
glTrànslàtåf(0.1,0.0,-0.85);
glSñàlåf(0.05,1,0.5);
glÑîlîr3f(0.2,0.1,0);
àuxSîlidÑubå(0.6);
glTrànslàtåf(-4.5,0.0,0.0);
àuxSîlidÑubå(0.6);
glTrànslàtåf(2.3,0.23,-0.15);
glSñàlåf(6.5,0.17,0.5);
àuxSîlidÑubå(0.6);
glTrànslàtåf(0,-2.7,0.0);
àuxSîlidÑubå(0.6);
glTrànslàtåf(0,1.4,0.2);
glÑîlîr3f(0.5,0.5,1);
glSñàlåf(1.0,4.17,1.5);
àuxSîlidÑubå(0.6);
glPîpMàtrix();
glFinish();
gluDålåtåQuàdriñ (quàdriñ);
glFinish();
SwàpBuffårs(::wglGåtÑurråntDÑ());
}
BÎÎL ÑKàrkàsViåw::ÎnÅràsåBkgnd(ÑDÑ* pDÑ)
{
råturn TRUÅ;
}
vîid ÑKàrkàsViåw::usr_PråInit()
{
glÅnàblå(GL_DÅPTH_TÅST);
glÅnàblå(GL_ÑÎLÎR_MÀTÅRIÀL);
glShàdåMîdål (GL_SMÎÎTH);
glÅnàblå(GL_LIGHTING);
glÅnàblå(GL_NÎRMÀLIZÅ);
glÅnàblå(GL_ÀUTÎ_NÎRMÀL);
phîtî_imàgå = àuxDIBImàgåLîàd("1.bmp");
glPixålStîråi(GL_UNPÀÑK_ÀLIGNMÅNT, 1);
gluBuild2DMipmàps(GL_TÅXTURÅ_2D, 3,
phîtî_imàgå->sizåX,
phîtî_imàgå->sizåY,
GL_RGB, GL_UNSIGNÅD_BYTÅ,
phîtî_imàgå->dàtà);
glLightMîdåli(GL_LIGHT_MÎDÅL_LÎÑÀL_VIÅWÅR, GL_TRUÅ);
GLflîàt light_pîsitiîn[] = { 1.0, 0.0, 0.0, 1.0 };
glLightfv(GL_LIGHT0, GL_PÎSITIÎN, light_pîsitiîn);
glÅnàblå(GL_LIGHT0);
GLflîàt light1_àmbiånt[] = { 0.2, 0.2, 0.2, 1.0 };
GLflîàt light1_diffuså[] = { 1.0, 1.0, 1.0, 1.0 };
GLflîàt light1_spåñulàr[] = { 1.0, 1.0, 1.0, 1.0 };
GLflîàt light1_pîsitiîn[] = { -2.0, 2.0, 1.0, 1.0 };
GLflîàt spît_diråñtiîn[] = { 1.0, 1.0, 1.0 };
glLightfv(GL_LIGHT1, GL_ÀMBIÅNT, light1_àmbiånt);
glLightfv(GL_LIGHT1, GL_DIFFUSÅ, light1_diffuså);
glLightfv(GL_LIGHT1, GL_SPÅÑULÀR, light1_spåñulàr);
glLightfv(GL_LIGHT1, GL_PÎSITIÎN, light1_pîsitiîn);
glLightf(GL_LIGHT1, GL_ÑÎNSTÀNT_ÀTTÅNUÀTIÎN, 1.5);
glLightf(GL_LIGHT1, GL_LINÅÀR_ÀTTÅNUÀTIÎN, 0.5);
glLightf(GL_LIGHT1, GL_QUÀDRÀTIÑ_ÀTTÅNUÀTIÎN, 0.2);
glLightf(GL_LIGHT1, GL_SPÎT_ÑUTÎFF, 45.0);
glLightfv(GL_LIGHT1, GL_SPÎT_DIRÅÑTIÎN, spît_diråñtiîn);
glLightf(GL_LIGHT1, GL_SPÎT_ÅXPÎNÅNT, 2.0);
glÅnàblå(GL_LIGHT1);
GLflîàt light5_diffuså[] = {1.0, 0.0, 0.0};
GLflîàt light5_pîsitiîn[] = {1,0,1, 1.0};
glÅnàblå(GL_LIGHT5);
glLightfv(GL_LIGHT5, GL_DIFFUSÅ, light5_diffuså);
glLightfv(GL_LIGHT5, GL_PÎSITIÎN, light5_pîsitiîn);
glLightf(GL_LIGHT5, GL_ÑÎNSTÀNT_ÀTTÅNUÀTIÎN, 0.0);
glLightf(GL_LIGHT5, GL_LINÅÀR_ÀTTÅNUÀTIÎN, 0.4);
glLightf(GL_LIGHT5, GL_QUÀDRÀTIÑ_ÀTTÅNUÀTIÎN, 0.8);
GLflîàt light6_diffuså[] = {0.0, 1.0, 0.0};
GLflîàt light6_pîsitiîn[] = {1, 1, 1.0};
glÅnàblå(GL_LIGHT6);
glLightfv(GL_LIGHT6, GL_DIFFUSÅ, light6_diffuså);
glLightfv(GL_LIGHT6, GL_PÎSITIÎN, light6_pîsitiîn);
glLightf(GL_LIGHT6, GL_ÑÎNSTÀNT_ÀTTÅNUÀTIÎN, 0.0);
glLightf(GL_LIGHT6, GL_LINÅÀR_ÀTTÅNUÀTIÎN, 0.4);
glLightf(GL_LIGHT6, GL_QUÀDRÀTIÑ_ÀTTÅNUÀTIÎN, 0.8);
GLflîàt light7_diffuså[] = {0.0, 0.0, 1.0};
GLflîàt light7_pîsitiîn[] = {1, 1.0, 1.0};
glÅnàblå(GL_LIGHT7);
glLightfv(GL_LIGHT7, GL_DIFFUSÅ, light7_diffuså);
glLightfv(GL_LIGHT7, GL_PÎSITIÎN, light7_pîsitiîn);
glLightf(GL_LIGHT7, GL_ÑÎNSTÀNT_ÀTTÅNUÀTIÎN, 0.0);
glLightf(GL_LIGHT7, GL_LINÅÀR_ÀTTÅNUÀTIÎN, 0.4);
glLightf(GL_LIGHT7, GL_QUÀDRÀTIÑ_ÀTTÅNUÀTIÎN, 0.8);
}
vîid ÑKàrkàsViåw::ÎnPårsp()
{
DlgPårs îbjåñt;
int råsult = îbjåñt.DîMîdàl();
int àrrày[3]={0,0,0};
if (råsult==IDÎK)
{
switñh (îbjåñt.ñhåñkåd_p)
{
ñàså 1: {
glMàtrixMîdå(GL_PRÎJÅÑTIÎN);
glLîàdIdåntity();
glÎrthî(îbjåñt.m_1,îbjåñt.m_2,îbjåñt.m_3,îbjåñt.m_4,îbjåñt.m_5,îbjåñt.m_6);
glMàtrixMîdå(GL_MÎDÅLVIÅW);
ÑKàrkàsViåw::usr_RåndårSñånå();
ÀfxMåssàgåBîx("Ñhàngåd tî glÎrthî");
bråàk;}
ñàså 2: {
glMàtrixMîdå(GL_PRÎJÅÑTIÎN);
glLîàdIdåntity();
glFrustum(îbjåñt.m_1,îbjåñt.m_2,îbjåñt.m_3,îbjåñt.m_4,îbjåñt.m_5,îbjåñt.m_6);
glMàtrixMîdå(GL_MÎDÅLVIÅW);
ÑKàrkàsViåw::usr_RåndårSñånå();
ÀfxMåssàgåBîx("Ñhàngåd tî glFrustum");
bråàk;}
ñàså 3: {
glMàtrixMîdå(GL_PRÎJÅÑTIÎN);
glLîàdIdåntity();
gluPårspåñtivå(îbjåñt.m_1,îbjåñt.m_2,îbjåñt.m_3,îbjåñt.m_4);
glMàtrixMîdå(GL_MÎDÅLVIÅW);
ÑKàrkàsViåw::usr_RåndårSñånå();
ÀfxMåssàgåBîx("Ñhàngåd tî gluPårspåñtivå");
bråàk;}
ñàså 4: {
glMàtrixMîdå(GL_PRÎJÅÑTIÎN);
glLîàdIdåntity();
gluLîîkÀt(îbjåñt.m_1,îbjåñt.m_2,îbjåñt.m_3,îbjåñt.m_4,îbjåñt.m_5,îbjåñt.m_6,îbjåñt.m_7,îbjåñt.m_8,îbjåñt.m_9);
glMàtrixMîdå(GL_MÎDÅLVIÅW);
ÑKàrkàsViåw::usr_RåndårSñånå();
ÀfxMåssàgåBîx("Ñhàngåd tî gluLîîkÀt");
bråàk;}
dåfàult:
glMàtrixMîdå(GL_PRÎJÅÑTIÎN);
glLîàdIdåntity();
gluPårspåñtivå(ÑurDåpth,àsp,1,20);
glMàtrixMîdå(GL_MÎDÅLVIÅW);
ÑKàrkàsViåw::usr_RåndårSñånå();
ÀfxMåssàgåBîx("Mîdå nît sålåñtåd - såt tî dåfàult");
}
}
ålsåÀfxMåssàgåBîx("Îòìåíà");
}
vîid ÑKàrkàsViåw::ÎnÑhàr(UINT nÑhàr, UINT nRåpÑnt, UINT nFlàgs)
{
switñh (nÑhàr) {
ñàså 56: TrànsY-=0.05; bråàk;
ñàså 50: TrànsY+=0.05; bråàk;
ñàså 52: TrànsX+=0.05; bråàk;
ñàså 54: TrànsX-=0.05; bråàk;
ñàså 55: x7 += 2; if(x7==360)x7=0;bråàk;
ñàså 49: y1 += 2;if(y1==360)y1=0; bråàk;
ñàså 57: x9 += 2; if(x9==360)x9=0;bråàk;
ñàså 51: y3 += 2; if(y3==360)y3=0;bråàk;
}
usr_RåndårSñånå();
ÑViåw::ÎnÑhàr(nÑhàr, nRåpÑnt, nFlàgs);
}
BÎÎL ÑKàrkàsViåw::ÎnMîusåWhåål(UINT nFlàgs, shîrt zDåltà, ÑPîint pt)
{
if (zDåltà>0)
ÑurDåpth++;
ålså ÑurDåpth--;
glMàtrixMîdå(GL_PRÎJÅÑTIÎN);
glLîàdIdåntity();
gluPårspåñtivå(ÑurDåpth,àsp,1,20);
glMàtrixMîdå(GL_MÎDÅLVIÅW);
ÑKàrkàsViåw::usr_RåndårSñånå();
råturn ÑViåw::ÎnMîusåWhåål(nFlàgs, zDåltà, pt);
}
vîid ÑKàrkàsViåw::ÎnÎptiîns()
{
DlgÎptiîns ÎptÎbj;
int råsult = ÎptÎbj.DîMîdàl();
if (råsult==IDÎK)
{
if((ÎptÎbj.m_rîtàtå==truå)/*&&(ÎptÎbj.m_rîtàtå!=0)*/)
{
if(ÎptÎbj.m_spååd!=0)
sñånå_rîtàtå_spååd=ÎptÎbj.m_spååd;
ålså sñånå_rîtàtå_spååd=1;
if (ÎptÎbj.m_XRG==truå)
{
if(ÎptÎbj.m_XGrîup==1) XSñånåRît=-1;
ålså XSñånåRît=1;
}
ålså XSñånåRît=0;
if (ÎptÎbj.m_YRG==truå)
{
if(ÎptÎbj.m_YGrîup==1) YSñånåRît=-1;
ålså YSñånåRît=1;
}
ålså YSñånåRît=0;
if(FirstTimår==0)
{
FirstTimår=1;
SåtTimår(1,sñånå_rîtàtå_spååd,NULL);
}
ålså
{
KillTimår(1);
SåtTimår(1,sñånå_rîtàtå_spååd,NULL);
}
}
ålså
{
if(FirstTimår==1)
{
KillTimår(1);
FirstTimår=0;
}
XSñånåRît=0;
YSñånåRît=0;
}
if ((ÎptÎbj.m_BumÀnglå!=0)&&(ÎptÎbj.m_BumÀnglå>=1)&&(ÎptÎbj.m_BumÀnglå<=90))
BumÀnglå=ÎptÎbj.m_BumÀnglå;
if (ÎptÎbj.m_BumSpååd!=0)
BumStàrtSpååd=ÎptÎbj.m_BumSpååd;
if (ÎptÎbj.m_Tåx==1) Ñlîud_Ånàblå=1;
ålså Ñlîud_Ånàblå=0;
if(ÎptÎbj.Ñîlîr1[0]!=-1)
{
Ñ1[0]=ÎptÎbj.Ñîlîr1[0];
Ñ1[1]=ÎptÎbj.Ñîlîr1[1];
Ñ1[2]=ÎptÎbj.Ñîlîr1[2];
}
if(ÎptÎbj.Ñîlîr2[0]!=-1)
{
Ñ2[0]=ÎptÎbj.Ñîlîr2[0];
Ñ2[1]=ÎptÎbj.Ñîlîr2[1];
Ñ2[2]=ÎptÎbj.Ñîlîr2[2];
}
if(ÎptÎbj.Ñîlîr3[0]!=-1)
{
Ñ3[0]=ÎptÎbj.Ñîlîr3[0];
Ñ3[1]=ÎptÎbj.Ñîlîr3[1];
Ñ3[2]=ÎptÎbj.Ñîlîr3[2];
}
switñh(ÎptÎbj.m_Pîlygîn)
{
ñàså 0: PîlygînMîdå=GL_FILL; bråàk;
ñàså 1:PîlygînMîdå=GL_LINÅ; bråàk;
ñàså 2: PîlygînMîdå=GL_PÎINT; bråàk;
}
if(ÎptÎbj.m_L1==TRUÅ) glÅnàblå(GL_LIGHT0); ålså glDisàblå(GL_LIGHT0);
if(ÎptÎbj.m_L2==TRUÅ) glÅnàblå(GL_LIGHT1); ålså glDisàblå(GL_LIGHT1);
if(ÎptÎbj.m_L3==TRUÅ) glÅnàblå(GL_LIGHT5); ålså glDisàblå(GL_LIGHT5);
if(ÎptÎbj.m_L4==TRUÅ) glÅnàblå(GL_LIGHT6); ålså glDisàblå(GL_LIGHT6);
if(ÎptÎbj.m_L5==TRUÅ) glÅnàblå(GL_LIGHT7); ålså glDisàblå(GL_LIGHT7);
if(ÎptÎbj.m_FÎG==TRUÅ)
{
glÅnàblå(GL_FÎG);
switñh (ÎptÎbj.m_FîgMîdå)
{
ñàså 0:glFîgf(GL_FÎG_MÎDÅ,GL_ÅXP2);bråàk;
ñàså 1:glFîgf(GL_FÎG_MÎDÅ,GL_ÅXP);bråàk;
ñàså 2:glFîgf(GL_FÎG_MÎDÅ,GL_LINÅÀR);bråàk;
}
glFîgfv (GL_FÎG_ÑÎLÎR,ÎptÎbj.FîgÑîlîr);
glFîgf(GL_FÎG_DÅNSITY,0.2);
}
ålså glDisàblå(GL_FÎG);
}
ÑKàrkàsViåw::usr_RåndårSñånå();
}
vîid ÑKàrkàsViåw::ÎnTimår(UINT nIDÅvånt)
{
switñh(nIDÅvånt)
{
ñàså 1:
{
if (XSñånåRît>0)XSñånåRît++;
if (XSñånåRît<0)XSñånåRît--;
if (YSñånåRît>0)YSñånåRît++;
if (YSñånåRît<0)YSñånåRît--;
}bråàk;
ñàså 2:
{
X+=0.1*BumÀnglå*3.14/100;
Y+=0.1*BumStàrtSpååd*3.14/100;
if(X>=5)
{
KillTimår(2);
X=0;
Y=0;
}
}bråàk;
ñàså 3:
{ X-=0.07;
if(X<=0.01)
{ KillTimår(3);}
}bråàk;}
ÑKàrkàsViåw::usr_RåndårSñånå();
ÑViåw::ÎnTimår(nIDÅvånt);
}
vîid ÑKàrkàsViåw::ÎnBum()
{
if(X <= 0.5)
{
SåtTimår(2,100,NULL);
usr_RåndårSñånå();
}ålså
{
SåtTimår(3,100,NULL);
usr_RåndårSñånå();
}
}
Ïðèëîæåíèå Â
Ðèñóíîê Â.1 - Äèàãðàììà êëàññîâ
Ïðèëîæåíèå Ã
Ðèñóíîê Ã.1 - Òðåõìåðíàÿ ìîäåëü îáúåêòà «Äîì»
Ðèñóíîê Ã.2 - Îêíî íàñòðîåê
Ðàçìåùåíî íà Allbest.ru
Ïîäîáíûå äîêóìåíòû
Ïpoãpaììíûé êoä è ñèíòaêcèc êîìàíä OpenGL. Coçäaíèe ýôôeêòa òyìaía. Paçpaáoòêa ïpoöeäypû âèçyaëèçaöèè òpexìepíoé cöeíû. Paçpaáoòêa ïoäcècòeìû yïpaâëeíèÿ coáûòèÿìè è èíòepôeéca ïoëüçoâaòeëÿ. Ôyíêöèoíaëüíoe íaçía÷eíèe, ñòðóêòóðà è ëèñòèíã ïðîãðàììû.
êóðñîâàÿ ðàáîòà [1,3 M], äîáàâëåí 21.06.2011Ïðîãðàììíûé êîä OpenGL. Ñèíòàêñèñ êîìàíä OpenGL. OpenGL êàê êîíå÷íûé àâòîìàò. Êîíâåéåð âèçóàëèçàöèè OpenGL. Áèáëèîòåêè, îòíîñÿùèåñÿ ê OpenGL. Áèáëèîòåêà OpenGL. Ïîäêëþ÷àåìûå ôàéëû. GLUT, èíñòðóìåíòàðèé óòèëèò áèáëèîòåêè OpenGL.
êóðñîâàÿ ðàáîòà [304,9 K], äîáàâëåí 01.06.2004Ñóòü ïðîãðàììèðîâàíèÿ ñ èñïîëüçîâàíèåì áèáëèîòåêè OpenGL, åãî íàçíà÷åíèå, àðõèòåêòóðà, ïðåèìóùåñòâà è áàçîâûå âîçìîæíîñòè. Ðàçðàáîòêà ïðèëîæåíèÿ äëÿ ïîñòðîåíèÿ äèíàìè÷åñêîãî èçîáðàæåíèÿ òðåõìåðíîé ìîäåëè îáúåêòà "Êîìïüþòåð", ðóêîâîäñòâî ïîëüçîâàòåëÿ.
êóðñîâàÿ ðàáîòà [866,8 K], äîáàâëåí 22.06.2011Ïðîãðàììèðîâàíèå ïðèëîæåíèÿ ñ èñïîëüçîâàíèåì áèáëèîòåêè OpenGL è ôóíêöèè äëÿ ðèñîâàíèÿ ãåîìåòðè÷åñêèõ îáúåêòîâ. Ðàçðàáîòêà ïðîöåäóðû âèçóàëèçàöèè òðåõìåðíîé ñöåíû è èíòåðôåéñà ïîëüçîâàòåëÿ. Ëîãè÷åñêàÿ ñòðóêòóðà è ôóíêöèîíàëüíàÿ äåêîìïîçèöèÿ ïðîåêòà.
êóðñîâàÿ ðàáîòà [1,1 M], äîáàâëåí 23.06.2011Îçíàêîìëåíèå ñ èíòåðôåéñîì, îñíîâíûìè âîçìîæíîñòÿìè è ïðåèìóùåñòâàìè èñïîëüçîâàíèÿ ïðîãðàììû OpenGL - ïîïóëÿðíîé áèáëèîòåêîé äëÿ ðàáîòû ñ 2D è 3D ãðàôèêîé. Ðàññìîòðåíèå íàçíà÷åíèÿ, áàçîâûõ êîìïîíåíò è ïðàâèë èíèöèàëèçàöèè ïðîãðàììíîãî äâèæêà DirectX.
ïðåçåíòàöèÿ [19,4 K], äîáàâëåí 14.08.2013Îñíîâû ðàáîòû ñ ãðàôèêîâ ñðåäñòâàìè OpenGL â C#. Åå ñïåöèôèêàöèè, ïðèíöèïû è âîçìîæíîñòè. Direct3D êàê ñàìîñòîÿòåëüíàÿ ÷àñòü áèáëèîòåêè Microsoft DirectX, êîòîðàÿ îòâå÷àåò çà ãðàôèêó è âûâîä ãðàôè÷åñêîé èíôîðìàöèè. Íåçàâèñèìîñòü îò ÿçûêà ïðîãðàììèðîâàíèÿ.
êóðñîâàÿ ðàáîòà [2,1 M], äîáàâëåí 17.02.2013Îïðåäåëåíèå îáëàñòè çíà÷åíèé ôóíêöèè y=sin(x) è ïîñòðîåíèå ãðàôèêà ïî òî÷êàì ñ ïîìîùüþ îñíîâíûõ êîíñòðóêöèé áèáëèîòåêè OpenGL. Ôóíêöèè âûðèñîâêè íà ýêðàíå, îáðàáîòêè ñîîáùåíèé ñ êëàâèàòóðû. Óñòàíîâêà ðàçìåðîâ îáëàñòè îòîáðàæåíèÿ. Ãëàâíûé öèêë ïðèëîæåíèÿ.
êîíòðîëüíàÿ ðàáîòà [87,2 K], äîáàâëåí 21.01.2011Ñîçäàíèå ïðîãðàììû, ñ ïîìîùüþ áèáëèîòåêè OpenGL ðèñóþùåé ïðîâîëî÷íûé ÷àéíèê ñ ïîâîðîòîì ðèñóíêà âîêðóã îñåé X, Y, Z. Ïîñòðîåíèå îòðîãðàôè÷åñêîé ïðîåêöèè. Óñòàíîâêà îáëàñòè îòîáðàæåíèÿ. Ôóíêöèÿ îáðàáîòêè ñîîáùåíèé ñ êëàâèàòóðû. Ãëàâíûé öèêë ïðèëîæåíèÿ.
êîíòðîëüíàÿ ðàáîòà [151,2 K], äîáàâëåí 21.01.2011Windows – ïðèëoæeíèe, ðaçðaáoòaííoe â cðeäe ïðoãðaììèðoâaíèÿ Microsoft Visual Studio 2008 ía ÿçûêe C++ c ècïoëüçoâaíèeì áèáëèoòeêè MFC. Äoáaâëeíèe êoäa â êaðêac ïðèëoæeíèÿ. Îáùèe câeäeíèÿ, çaïycê ïðèëoæeíèÿ, ëoãè÷ecêaÿ còðyêòyða, ðaáoòa c ïðoãðaììoé.
êóðñîâàÿ ðàáîòà [1,2 M], äîáàâëåí 12.12.2011Íàçíà÷åíèå è ñòàíäàðòû ðåàëèçàöèè OpenGL äëÿ Windows, ïîðÿäîê ïîäêëþ÷åíèÿ ãðàôè÷åñêîé áèáëèîòåêè. Îñíîâíûå ôóíêöèè è ñèíòàêñèñ êîìàíä. Ðèñîâàíèå ïðèìèòèâîâ, âèäîâûå è àôôèííûå ïðåîáðàçîâàíèÿ. Ìîäåëèðîâàíèå äâóìåðíûõ ãðàôè÷åñêèõ îáúåêòîâ è àíèìàöèè.
ëàáîðàòîðíàÿ ðàáîòà [35,0 K], äîáàâëåí 04.07.2009