Ð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.2011

  • Windows – ïðèë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

Ðàáîòû â àðõèâàõ êðàñèâî îôîðìëåíû ñîãëàñíî òðåáîâàíèÿì ÂÓÇîâ è ñîäåðæàò ðèñóíêè, äèàãðàììû, ôîðìóëû è ò.ä.
PPT, PPTX è PDF-ôàéëû ïðåäñòàâëåíû òîëüêî â àðõèâàõ.
Ðåêîìåíäóåì ñêà÷àòü ðàáîòó.