ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΡ гироскопа Π€ΡƒΠΊΠΎ срСдствами OpenGL

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

РСализация управлСния модСлью ИмСя модСль Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ срСдства ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Сю ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ. Рассматривая ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ управлСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ модСлями Π² ΠΏΡ€ΠΎΡΡ‚ранствС, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ являСтся ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΡ‹ΡˆΠΈ. ΠœΡ‹ΡˆΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ любоС Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ, ΠΈ Π±Ρ‹ΡΡ‚Ρ€ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² ΡΠ»ΡƒΡ‡Π°Π΅ Π½Π΅Π²Π΅Ρ€Π½Ρ‹Ρ… дСйствий. ΠšΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ ΠΌΡ‹ΡˆΠΈ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΡ гироскопа Π€ΡƒΠΊΠΎ срСдствами OpenGL (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠœΠ˜ΠΠ˜Π‘Π’Π•Π Π‘Π’Π’Πž ΠžΠ‘Π ΠΠ—ΠžΠ’ΠΠΠ˜Π― И ΠΠΠ£ΠšΠ˜ Π ΠžΠ‘Π‘Π˜Π™Π‘ΠšΠžΠ™ Π€Π•Π”Π•Π ΠΠ¦Π˜Π˜ Ρ„Π΅Π΄Π΅Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ государствСнноС Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π½ΠΎΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΡ‡Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ образования

«ΠœΠΎΡΠΊΠΎΠ²ΡΠΊΠΈΠΉ государствСнный Ρ‚Π΅ΠΊΡΡ‚ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ унивСрситСт ΠΈΠΌΠ΅Π½ΠΈ А.Н. ΠšΠΎΡΡ‹Π³ΠΈΠ½Π°»

ΠšΠ°Ρ„Π΅Π΄Ρ€Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈ ΡΠΈΡΡ‚Π΅ΠΌ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ проСктирования ΠžΡ‚Ρ‡Π΅Ρ‚ ΠΏΠΎ ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΠΎ Π΄ΠΈΡΡ†ΠΈΠΏΠ»ΠΈΠ½Π΅ «Π“СомСтричСскоС ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ БАПР»

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»: Π’ΠΎΡ€ΠΎΠΆΠ±ΠΈΡ‚ΠΎΠ² А. П. Π³Ρ€. 45Ρ‚-10

ΠŸΡ€ΠΈΠ½ΡΠ»: БСспалов М.Π•.

Москва 2012

1. ОписаниС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области

1.1 ΠžΠ±Ρ‰ΠΈΠ΅ понятия ΠΎ Π³ΠΈΡ€ΠΎΡΠΊΠΎΠΏΠ°Ρ…

1.2 ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ гироскопов

1.3 ΠœΠ΅Ρ…Π°Π½ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ гироскопы

1.4 Бвойства трСхстСпСнного Ρ€ΠΎΡ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ гироскопа

1.5 ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅

2. ОписаниС срСдств Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

2.1 ΠžΠ±Ρ‰ΠΈΠ΅ свСдСния

2.2 Набор Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ TaoFramework

2.3 Π‘Ρ€Π΅Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ SharpDevelop

3. ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

4. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

4.1 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ настройка срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

4.2 ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ настройка Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

4.3 Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ Glut

4.4 ΠžΠ±Ρ‰ΠΈΠ΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

4.5 ОписаниС гСомСтричСской ΠΌΠΎΠ΄Π΅Π»ΠΈ

4.6 ОписаниС ΠΌΠΎΠ΄Π΅Π»ΠΈ срСдствами OpenGL

4.7 РСализация управлСния модСлью Π’Ρ‹Π²ΠΎΠ΄Ρ‹ Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… источников ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

1. ОписаниС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области

1.1 ΠžΠ±Ρ‰ΠΈΠ΅ понятия ΠΎ Π³ΠΈΡ€ΠΎΡΠΊΠΎΠΏΠ°Ρ… Гироскоп — устройство, способноС Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡƒΠ³Π»ΠΎΠ² ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Ρ‚Π΅Π»Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΎ установлСно, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ½Π΅Ρ€Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ пространства. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ гироскопа — юла (Π²ΠΎΠ»Ρ‡ΠΎΠΊ).

Π’Π΅Ρ€ΠΌΠΈΠ½ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π²Π²Π΅Π΄Π΅Π½ Π–Π°Π½ΠΎΠΌ (Π‘Π΅Ρ€Π½Π°Ρ€ΠΎΠΌ Π›Π΅ΠΎΠ½ΠΎΠΌ) Π€ΡƒΠΊΠΎ Π² Π΅Π³ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π΅ Π² 1852 Π³ΠΎΠ΄Ρƒ Ѐранцузской АкадСмии Наук. Π”ΠΎΠΊΠ»Π°Π΄ Π±Ρ‹Π» посвящён способам ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ обнаруТСния вращСния Π—Π΅ΠΌΠ»ΠΈ Π² ΠΈΠ½Π΅Ρ€Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ пространствС. Π­Ρ‚ΠΈΠΌ ΠΈ ΠΎΠ±ΡƒΡΠ»ΠΎΠ²Π»Π΅Π½ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ «Π³ΠΈΡ€ΠΎΡΠΊΠΎΠΏ» (ΠΎΡ‚ Π΄Ρ€.-Π³Ρ€Π΅Ρ‡. Π³? спт «ΠΊΡ€ΡƒΠ³» ΠΈ ΡƒΠΊΠΏΡ€Π­Ρ‰ «ΡΠΌΠΎΡ‚Ρ€ΡŽ»).

Π”ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Сния гироскопа чСловСчСство использовало Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ опрСдСлСния направлСния Π² ΠΏΡ€ΠΎΡΡ‚ранствС. Π˜Π·Π΄Ρ€Π΅Π²Π»Π΅ люди ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΌ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°ΠΌ, Π² Ρ‡Π°ΡΡ‚ности, ΠΏΠΎ Π‘ΠΎΠ»Π½Ρ†Ρƒ. Π£ΠΆΠ΅ Π² Π΄Ρ€Π΅Π²Π½ΠΎΡΡ‚ΠΈ появились ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΏΡ€ΠΈΠ±ΠΎΡ€Ρ‹: отвСс ΠΈ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, основанныС Π½Π° Π³Ρ€Π°Π²ΠΈΡ‚Π°Ρ†ΠΈΠΈ. Π’ ΡΡ€Π΅Π΄Π½ΠΈΠ΅ Π²Π΅ΠΊΠ° Π² ΠšΠΈΡ‚Π°Π΅ Π±Ρ‹Π» ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Ρ‘Π½ компас, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ°Π³Π½Π΅Ρ‚ΠΈΠ·ΠΌ Π—Π΅ΠΌΠ»ΠΈ. Π’ Π•Π²Ρ€ΠΎΠΏΠ΅ Π±Ρ‹Π»ΠΈ созданы астролябия ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠ±ΠΎΡ€Ρ‹, основанныС Π½Π° ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π·Π²Ρ‘Π·Π΄.

Гироскоп ΠΈΠ·ΠΎΠ±Ρ€Ρ‘Π» Иоганн Π‘ΠΎΠ½Π΅Π½Π±Π΅Ρ€Π³Π΅Ρ€ ΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» описаниС своСго изобрСтСния Π² 1817 Π³ΠΎΠ΄Ρƒ. Однако французский ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊ ΠŸΡƒΠ°ΡΡΠΎΠ½ Π΅Ρ‰Ρ‘ Π² 1813 Π³ΠΎΠ΄Ρƒ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Π‘ΠΎΠ½Π΅Π½Π±Π΅Ρ€Π³Π΅Ρ€Π° ΠΊΠ°ΠΊ изобрСтатСля этого устройства. Π“Π»Π°Π²Π½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ гироскопа Π‘ΠΎΠ½Π΅Π½Π±Π΅Ρ€Π³Π΅Ρ€Π° Π±Ρ‹Π» Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉΡΡ массивный ΡˆΠ°Ρ€ Π² ΠΊΠ°Ρ€Π΄Π°Π½ΠΎΠ²ΠΎΠΌ подвСсС. Π’ 1832 Π³ΠΎΠ΄Ρƒ Π°ΠΌΠ΅Ρ€ΠΈΠΊΠ°Π½Π΅Ρ† Π£ΠΎΠ»Ρ‚Π΅Ρ€ Π . ДТонсон ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π» гироскоп с Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΌΡΡ диском. Ѐранцузский ΡƒΡ‡Ρ‘Π½Ρ‹ΠΉ Лаплас Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» это устройство Π² ΡƒΡ‡Π΅Π±Π½Ρ‹Ρ… цСлях. Π’ 1852 Π³ΠΎΠ΄Ρƒ французский ΡƒΡ‡Ρ‘Π½Ρ‹ΠΉ Π€ΡƒΠΊΠΎ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π» гироскоп ΠΈ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ использовал Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ±ΠΎΡ€, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ направлСния (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС — Π—Π΅ΠΌΠ»ΠΈ), Ρ‡Π΅Ρ€Π΅Π· Π³ΠΎΠ΄ послС изобрСтСния маятника Π€ΡƒΠΊΠΎ, Ρ‚ΠΎΠΆΠ΅ основанного Π½Π° ΡΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠΈ Π²Ρ€Π°Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°. ИмСнно Π€ΡƒΠΊΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π» Π½Π°Π·Π²Π°Π½ΠΈΠ΅ «Π³ΠΈΡ€ΠΎΡΠΊΠΎΠΏ». Π€ΡƒΠΊΠΎ, ΠΊΠ°ΠΊ ΠΈ Π‘ΠΎΠ½Π΅Π½Π±Π΅Ρ€Π³Π΅Ρ€, использовал ΠΊΠ°Ρ€Π΄Π°Π½ΠΎΠ² подвСс. НС ΠΏΠΎΠ·ΠΆΠ΅ 1853 Π³ΠΎΠ΄Π° ЀСссСль ΠΈΠ·ΠΎΠ±Ρ€Ρ‘Π» Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ подвСски гироскопа.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠΌ гироскопа ΠΏΠ΅Ρ€Π΅Π΄ Π±ΠΎΠ»Π΅Π΅ Π΄Ρ€Π΅Π²Π½ΠΈΠΌΠΈ ΠΏΡ€ΠΈΠ±ΠΎΡ€Π°ΠΌΠΈ являлось Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π» Π² ΡΠ»ΠΎΠΆΠ½Ρ‹Ρ… условиях (плохая Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ, тряска, элСктромагнитныС ΠΏΠΎΠΌΠ΅Ρ…ΠΈ). Однако Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ гироскопа быстро замСдлялось ΠΈΠ·-Π·Π° трСния.

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ XIX Π²Π΅ΠΊΠ° Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅ΠΊΡ‚Ρ€ΠΎΠ΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΡŒ для Ρ€Π°Π·Π³ΠΎΠ½Π° ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΡ вращСния гироскопа. Π’ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ гироскоп Π±Ρ‹Π» ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½ Π² 1880-Ρ… Π³ΠΎΠ΄Π°Ρ… ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠΌ ΠžΠ±Ρ€ΠΈ для стабилизации курса Ρ‚ΠΎΡ€ΠΏΠ΅Π΄Ρ‹. Π’ XX Π²Π΅ΠΊΠ΅ гироскопы стали ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΡΠ°ΠΌΠΎΠ»Ρ‘Ρ‚Π°Ρ…, Ρ€Π°ΠΊΠ΅Ρ‚Π°Ρ… ΠΈ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Ρ… Π»ΠΎΠ΄ΠΊΠ°Ρ… вмСсто компаса ΠΈΠ»ΠΈ совмСстно с Π½ΠΈΠΌ.

1.2 ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ гироскопов ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ гироскопов ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Ρƒ стСпСнСй свободы:

Β· двухстСпСнныС

Β· трСхстСпСнныС.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° гироскопов ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ дСйствия:

Β· мСханичСскиС гироскопы,

Β· оптичСскиС гироскопы.

1.3 ΠœΠ΅Ρ…Π°Π½ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ гироскопы Π‘Ρ€Π΅Π΄ΠΈ мСханичСских гироскопов выдСляСтся Ρ€ΠΎΡ‚ΠΎΡ€Π½Ρ‹ΠΉ гироскоп — быстро Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π΅ΡΡ Ρ‚Π²Ρ‘Ρ€Π΄ΠΎΠ΅ Ρ‚Π΅Π»ΠΎ (Ρ€ΠΎΡ‚ΠΎΡ€), ось вращСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ свободно ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Π² ΠΏΡ€ΠΎΡΡ‚ранствС. ΠŸΡ€ΠΈ этом ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ вращСния гироскопа Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° оси Π΅Π³ΠΎ вращСния. ОсновноС свойство Ρ‚Π°ΠΊΠΎΠ³ΠΎ гироскопа — ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΡΡ‚ранствС Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ оси вращСния ΠΏΡ€ΠΈ отсутствии воздСйствия Π½Π° Π½Π΅Π³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² Π²Π½Π΅ΡˆΠ½ΠΈΡ… сил ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΡΠΎΠΏΡ€ΠΎΡ‚ΠΈΠ²Π»ΡΡ‚ΡŒΡΡ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² сил. Π­Ρ‚ΠΎ свойство Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни опрСдСляСтся Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ΡƒΠ³Π»ΠΎΠ²ΠΎΠΉ скорости собствСнного вращСния гироскопа.

Π’ΠΏΠ΅Ρ€Π²Ρ‹Π΅ это свойство использовал Π€ΡƒΠΊΠΎ Π² 1852 Π³. Π΄Π»Ρ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ дСмонстрации вращСния Π—Π΅ΠΌΠ»ΠΈ. ИмСнно благодаря этой дСмонстрации гироскоп ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» своё Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΡ‚ Π³Ρ€Π΅Ρ‡Π΅ΡΠΊΠΈΡ… слов «Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅», «Π½Π°Π±Π»ΡŽΠ΄Π°ΡŽ».

1.4 Бвойства трСхстСпСнного Ρ€ΠΎΡ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ гироскопа ΠŸΡ€ΠΈ воздСйствии ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° внСшнСй силы Π²ΠΎΠΊΡ€ΡƒΠ³ оси, пСрпСндикулярной оси вращСния Ρ€ΠΎΡ‚ΠΎΡ€Π°, гироскоп Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π²ΠΎΠΊΡ€ΡƒΠ³ оси прСцСссии, которая пСрпСндикулярна ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Π²Π½Π΅ΡˆΠ½ΠΈΡ… сил.

Π­Ρ‚ΠΎ свойство обусловлСно Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ кориолисовой силы. Π’Π°ΠΊ, ΠΏΡ€ΠΈ воздСйствии ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° внСшнСй силы гироскоп ΠΏΠΎΠ½Π°Ρ‡Π°Π»Ρƒ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ дСйствия внСшнСго ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° (Π½ΡƒΡ‚Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ бросок). КаТдая частица гироскопа Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ с ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠ½ΠΎΠΉ ΡƒΠ³Π»ΠΎΠ²ΠΎΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ вращСния вслСдствиС дСйствия этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°. Но Ρ€ΠΎΡ‚ΠΎΡ€ гироскопа, ΠΏΠΎΠΌΠΈΠΌΠΎ этого, ΠΈ ΡΠ°ΠΌ вращаСтся, поэтому каТдая частица Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ кориолисова сила, которая заставляСт гироскоп Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ Π² ΠΏΠ΅Ρ€ΠΏΠ΅Π½Π΄ΠΈΠΊΡƒΠ»ΡΡ€Π½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌΡƒ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€Π΅Ρ†Π΅ΡΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΡ€Π΅Ρ†Π΅ΡΡΠΈΡ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ кориолисову силу, ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ скомпСнсируСт ΠΌΠΎΠΌΠ΅Π½Ρ‚ внСшнСй силы (гироскопичСский ΠΌΠΎΠΌΠ΅Π½Ρ‚).

ГироскопичСский эффСкт Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΡ…ΡΡ Ρ‚Π΅Π» Π΅ΡΡ‚ΡŒ проявлСниС ΠΊΠΎΡ€Π΅Π½Π½ΠΎΠ³ΠΎ свойства ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠΈ — Π΅Ρ‘ ΠΈΠ½Π΅Ρ€Ρ†ΠΈΠΎΠ½Π½ΠΎΡΡ‚ΠΈ.

1.5 ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Бвойства гироскопа ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΈΠ±ΠΎΡ€Π°Ρ… — гироскопах, основной Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… являСтся быстро Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉΡΡ Ρ€ΠΎΡ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько стСпСнСй свободы (осСй Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ вращСния).

Π§Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ гироскопы, ΠΏΠΎΠΌΠ΅Ρ‰Ρ‘Π½Π½Ρ‹Π΅ Π² ΠΊΠ°Ρ€Π΄Π°Π½ΠΎΠ² подвСс. Π’Π°ΠΊΠΈΠ΅ гироскопы ΠΈΠΌΠ΅ΡŽΡ‚ 3 стСпСни свободы, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ 3 нСзависимых ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π²ΠΎΠΊΡ€ΡƒΠ³ осСй АА', BB' ΠΈ CC', ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΡ…ΡΡ Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ подвСса О, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ остаётся ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΡŽ A Π½Π΅ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Ρ‹ΠΌ.

Гироскопы, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ†Π΅Π½Ρ‚Ρ€ масс совпадаСт с Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΌ подвСса O, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ астатичСскими, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС — статичСскими гироскопами.

Для обСспСчСния вращСния Ρ€ΠΎΡ‚ΠΎΡ€Π° гироскопа с Π²Ρ‹ΡΠΎΠΊΠΎΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π³ΠΈΡ€ΠΎΠΌΠΎΡ‚ΠΎΡ€Ρ‹.

Для управлСния гироскопом ΠΈ ΡΠ½ΡΡ‚ия с Π½Π΅Π³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΈ ΡƒΠ³Π»Π° ΠΈ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°.

Гироскопы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΊΠ°ΠΊ Π² ΡΠΈΡΡ‚Π΅ΠΌΠ°Ρ… Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ (Π°Π²ΠΈΠ°Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚, гирокомпас, ИНБ ΠΈ Ρ‚. ΠΏ.), Ρ‚Π°ΠΊ ΠΈ Π² ΡΠΈΡΡ‚Π΅ΠΌΠ°Ρ… ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΠΈΠ·Π°Ρ†ΠΈΠΈ космичСских Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΠΎΠ².

ΠŸΡ€ΠΈ использовании Π² Π³ΠΈΡ€ΠΎΠ²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ показания гироскопа Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ аксСлСромСтром (маятником), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ·-Π·Π° суточного вращСния Π·Π΅ΠΌΠ»ΠΈ ΠΈ ΡƒΡ…ΠΎΠ΄Π° гироскопа, происходит ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΠΎΡ‚ ΠΈΡΡ‚ΠΈΠ½ΠΎΠΉ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΌΠ΅Ρ…аничСских гироскопах ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ смСщСниС Π΅Π³ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π° масс, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ эквивалСнтно нСпосрСдствСнному Π²ΠΎΠ·Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ маятника Π½Π° Π³ΠΈΡ€ΠΎΡΠΊΠΎΠΏ.

Π—Π°Π΄Π°Ρ‡Π΅ΠΉ Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ стоит Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ гСомСтричСской ΠΌΠΎΠ΄Π΅Π»ΠΈ трСхстСпСнного мСханичСского Ρ€ΠΎΡ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ гироскопа Π€ΡƒΠΊΠΎ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΈΠ΄Π΅Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ.

2. ОписаниС срСдств Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

2.1 ΠžΠ±Ρ‰ΠΈΠ΅ свСдСния Для выполнСния поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ срСдств Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±Ρ‹Π»ΠΈ Π²Ρ‹Π±Ρ€Π°Π½Ρ‹ SharpDevelop 3.0 ΠΈ TaoFramework 2.1.0.

Π”Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ обусловлСн Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ эти ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ бСсплатны, находятся Π² ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΌ доступС, достаточно популярны ΠΈ Π΄Π»Ρ своСго примСнСния Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… рСсурсов Π­Π’Πœ.

2.2 Набор Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ TaoFramework

Tao Framework — это Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ.NET ΠΈ Mono доступ ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ям популярных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π²Ρ€ΠΎΠ΄Π΅ OpenGL ΠΈ SDL. Π’ Π΅Π΅ ΡΠΎΡΡ‚Π°Π² входят:

Β· OpenGL 2.1.0.12

Β· Lua 5.1.3.0

Β· OpenAL 1.1.0.1

Β· PhysFS 1.0.1.2

Β· FreeGLUT 2.4.0.2

Β· SDL 1.2.13.0

Β· GLFW 2.6.0.0

Β· ODE 0.9.0.0

Β· Cg 2.0.0.0

Β· DevIL 1.6.8.3

Β· FreeType 2.3.5.0

Β· FFmpeg 0.4.9.0

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² Windows сущСствуСт Π΄Π²Π° стандарта для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚Ρ€Ρ‘Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ: OpenGL, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ стандартом Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ для всСх графичСских Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… станций, ΠΈ Direct3D — стандарт, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ„ΠΈΡ€ΠΌΠΎΠΉ Microsoft. Π”Π°Π»Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ стандарт OpenGL

БущСствСнным достоинством OpenGL являСтся Π΅Π³ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠ°Ρ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½Π΅Π½Π½ΠΎΡΡ‚ΡŒ — ΠΎΠ½ ΡΠ²Π»ΡΠ΅Ρ‚ся стандартом Π² ΠΌΠΈΡ€Π΅ графичСских Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… станций Ρ‚ΠΈΠΏΠ° Sun, Silicon Graphics ΠΈ Π΄Ρ€. Π’ ΠΎΡΠ½ΠΎΠ²Ρƒ стандарта Π±Ρ‹Π»Π° ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° IRIS GL, разработанная Ρ„ΠΈΡ€ΠΌΠΎΠΉ Silicon Graphics Inc.

OpenGL прСдставляСт собой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс ΠΊ Π³Ρ€Π°Ρ„ичСскому ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΡŽ (хотя ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Ρ‡ΠΈΡΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ OpenGL). Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ насчитываСт ΠΎΠΊΠΎΠ»ΠΎ 120 Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ программист ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для задания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ Π½ΠΈΠΌΠΈ (Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для написания ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚Ρ€Ρ‘Ρ…ΠΌΠ΅Ρ€Π½Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ).

OpenGL Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΊΠ°ΠΊ эффСктивный, Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎ-нСзависимый интСрфСйс, ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ΠΉ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ OpenGL Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠΊΠ½Π°ΠΌΠΈ ΠΈΠ»ΠΈ Π²Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Сля.

OpenGL позволяСт:

1. Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ· Π³Π΅ΠΎΠΌΠ΅Ρ‚ричСских ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² (Ρ‚ΠΎΡ‡ΠΊΠΈ, Π»ΠΈΠ½ΠΈΠΈ, Π³Ρ€Π°Π½ΠΈ ΠΈ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ изобраТСния).

2. Π Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Ρ‚Ρ€Ρ‘Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΌ пространствС ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ способ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ проСцирования.

3. Π’Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π¦Π²Π΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ явно Π·Π°Π΄Π°Π½, Ρ‚Π°ΠΊ ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒΡΡ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ источников свСта, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² освСщСния, тСкстур.

4. ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ матСматичСскоС описаниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ с Π½ΠΈΠΌΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ†Π²Π΅Ρ‚Π΅ Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΊΡ€Π°Π½Π΅.

ΠŸΡ€ΠΈ этом OpenGL ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ… Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² изобраТСния.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ OpenGL Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΊΠ°ΠΊ модСль ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ выступаСт Π² Ρ€ΠΎΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° — ΠΎΠ½ΠΎ Π²Ρ‹Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π° ΡΠ΅Ρ€Π²Π΅Ρ€ OpenGL ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ ΠΈΡ…. Π‘Π°ΠΌ сСрвСр ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, Ρ‚Π°ΠΊ ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ, ΠΏΠΎΠΌΠΈΠΌΠΎ OpenGL, Π² Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ являСтся FreeGLUT.

OpenGL Utility Toolkit (GLUT) — Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ΄ OpenGL, которая Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΡΠΈΡΡ‚Π΅ΠΌΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой. Из Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ привСсти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: созданиС ΠΎΠΊΠ½Π°, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠΊΠ½ΠΎΠΌ, ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π·Π° Π²Π²ΠΎΠ΄ΠΎΠΌ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΠΉ ΠΌΡ‹ΡˆΠΈ. Она Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для рисования ряда гСомСтричСских ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ²: ΠΊΡƒΠ±, сфСра, Ρ‡Π°ΠΉΠ½ΠΈΠΊ. GLUT Π΄Π°ΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания нСслоТных Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… мСню.

GLUT Π±Ρ‹Π» создан ΠœΠ°Ρ€ΠΊΠΎΠΌ ΠšΠΈΠ»Π³Π°Ρ€Π΄ΠΎΠΌ (Mark Kilgard), Π²ΠΎ Π²Ρ€Π΅ΠΌΡ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Silicon Graphics Inc.

ИспользованиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ GLUT прСслСдуСт Π΄Π²Π΅ Ρ†Π΅Π»ΠΈ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, это созданиС кроссплатформСнного ΠΊΠΎΠ΄Π°. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, GLUT позволяСт ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ OpenGL. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ OpenGL, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ GLUT, трСбуСтся всСго страница ΠΊΠΎΠ΄Π°. НаписаниС Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… Π²Π΅Ρ‰Π΅ΠΉ Π½Π° API Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ нСсколько страниц, написанных со Π·Π½Π°Π½ΠΈΠ΅ΠΌ API управлСния ΠΎΠΊΠ½Π°ΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы.

2.3 Π‘Ρ€Π΅Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ SharpDevelop

SharpDevelop (сокращСнно #Develop) свободная срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ для языков Π³Ρ€ΡƒΠΏΠΏΡ‹ Microsoft NET (C#, F#, Visual Basic.NET, Boo). ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ собой ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ собствСнныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΠ΅Ρ‚ с ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΉ срСдой.NET Ρ‡Π΅Ρ€Π΅Π· COM Interop.

ВозмоТности ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ:

Β· Написана ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π° C#

Β· ΠŸΠΎΠ΄ΡΠ²Π΅Ρ‚ΠΊΠ° синтаксиса для C#, IronPython, HTML, ASP, ASP.NET, VBScript, VB.NET, XML, XAML

Β· Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ для Ρ„ΠΎΡ€ΠΌ WinForms (COM-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ся)

Β· Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° NUnit, MbUnit ΠΈ NCover

Β· Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° сборок FxCop

Β· Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ

Β· Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° SVN

Β· ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° ΠΌΠ΅ΠΆΠ΄Ρƒ языками C#, VB.NET, IronPython ΠΈ Boo

Β· ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π²

Β· Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ внСшними инструмСнтами

Β· Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Add-Ins

Β· Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ трСбуСтся Microsoft.NET Framework 3.5 + Service Pack 1

Β· Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² F# трСбуСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ΅ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… срСдств ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ для запуска Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈ Π³Ρ€Π°Ρ„ичСских мощностСй.

3. ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° гироскоп Ρ„ΡƒΠΊΠΎ opengl

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ «Π“ироскоп Π€ΡƒΠΊΠΎ» состоит ΠΈΠ·:

Β· исполняСмого Ρ„Π°ΠΉΠ»Π° gyroscope. exe

Β· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° dll Tao. OpenGL, Tao. FreeGlut, Tao.Platform.Windows

Β· ΠΈΠΊΠΎΠ½ΠΊΠΈ прилоТСния icon. ico

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ Π² Π²ΠΈΠ΄Π΅ установочного Ρ„Π°ΠΉΠ»Π° сторонними срСдствами

(Smart Install Maker) для удобства установки. ПослС установки ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Π½Π° Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ столС создаСтся ярлык для быстрого запуска прилоТСния. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ устанавливаСтся Π² ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ Program Files.

4. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

4.1 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ настройка срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ПослС установки срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ SharpDevelop ΠΈ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ TaoFramework Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ C: Programm FilesTaoFrameworklib Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ C: WindowsSystem32.

Π”Π°Π»Π΅Π΅ создаСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ (Solution) Π² SharpDevelop, ΠΏΡƒΡ‚Π΅ΠΌ прохоТдСния Ρ‡Π΅Ρ€Π΅Π· Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ основного мСню File -> New -> Solution. ПослС задания ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π²Ρ‹Π±ΠΎΡ€Π° Ρ‚ΠΈΠΏΠ° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΈΡ… Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ объявлСния Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π² ΠΌΠ΅Π½ΡŽ Project -> Add Reference. ПослС Π²Ρ‹Π±ΠΎΡ€Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 3, ΠΈΡ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ производится ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ using. Π”Π°Π½Π½Ρ‹Π΅ дСйствия описаны Π² Π›ΠΈΡΡ‚ΠΈΠ½Π³Π΅ № 1. (Π’Π°ΠΊ ΠΆΠ΅ Π΄Π°Π»Π΅Π΅ Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ описания Π±ΡƒΠ΄ΡƒΡ‚ прСдставлСны Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΏΠΎΠ»Π½Ρ‹ΠΉ листинг Π±ΡƒΠ΄Π΅Ρ‚ прСдставлСн Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ А).

using Tao. FreeGlut;

using Tao. OpenGl;

using Tao.Platform.Windows;

Листинг 1. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

4.2 ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ настройка Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Для отобраТСния ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ элСмСнт, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ OpenGL смогли Π±Ρ‹ вывСсти ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ пространство прилоТСния (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Ρ„ΠΎΡ€ΠΌΡƒ). Для этого Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Tao.Platform.Windows сущСствуСт Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ simpleOpenGLControl. НСобходимо Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈ Π² ΠΏΠ°Π½Π΅Π»ΠΈ свойств ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ свойству Dock Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Fill, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ занял всС свободноС пространство Ρ„ΠΎΡ€ΠΌΡ‹. Π­Ρ‚ΠΈΠΌ дСйствиСм задаСтся Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ пространство отобраТСния ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ.

Π’ ΠΎΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ имя AnT.

4.3 Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ Glut

Для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° отобраТСния simpleOpenGLControl ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° <�имя ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°>.InitializeContexts (). Данная ΠΊΠΎΠΌΠ°Π½Π΄Π° располагаСтся Π² ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅ класса Ρ„ΠΎΡ€ΠΌΡ‹, ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° нСпосрСдствСнно послС запуска прилоТСния.

public MainForm ()

{

InitializeComponent ();

AnT.InitializeContexts ();

}

Листинг 2. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Ρ„ΠΎΡ€ΠΌΡ‹ ПослС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сам Glut. ВыполняСтся это ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ glutInit (). Π’Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π²Ρ‹Π²ΠΎΠ΄Π° срСдствами Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Ρ†Π²Π΅Ρ‚ очистки ΠΎΠΊΠ½Π°.

Glut.glutInit ();

Glut.glutInitDisplayMode (Glut.GLUT_RGB | Glut. GLUT_DOUBLE | Glut. GLUT_DEPTH);

Gl.glClearColor (0, 0, 0, 1);

Листинг 3. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Glut ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ настройка Π²Ρ‹Π²ΠΎΠ΄Π°

Π’ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ GLUT_RGB ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€Π΅ΠΆΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠ² RGB (ΠΎΡ‚ Red, Green, Blue — красный, Π·Π΅Π»Π΅Π½Ρ‹ΠΉ, синий; ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ Ρ†Π²Π΅Ρ‚Π°), GLUT_DOUBLE ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ использованиС Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ GLUT_DEPTH использованиС Π±ΡƒΡ„Π΅Ρ€Π° Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ (Z-Π±ΡƒΡ„Π΅Ρ€).

Команда glClearColor ΠΈΠΌΠ΅Π΅Ρ‚ 4 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: ΠΏΠΎΠ»Π½ΠΎΡ‚Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² цвСтности: красного, Π·Π΅Π»Π΅Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΈΠ½Π΅Π³ΠΎ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ прозрачности, Π³Π΄Π΅ 1 Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ, Π° 0 полная ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π² Glut, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° инициализация освСщСния сцСна, настройка Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Ρ‚Π°ΠΊΠΆΠ΅ тСст Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ†Π²Π΅Ρ‚Π° ΠΏΡ€ΠΈ освСщСнии.

Gl.glEnable (Gl.GL_DEPTH_TEST);

Gl.glEnable (Gl.GL_LIGHTING);

Gl.glEnable (Gl.GL_LIGHT1);

float[] bluish = { 1f, 1f, 1f, 0.1f };

Gl.glLightfv (Gl.GL_LIGHT1, Gl. GL_DIFFUSE, bluish);

Gl.glLightfv (Gl.GL_LIGHT1, Gl. GL_SPECULAR, bluish);

Gl.glLightModeli (Gl.GL_LIGHT_MODEL_COLOR_CONTROL, Gl. GL_SEPARATE_SPECULAR_COLOR);

Листинг 4. Настройка освСщСния ΠΈ Ρ‚Сст Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ Командой glEnable Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ использованиС ΠΊΠ°ΠΊΠΎΠ³ΠΎ Π»ΠΈΠ±ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ GL_DEPTH_TEST — тСст Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹, GL_LIGHTING — использованиС источников свСта, GL_LIGHT1 — ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ источником свСта ΠΏΠΎΠ΄ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ «1». Команда glLightfv осущСствляСт ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ источником свСта, Π³Π΄Π΅ GL_LIGHT1 — источник свСта, GL_DIFFUSE — ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° Ρ†Π²Π΅Ρ‚ источника свСта;GL_SPECULAR — Π·Π° ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΉ свСт, Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΈΠ΄Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС массив с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ свСта ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ bluish. Π¦Π²Π΅Ρ‚ источника свСта ΠΈ ΡΠ²Π΅Ρ‚Π° отраТСния — Π±Π΅Π»Ρ‹ΠΉ. ПослС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° настройка ΠΌΠΎΠ΄Π΅Π»ΠΈ освСщСния. Команда glLightModel ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π²Ρ‹Π±ΠΎΡ€ ΠΌΠΎΠ΄Π΅Π»ΠΈ освСщСния, Π³Π΄Π΅ GL_LIGHT_MODEL_COLOR_CONTROL — Ρ€Π΅ΠΆΠΈΠΌ вычислСниС Π·Π΅Ρ€ΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈ Π΄ΠΈΡ„Ρ„ΡƒΠ·Π½ΠΎΠ³ΠΎ, GL_SEPARATE_SPECULAR_COLOR — ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π°, состоящСго ΠΈΠ· ΡΡƒΠΌΠΌΡ‹ всСх Π·Π΅Ρ€ΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π²ΠΊΠ»Π°Π΄ΠΎΠ² всСх источников свСта. Вакая модСль освСщСния обСспСчит Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΡΡ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ.

4.4 ΠžΠ±Ρ‰ΠΈΠ΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ вызываСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ отрисовкС ΠΊΠ°Π΄Ρ€Π° динамичСской сцСны, срСдствами ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈΠ»ΠΈ срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС функция вызываСтся срСдствами срСды, Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Timer.

Она состоит ΠΈΠ·:

Β· описания ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‡Π΅Ρ€Π΅Π· Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚

Β· описания пСрспСктивы

· описания модСли

Β· ΠΊΠΎΠΌΠ°Π½Π΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‡Π΅Ρ€Π΅Π· Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π·Π°Π΄Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ‹ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚.

Gl.glViewport (0, 0, AnT. Width, AnT. Height);

Gl.glMatrixMode (Gl.GL_PROJECTION);

Gl.glLoadIdentity ();

Glu.gluPerspective (45, (float)AnT.Width / (float)AnT.Height, 0.1, 200);

Gl.glMatrixMode (Gl.GL_MODELVIEW);

Gl.glLoadIdentity ();

Gl.glClear (Gl.GL_COLOR_BUFFER_BIT | Gl. GL_DEPTH_BUFFER_BIT);

Листинг 5. Настройка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ ΠΏΠ΅Ρ€ΡΠΏΠ΅ΠΊΡ‚ΠΈΠ²Ρ‹

Команда glViewport выполняСт ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ области Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π² Π»ΠΈΡΡ‚ΠΈΠ½Π³Π΅ 5 ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ‡Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° Π²Π΅ΡΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Ѐункция glMatrixMode ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ: Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π² Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС это GL_PROJECTION — ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΉ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ дСйствиСм очищаСтся ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ glLoadIdentity (функция замСняСт Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΡƒΡŽ). Π”Π°Π»Π΅Π΅ Π² Π»ΠΈΡΡ‚ΠΈΠ½Π³Π΅ устанавливаСтся Ρ‚ΠΈΠΏ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ gluPerspective. Ѐункция gluPerspective ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ GLU — OpenGL Utility Library (GLU). Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° являСтся надстройкой Π½Π°Π΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ OpenGL, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅ΠΉ ряд Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Она Ρ‚Π°ΠΊ ΠΆΠ΅ являСтся свободно-распространяСмой ΠΈ ΠΏΠΎΡΡ‚авляСтся вмСстС с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ OpenGL. Данная функция строит ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Ρƒ ΠΎΡ…Π²Π°Ρ‚Π° видимости, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° ΡƒΠ³Π»Π΅ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΡ…Π²Π°Ρ‚Π°, ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ сторон ΠΏΠΎΡ€Ρ‚Π° просмотра ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ΅ Π±Π»ΠΈΠΆΠ½Π΅ΠΉ ΠΈ Π΄Π°Π»ΡŒΠ½Π΅ΠΉ плоскости просмотра.

Рисунок 1. Π‘Ρ…Π΅ΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ пСрспСктивы OpenGL

ПослС опрСдСлСния ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ устанавливаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-видовая ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° GL_MODELVIEW ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ очищаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ glLoadIdentity. Когда вызываСтся функция Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ очистка ΠΎΠΊΠ½Π° (Ρ‚.ΠΊ. Π΄ΠΎ ΡΡ‚ΠΎΠ³ΠΎ ΡƒΠΆΠ΅ ΠΌΠΎΠ³ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Π΄Ρ€Π° — очистка экрана ΠΏΠ΅Ρ€Π΅Π΄ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΊΠ°Π΄Ρ€Π° — это стандартный ΠΌΠ΅Ρ‚ΠΎΠ΄). Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция glClear. Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, функция ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ значСния ΠΊΠ°ΠΊΠΈΡ… Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² Π΅ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ — Π² Π»ΠΈΡΡ‚ΠΈΠ½Π³Π΅ 5 это Π±ΡƒΡ„Π΅Ρ€ Ρ†Π²Π΅Ρ‚Π° ΠΈ Π±ΡƒΡ„Π΅Ρ€ Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹.

4.5 ОписаниС гСомСтричСской ΠΌΠΎΠ΄Π΅Π»ΠΈ МодСль трСхстСпСнного мСханичСского Ρ€ΠΎΡ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ гироскопа Π€ΡƒΠΊΠΎ состоит ΠΈΠ·:

Β· Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ Ρ€ΠΎΡ‚ΠΎΡ€Π° Π½Π° ΠΎΡΠΈ

Β· Π½Π΅ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½ΠΎΠΉ Ρ€Π°ΠΌΡ‹ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€ΠΎΡ‚ΠΎΡ€Π°

Β· Π΄Π²ΡƒΡ… ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Ρ‹Ρ… Ρ€Π°ΠΌ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€ΠΎΡ‚ΠΎΡ€Π° Π² Ρ€Π°Π·Π½Ρ‹Ρ… направлСниях Для наглядности Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹:

Β· Π΄Π²Π° балансира Π½Π° Ρ€ΠΎΡ‚ΠΎΡ€

Β· ΡƒΡ‚ΡΠΆΠ΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π½Π° Π²Π½Π΅ΡˆΠ½ΡŽΡŽ Ρ€Π°ΠΌΡƒ Балансиры Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ для наглядности вращСния Ρ€ΠΎΡ‚ΠΎΡ€Π°, ΡƒΡ‚ΡΠΆΠ΅Π»ΠΈΡ‚Π΅Π»ΡŒ для указания ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ гироскопа, плоскости крСплСния.

4.6 ОписаниС ΠΌΠΎΠ΄Π΅Π»ΠΈ срСдствами OpenGL

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΠ΄Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ зависят ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ…. Π’Π°ΠΊΠΈΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π·Π°Π²ΠΈΡΡΡ‚ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’Π°ΠΊΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ внутрСнняя Ρ€Π°ΠΌΠ° ΠΈ Ρ€ΠΎΡ‚ΠΎΡ€.

Glut.glutSolidTorus (1,12,64,64);

Листинг 6. ВнутрСнняя Ρ€Π°ΠΌΠ° Ѐункция glutSolidTorus ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ GLUT осущСствляСт рисованиС Ρ‚ΠΎΡ€Π° (ΠΊΠΎΠ»ΡŒΡ†ΠΎ с ΠΊΡ€ΡƒΠ³ΠΎΠ²Ρ‹ΠΌ сСчСниСм). Π—Π΄Π΅ΡΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ — радиус сСчСния Ρ‚ΠΎΡ€Π°, Π²Ρ‚ΠΎΡ€ΠΎΠΉ — радиус самого Ρ‚ΠΎΡ€Π°, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΈ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ — количСство Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ Ρ€Π°Π΄ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ сСктору ΠΈ Ρ‚ΠΎΡ€Ρƒ соотвСтствСнно. РазбиСния — Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ отрисовки Π½Π΅Π³Π»Π°Π΄ΠΊΠΈΡ… ΠΊΡ€ΠΈΠ²Ρ‹Ρ… Π½Π° ΡΠΊΡ€Π°Π½Π΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ пиксСлями Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ идСально Π³Π»Π°Π΄ΠΊΡƒΡŽ ΠΊΡ€ΠΈΠ²ΡƒΡŽ.

Π§Ρ‚ΠΎΠ±Ρ‹ модСль ΠΎΡ‚Ρ€Π°ΠΆΠ°Π»Π° свСт, Π° Π½Π΅ ΠΏΠΎΠ³Π»ΠΎΡ‰Π°Π»Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Π΅Π»Π° сСбя рСалистичнСС со ΡΠ²Π΅Ρ‚ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΠ΄Π°Ρ‚ΡŒ Π΅ΠΉ ΡΠ²ΠΎΠΉΡΡ‚Π²Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ Π΅ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ отраТСния ΠΈ Ρ€Π°ΡΡΠ΅ΠΈΠ²Π°Π½ΠΈΡ свСта.

float[] color = new float[4]{ 0.8f, 0.7f, 0f, 1};

float[] shininess = new float[1]{ 30 };

Gl.glMaterialfv (Gl.GL_FRONT, Gl. GL_DIFFUSE, color);

Gl.glMaterialfv (Gl.GL_FRONT, Gl. GL_SPECULAR, color);

Gl.glMaterialfv (Gl.GL_FRONT, Gl. GL_SHININESS, shininess);

Листинг 7. Бвойства ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π—Π΄Π΅ΡΡŒ Ρ€Π΅ΠΆΠΈΠΌ GL_FRONT Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ glMaterial ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ свойства ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈ. Π Π΅ΠΆΠΈΠΌ GL_DIFFUSE ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ рассСянный свСт, Ρ€Π΅ΠΆΠΈΠΌ GL_SPECULAR ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΉ свСт, Π° GL_SHININESS Π΅Π³ΠΎ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ. Π’Ρ€Π΅Ρ‚ΡŒΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ массивы Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ€ΠΎΡ‚ΠΎΡ€ ΠΈΠΌΠ΅Π΅Ρ‚ Π·ΠΎΠ»ΠΎΡ‚ΠΎΠ΅ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Gl.glRotatef (90,1,0,0);

Gl.glRotatef (rt,.0f,.0f, 1.0f);

Gl.glTranslated (0,0,-12);

Glut.glutSolidCylinder (0.8d, 24d, 64, 64);

Gl.glTranslated (0,0,11.5);

Glut.glutSolidCylinder (10d, 1d, 64, 64);

Gl.glTranslated (9,0d,-1);

Glut.glutSolidCylinder (1d, 1d, 64, 64);

Gl.glTranslated (-18,0,0); //пСрСнос

Glut.glutSolidCylinder (1d, 1d, 64, 64);

Gl.glTranslated (9,0,1.5);

Gl.glRotatef (-rt,.0f,.0f, 1.0f);

Листинг 8. Π ΠΎΡ‚ΠΎΡ€ ΠΈ Π΅Π³ΠΎ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Осью Ρ€ΠΎΡ‚ΠΎΡ€Π° являСтся Ρ†ΠΈΠ»ΠΈΠ½Π΄Ρ€. Ѐункция glutSolidCylinder позволяСт Π΅Π³ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ. Ѐункция ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: радиус, Π΄Π»ΠΈΠ½Π°, количСство Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠΉ вдоль ΠΈ Π²ΠΎΠΊΡ€ΡƒΠ³ оси Ρ†ΠΈΠ»ΠΈΠ½Π΄Ρ€Π°. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ·-Π·Π° особСнностСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Glut Ρ†ΠΈΠ»ΠΈΠ½Π΄Ρ€ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ располоТСн Π² ΠΏΡ€ΠΎΡΡ‚ранствС Π½Π΅ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ, Π° Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎ, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΉ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΈ ΠΎΡΡŒΡŽ Π½Π° ΠΎΡΠΈ Z, Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ. ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ΡΡ эти дСйствия функциями glRotate ΠΈ glTranslate. Ѐункция glTranslate ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ 3 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π² Ρ‚ΠΎΡ‡ΠΊΡƒ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ x, y, z ΡΠΎΠΎΡ‚вСтствСнно ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ. Ѐункция glRotate ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ 4 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… указываСтся Π½Π° ΠΊΠ°ΠΊΠΎΠΉ ΡƒΠ³ΠΎΠ», ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠ°ΠΊΠΈΡ… осСй Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚. Π’ Π»ΠΈΡΡ‚ΠΈΠ½Π³Π΅ 8 Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΏΠΎ ΠΎΡΠΈ x Π½Π° 90 градусов ΠΈ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡ ΠΏΠΎ ΠΎΡΠΈ z Π½Π° 12.

ΠŸΡ€ΠΈ построСнии слоТной ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ осущСствляСтся пСрСнос. ПослС выполнСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… построСний Π² ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ Ρ‚ΠΎΡ‡ΠΊΠ΅ послС пСрСноса автоматичСского Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π½Π΅ ΠΎΡΡƒΡ‰Π΅ΡΡ‚вляСтся.

Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ€ΠΎΡ‚ΠΎΡ€ являСтся Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅ΠΉΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ всС построСния вСдутся ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π° Ρ€ΠΎΡ‚ΠΎΡ€Π° (Ρ†Π΅Π½Ρ‚Ρ€Π° Π΅Π³ΠΎ оси ΠΈ Ρ†Π΅Π½Ρ‚Ρ€Π° диска). Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, послС ΠΊΠ°ΠΊΠΈΡ… Π»ΠΈΠ±ΠΎ пСрСносов, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π² Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ.

Для Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ вращСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ описания Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π·Π°Π΄Π°Π² Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΡƒΠ³Π»Π° ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ Π΅Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ вращСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π£Π΄ΠΎΠ±Π½Π΅Π΅ всСго ΠΊ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ отрисовкС сцСны.

Но Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ послС описания элСмСнта вращСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ элСмСнты, Π½Π΅ Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ΡΡ вмСстС с Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ послС описания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ вращСния. Π’Π°ΠΊ ΠΊΠ°ΠΊ общая сумма вращСния Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½Π° 0, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, описанныС Π½ΠΈΠΆΠ΅ останутся Π½Π΅ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Ρ‹.

ОписаниС внСшнСй Ρ€Π°ΠΌΡ‹ ΠΎΡ‚ ΡΡ€Π΅Π΄Π½Π΅ΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ отличаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ΠΌ утяТСлитСля.

Gl.glRotatef (-180,0,1,0);

Gl.glTranslated (0,0,-17);

Glut.glutSolidCylinder (0.5d, 2d, 64, 64);

Gl.glTranslated (0,0,17);

Gl.glRotatef (180,0,1,0);

Gl.glTranslated (0,0,-17);

Glut.glutSolidCylinder (0.5d, 2d, 64, 64);

Gl.glTranslated (0,0,17);

Gl.glRotatef (90,0,1,0);

Glut.glutSolidTorus (1,18,64,64);

Gl.glTranslated (0,-19,0);

Gl.glRotatef (-90,1,0,0);

Glut.glutSolidCylinder (6d, 3d, 64,64);

Gl.glRotatef (90,0,0,0);

Gl.glTranslated (0,19,0);

Gl.glRotatef (-90,0,1,0);

Листинг 9. ОписаниС внСшнСй Ρ€Π°ΠΌΡ‹

Особого внимания ΠΏΡ€ΠΈ описании Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°ΠΌΡ‹ ΠΈ ΠΎΡΠ΅ΠΉ Π΅Π΅ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΡ. Для обСспСчСния цСлостности ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΠΎΡ‚сутствия Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΎΠ², ΠΊΠ°ΠΊ ΠΈ Π² ΡΠ»ΡƒΡ‡Π°Π΅ с Ρ€ΠΎΡ‚ΠΎΡ€ΠΎΠΌ, оси Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Π΄Π²Π° сосСдниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π Π°ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ располоТСна пСрпСндикулярно ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ, оси закрСплСния Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ пСрпСндикулярны осям ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Ρ€Π°ΠΌΡ‹.

Π’Π°ΠΊ ΠΊΠ°ΠΊ эти Ρ€Π°ΠΌΡ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вращСния с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ модСль Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒ полоТСния Ρ€Π°ΠΌ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Оси Π² Π³ΠΈΡ€ΠΎΡΠΊΠΎΠΏΠ΅ располоТСны Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ вращая ΡΡ€Π΅Π΄Π½ΡŽΡŽ Ρ€Π°ΠΌΡƒ происходит Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… Ρ€Π°ΠΌ сразу — срСднСй ΠΈ Π²Π½Π΅ΡˆΠ½Π΅ΠΉ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ срСдняя Ρ€Π°ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ описана Ρ€Π°Π½ΡŒΡˆΠ΅ Ρ‡Π΅ΠΌ внСшняя, ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ срСднСй Ρ€Π°ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ оси, внСшняя Ρ€Π°ΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ сразу ΠΏΠΎ Π΄Π²ΡƒΠΌ.

Π’Π°ΠΊΠΆΠ΅, для обСспСчСния рассмотрСния сцСны с Ρ€Π°Π·Π½Ρ‹Ρ… ракурсов ΠΈ Ρ€Π°ΡΡΡ‚ояний Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ для сцСны Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ описаниСм всСх элСмСнтов) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вращСния ΠΈ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠ° с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ (листинг 10).

Gl.glTranslated (0,0,camdis);

Gl.glRotatef (ryt, 1.0f,.0f,.0f);

Gl.glRotatef (rxt, 0.0f, 1.0f,.0f)

Листинг 10. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ управлСния ΠΊΠ°ΠΌΠ΅Ρ€ΠΎΠΉ Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ описания, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ отрисовки Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ glFlush Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ пСрСрисовку ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π²Ρ‹Π²ΠΎΠ΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Invalidate ().

4.7 РСализация управлСния модСлью ИмСя модСль Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ срСдства ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Сю ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ. Рассматривая ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ управлСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ модСлями Π² ΠΏΡ€ΠΎΡΡ‚ранствС, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ являСтся ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΡ‹ΡˆΠΈ. ΠœΡ‹ΡˆΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ любоС Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ, ΠΈ Π±Ρ‹ΡΡ‚Ρ€ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² ΡΠ»ΡƒΡ‡Π°Π΅ Π½Π΅Π²Π΅Ρ€Π½Ρ‹Ρ… дСйствий. ΠšΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ ΠΌΡ‹ΡˆΠΈ Ρ‚Π°ΠΊΠΈΠΌΠΈ возмоТностями Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ слоТно ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ слоТноС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΡ… клавиш, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π·Π°Π΄Π°Π½ΠΈΡ Ρ‚Ρ€Π°Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ нСпосрСдствСнно Ρ€ΡƒΠΊΠΎΠΉ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ управлСния модСлью Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ являСтся ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΡ‹ΡˆΡŒΡŽ.

Однако, ΠΈ Π·Π΄Π΅ΡΡŒ Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· трудностСй. Описанная модСль ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π΄Π²Π° полюса управлСния (ΠΊΠ°ΠΌΠ΅Ρ€Π° ΠΈ ΠΎΡΠΈ), ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π΅ Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹Π΅, Π° Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Π΅. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ управлСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, Π² ΡΠΎΠΎΡ‚вСтствии с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅.

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π΅ основныС части, это:

Β· ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΌΠ΅Ρ€ΠΎΠΉ

Β· ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ€Π°ΠΌΠ°ΠΌΠΈ гироскопа Π’ΠΏΠΎΠ»Π½Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ эти Π΄Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΌΡ‹ΡˆΡŒΡŽ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π² ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ. Π’Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ модСль с Ρ€Π°Π·Π½ΠΎΠ³ΠΎ расстояния, ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΡ‹ΡˆΠΈ. Π’Π°ΠΊ ΠΆΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠΎΠ΄Π΅Π»ΡŒΡŽ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ.

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ΠΎΠΌ Ρ€Π°ΠΌ гироскопа, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ ΠΊΠ°ΠΌΠ΅Ρ€ΠΎΠΉ, ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши ΠΌΡ‹ΡˆΠΈ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΌΡ‹ΡˆΠΈ. Алгоритм, Π΄Π°ΡŽΡ‰ΠΈΠΉ Ρ‚Π°ΠΊΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, рСализуСтся Ρ‚Π°ΠΊ: запоминаСтся ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ курсора Π²ΠΎ Π²Ρ€Π΅ΠΌΡ наТатия клавиши, с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ происходят ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° отслСТивания ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ курсор смСщаСтся Π² Π·Π°ΠΏΠΎΠΌΠ½Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅), ΠΏΡ€ΠΈ смСщСнии ΠΌΡ‹ΡˆΠΈ Π² ΠΊΠ°ΠΊΠΎΠΌ Π»ΠΈΠ±ΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ значСния Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, которая даст Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΡ… ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ модСлью, курсор ΠΏΡ€ΠΈ этом скрываСтся; ΠΏΡ€ΠΈ отпускании клавиши Ρ†ΠΈΠΊΠ» ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ ΠΊΡƒΡ€ΡΠΎΡ€ появляСтся вновь.

Π”Π°Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ срСдства срСды, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ событий наТатия, пСрСмСщСния ΠΈ ΠΎΡ‚пускания ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€. Для вычислСния ΡƒΠ³Π»ΠΎΠ² смСщСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ класс расчСта.

class coord{private int xpos, ypos, xpos_n, ypos_n; float mdx, mdy;

public void set_coord (int xx, int yy){xpos=xx;ypos=yy;}

public void set_coordn (int xn, int yn){xpos_n=xn;ypos_n=yn;}

public float mx (){mdx=0.01f*(xpos_n-xpos);return mdx;}

public float my (){mdy=0.01f*(ypos_n-ypos);return mdy;}

public coord (){mdx=0;mdy=0;}

}

Листинг 11. Класс расчСта ΡƒΠ³Π»ΠΎΠ² ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π’ Π»ΠΈΡΡ‚ΠΈΠ½Π³Π΅ 11 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Ρ‚Π°ΠΊΠΎΠΉ класс. Π’ Π΄Π°Π½Π½ΠΎΠΌ классС ΠΈΠ· ΡΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π²ΠΎ Π²Ρ€Π΅ΠΌΡ смСщСния Π²Ρ‹Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ исходныС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹, соотвСтствСнноС Ссли число ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΠ·Π΅Π» поворачиваСтся Π² ΠΎΠ΄Π½Ρƒ сторону, Ссли ΠΆΠ΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΡƒΡŽ. Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ΅Π΅ΡΡ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° ΠΊΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚, зависящий ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ быстро Ρƒ Π²Π°Ρ происходят ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ считывания ΠΌΡ‹ΡˆΠΈ. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ значСния ΡƒΠ³Π»ΠΎΠ², Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ ΡƒΠ·Π΅Π».

ДСйствия, происходящиС ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ наТатия клавиши ΠΌΡ‹ΡˆΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² Π»ΠΈΡΡ‚ΠΈΠ½Π³Π΅ 12.

void AnTMouseDown (object sender, MouseEventArgs e)

{x=Cursor.Position.X;

y=Cursor.Position.Y;

if (e.Button == MouseButtons. Left) { Cursor. Hide ();}

if (e.Button == MouseButtons. Left){

if (raxis==false){cord.set_coord (Cursor.Position.X, Cursor.Position.Y);click=true;}

if (raxis==true) {cord_n.set_coord (Cursor.Position.X, Cursor.Position.Y);click=true; }}

if (e.Button==MouseButtons.Right) {ConMenu.Show (Cursor.Position.X, Cursor.Position.Y);}

Листинг 12. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° наТатия ΠΌΡ‹ΡˆΠΈ ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΌΡ‹ΡˆΡŒ опрСдСляСтся какая ΠΊΠ½ΠΎΠΏΠΊΠ° Π±Ρ‹Π»Π° Π½Π°ΠΆΠ°Ρ‚Π°. Если это лСвая ΠΊΠ½ΠΎΠΏΠΊΠ°, Ρ‚ΠΎ ΡΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ся курсор, Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «ΠΈΡΡ‚ΠΈΠ½Π°», ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π΅Π΅ ΡƒΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ. Π’Π°ΠΊΠΆΠ΅ Π² ΠΊΠ½ΠΎΠΏΠΊΠ΅ опрСдСляСтся ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ вСдСтся ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, ΠΈ ΡΠΎΠΎΡ‚вСтствСнно значСния Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… случаях Ρ€Π°Π·Π½Ρ‹ΠΌ экзСмплярам класса. НаТатиСм ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΡƒ вызовСтся контСкстноС мСню с ΠΎΠΏΡ†ΠΈΡΠΌΠΈ управлСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ описано ΠΏΠΎΠ·ΠΆΠ΅.

НаТав Π»Π΅Π²ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΈ Π·Π°Π΄Π°Π² Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅.

void AnTMouseMove (object sender, MouseEventArgs e)

{

if (click==true) {if (raxis == false){cord.set_coordn (Cursor.Position.X, Cursor.Position.Y);

ryt+=cord.my ()*sens;

rxt+=cord.mx ()*sens;

ryn+=cord_n.my ()*sens;

rxn+=cord_n.mx ()*sens; }

if (raxis == true) {cord_n.set_coordn (Cursor.Position.X, Cursor.Position.Y);

ryt+=cord.my ()*sens;

rxt+=cord.mx ()*sens;

ryn+=cord_n.my ()*sens;

rxn+=cord_n.mx ()*sens;

} }

Листинг 13. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ двиТСния ΠΌΡ‹ΡˆΠΈ Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ провСряСтся условиС, Π½Π°ΠΆΠ°Ρ‚Π° Π»ΠΈ лСвая ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡ‹ΡˆΠΈ. Π”Π°Π»Π΅Π΅ провСряСтся, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ производится ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅. ПослС этого ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ся ΠΊΠ°ΠΊ Π½ΠΎΠ²Ρ‹Π΅ Π² ΠΊΠ»Π°ΡΡ расчСта ΡƒΠ³Π»ΠΎΠ². ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ значСния ΠΈΠ· ΠΊΠ»Π°ΡΡΠ° ΠΏΡ€ΠΈΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΌ Π·Π° ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΡƒΠ·Π»ΠΎΠ². Π’Π°ΠΊΠΆΠ΅ значСния ΡƒΠ³Π»ΠΎΠ² ΡƒΠΌΠ½ΠΎΠΆΠ°ΡŽΡ‚ΡΡ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π²Π»ΠΈΡΡŽΡ‰ΠΈΠΉ Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ смСщСния ΡƒΠ·Π»ΠΎΠ² ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΡ ΠΌΡ‹ΡˆΠΈ.

ΠŸΡ€ΠΈ отпускании клавиши происходит смСна значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° «Π»ΠΎΠΆΡŒ», ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π΅ΠΉ отпусканиС ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ курсора ΠΊ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ (листинг 14).

void AnTMouseUp (object sender, MouseEventArgs e)

{click=false;

if (e.Button == MouseButtons. Left) {Cursor.Show ();}}

Листинг 14. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ отпусканиС клавиши Π’ Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΡ, ΠΊΠΎΠ³Π΄Π° клавиша ΠΌΡ‹ΡˆΠΈ Π½Π°ΠΆΠ°Ρ‚Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ. Π­Ρ‚ΠΎ условиС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° (листинг 15).

void Timer1Tick (object sender, EventArgs e)

{

Draw ();

if (click==true) {Cursor.Position = new Point (x, y);}

}

Листинг 15. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π’ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° функция Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (функция Draw () Π² Π»ΠΈΡΡ‚ΠΈΠ½Π³Π΅ 15). Π’Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ удалСнности ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹, Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΡ‹ΡˆΠΈ, ΡƒΠ³Π»ΠΎΠ² ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°, Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° управлСния.

bool click=false;

float ryt=0,rxt=0,rxn=0,ryn=-90;

float sens=3f;

float camdis=-80;

bool raxis=false;

float rt=0;

Листинг 16. Π—Π°Π΄Π°Π½ΠΈΠ΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² управлСния Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· контСкстноС мСню. Для Π΅Π³ΠΎ создания Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π° Ρ„ΠΎΡ€ΠΌΡƒ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ контСкстного мСню ContextMenuStrip, послС Ρ‡Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ контСкстного мСню, ΠΊΠ»ΠΈΠΊΠ½ΡƒΠ² ΠΏΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρƒ.

Рисунок 2. Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² контСкстного мСню Π”Π°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ ΠΈΠ»ΠΈ Π½Π΅Ρ‚).

ΠŸΡ€ΠΈ ΠΊΠ»ΠΈΠΊΠ΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΏΡƒΠ½ΠΊΡ‚Π΅ мСню вызываСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΆΠΈΠΌΠ° управлСния Π½Π° Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ.

void AxisToolStripMenuItemClick (object sender, EventArgs e)

{

raxis = true;

cameraToolStripMenuItem.Checked = false;

axisToolStripMenuItem.Checked = true;

}

Листинг 17. ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΆΠΈΠΌΠ° управлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π½Π° Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ Π’ Π»ΠΈΡΡ‚ΠΈΠ½Π³Π΅ 17 происходит ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ управлСния, отмСчаСтся Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΡƒΠ½ΠΊΡ‚ контСкстного мСню, ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΏΡƒΠ½ΠΊΡ‚ становится Π½Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΌ.

Π’ ΠΏΡƒΠ½ΠΊΡ‚Π΅ мСню Π²Ρ‹Ρ…ΠΎΠ΄ размСщаСтся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.

Π’Ρ‹Π²ΠΎΠ΄Ρ‹ Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΡƒΡŽ модСль ΠΈΠ΄Π΅Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ трСхстСпСнного мСханичСского Ρ€ΠΎΡ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ гироскопа Π€ΡƒΠΊΠΎ.

МодСль ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятным интСрфСйсом ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ. ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ студСнт ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π» свои Π½Π°Π²Ρ‹ΠΊΠΈ гСомСтричСского модСлирования, усвоил основныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ OpenGL, Ρ€Π°Π·Π²ΠΈΠ» Π½Π°Π²Ρ‹ΠΊΠΈ программирования Π² ΡΡ€Π΅Π΄Π΅ программирования C#.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ способСн Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ гироскопа ΠΈ Π½Π°Π³Π»ΡΠ΄Π½ΠΎ позволяСт Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ дСйствия описанного устройства.

Π—Π°Π΄Π°Ρ‡Π° ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ гСомСтричСской ΠΌΠΎΠ΄Π΅Π»ΠΈ трСхстСпСнного мСханичСского Ρ€ΠΎΡ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ гироскопа Π€ΡƒΠΊΠΎ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΈΠ΄Π΅Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ достигнутой.

ΠšΠΎΠ»ΠΎΡΡΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° сыграли Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ срСдства Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° OpenGL являСтся достаточно Π³ΠΈΠ±ΠΊΠΈΠΌ ΠΈ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ срСдством программирования ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ. Π―Π·Ρ‹ΠΊ программирования C#, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ DotNet, Ρ‚Π°ΠΊΠΆΠ΅ являСтся ΠΌΠΎΡ‰Π½Ρ‹ΠΌ срСдством Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Windows.

ΠŸΠ΅Ρ€ΡΠΏΠ΅ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ развития Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° являСтся Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠ° рСалистичности ΠΌΠΎΠ΄Π΅Π»ΠΈ, использования Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² управлСния модСлью, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ описаниС.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для дСмонстрации Ρ€Π°Π±ΠΎΡ‚Ρ‹ гироскопов Π² ΠΊΡƒΡ€ΡΠ°Ρ… СстСствСнных ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Ρ„ΠΈΠ·ΠΈΠΊΠ° ΠΈΠ»ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠ°.

Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… источников

1. OpenGL. ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ руководство программиста Π’Ρƒ ΠœΠ΅ΠΉΡΠΎΠ½, НСйдСр Π”ΠΆΠ΅ΠΊΠΈ, ДСвис Π’ΠΎΠΌ, Π¨Ρ€Π°ΠΉΠ½Π΅Ρ€ Π”Π΅ΠΉΠ².

2. Гироскоп — ВикипСдия [Π­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹ΠΉ рСсурс]. — Π Π΅ΠΆΠΈΠΌ доступа: http://ru.wikipedia.org/wiki/%D0%93%D0%B8%D1%80%D0%BE%D1%81%D0%BA%D0%BE%D0%BF (Π΄Π°Ρ‚Π° обращСния: 06.12.12).

3. SharpDevelop 3.2 SoftTorrent.ru — ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π΅Π· рСгистрации Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΠΎΡ€Ρ€Π΅Π½Ρ‚ [Π­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹ΠΉ рСсурс]. — Π Π΅ΠΆΠΈΠΌ доступа: http://softtorrent.ru/windows-soft-torrent/637-sharpdevelop-32.html (Π΄Π°Ρ‚Π° обращСния: 06.12.12).

4. GLUT — ВикипСдия [Π­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹ΠΉ рСсурс]. — Π Π΅ΠΆΠΈΠΌ доступа: http://ru.wikipedia.org/wiki/GLUT (Π΄Π°Ρ‚Π° обращСния: 06.12.12).

5. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° OpenGL [Π­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹ΠΉ рСсурс]. — Π Π΅ΠΆΠΈΠΌ доступа: http://compgraph.tpu.ru/lib_opengl.htm (Π΄Π°Ρ‚Π° обращСния: 06.12.12).

6. Tao Framework — ВикипСдия [Π­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹ΠΉ рСсурс]. — Π Π΅ΠΆΠΈΠΌ доступа: http://ru.wikipedia.org/wiki/Tao_Framework (Π΄Π°Ρ‚Π° обращСния: 06.12.12).

7. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ 3D ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ [Π­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹ΠΉ рСсурс]. — Π Π΅ΠΆΠΈΠΌ доступа: http://www.programmingcpp.narod.ru/3d.htm (Π΄Π°Ρ‚Π° обращСния: 06.12.12).

8. Delphi ΠΈ OpenGL [Π­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹ΠΉ рСсурс]. — Π Π΅ΠΆΠΈΠΌ доступа: http://cube.h1.ru/d_gl.html (Π΄Π°Ρ‚Π° обращСния: 06.12.12).

9. НСобходимыС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ OpenGL [Π­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹ΠΉ рСсурс]. — Π Π΅ΠΆΠΈΠΌ доступа: http://www.esate.ru/page/initsializatsiya-opengl-v-c-sharp-step-2 (Π΄Π°Ρ‚Π° обращСния: 06.12.12).

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ A. Листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

using System;

using System.Collections.Generic;

using System. Drawing;

using System.Windows.Forms;

using Tao. FreeGlut;

using Tao. OpenGl;

using Tao.Platform.Windows;

namespace a2

{

public partial class MainForm: Form

{

public MainForm ()

{

InitializeComponent ();

AnT.InitializeContexts ();

}

bool click=false;

float ryt=0,rxt=0,rxn=0,ryn=-90;

float sens=3f;

float camdis=-80;

bool raxis=false;

float rt=0;

void MainFormLoad (object sender, EventArgs e)

{

// инициализация Glut

Glut.glutInit ();

Glut.glutInitDisplayMode (Glut.GLUT_RGB | Glut. GLUT_DOUBLE | Glut. GLUT_DEPTH);

// ΠΎΡ‡ΠΈΡ‚ΠΊΠ° ΠΎΠΊΠ½Π°

Gl.glClearColor (0, 0, 0, 1);

// настройка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² OpenGL для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

Gl.glEnable (Gl.GL_DEPTH_TEST);

Gl.glEnable (Gl.GL_LIGHTING);

Gl.glEnable (Gl.GL_LIGHT1);

float[] bluish = { 1f, 1f, 1f, 0.1f };

Gl.glLightfv (Gl.GL_LIGHT1, Gl. GL_DIFFUSE, bluish);

Gl.glLightfv (Gl.GL_LIGHT1, Gl. GL_SPECULAR, bluish);

Gl.glLightModeli (Gl.GL_LIGHT_MODEL_COLOR_CONTROL, Gl. GL_SEPARATE_SPECULAR_COLOR);

MessageBox.Show («Π—дравствуйтС! Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Π·ΠΎΡ€ΠΎΠΌ осущСствляСтся Π»Π΅Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ. Для Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ контСкстноС мСню ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ.» ," Гироскоп Π€ΡƒΠΊΠΎ — Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹…");

}

class coord{private int xpos, ypos, xpos_n, ypos_n; float mdx, mdy;

public void set_coord (int xx, int yy){xpos=xx;ypos=yy;}

public void set_coordn (int xn, int yn){xpos_n=xn;ypos_n=yn;}

public float mx (){mdx=0.01f*(xpos_n-xpos);return mdx;}

public float my (){mdy=0.01f*(ypos_n-ypos);return mdy;}

public coord (){mdx=0;mdy=0;}

}

coord cord=new coord ();

coord cord_n=new coord ();

void Timer1Tick (object sender, EventArgs e)

{

Draw ();

if (click==true) {Cursor.Position = new Point (x, y);}

}

int x, y;

void Draw ()

{

rt+=15.5f;

Gl.glViewport (0, 0, AnT. Width, AnT. Height);

Gl.glMatrixMode (Gl.GL_PROJECTION);

Gl.glLoadIdentity ();

Glu.gluPerspective (45, (float)AnT.Width / (float)AnT.Height, 0.1, 200);

Gl.glMatrixMode (Gl.GL_MODELVIEW);

Gl.glLoadIdentity ();

Gl.glClear (Gl.GL_COLOR_BUFFER_BIT | Gl. GL_DEPTH_BUFFER_BIT);

Gl.glTranslated (0,0,camdis); //отдаляСм ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

Gl.glRotatef (ryt, 1.0f,.0f,.0f); //Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ Π²ΠΎΠΊΡ€ΡƒΠ³ оси y

Gl.glRotatef (rxt, 0.0f, 1.0f,.0f); //Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ Π²ΠΎΠΊΡ€ΡƒΠ³ оси y

Glut.glutSolidTorus (1,12,64,64); //нСподвиТная внутрянняя Ρ€Π°ΠΌΠ°

Gl.glRotatef (90,1,0,0);// ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ Ρ€ΠΎΡ‚ΠΎΡ€Π° для ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ прорисовки

Gl.glRotatef (rt,.0f,.0f, 1.0f); //Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Ρ€ΠΎΡ‚ΠΎΡ€Π°

float[] color = new float[4]{ 0.8f, 0.7f, 0f, 1}; //Π—ΠΎΠ»ΠΎΡ‚ΠΎΠΉ Ρ†Π²Π΅Ρ‚

float[] shininess = new float[1]{ 30 };

Gl.glMaterialfv (Gl.GL_FRONT, Gl. GL_DIFFUSE, color); //Π¦Π²Π΅Ρ‚ Ρ€ΠΎΡ‚ΠΎΡ€Π°

Gl.glMaterialfv (Gl.GL_FRONT, Gl. GL_SPECULAR, color); //ΠžΡ‚Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΉ свСт

Gl.glMaterialfv (Gl.GL_FRONT, Gl. GL_SHININESS, shininess); //Π‘Ρ‚Π΅ΠΏΠ΅Π½ΡŒ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ свСта

Gl.glTranslated (0,0,-12);//пСрСнос

Glut.glutSolidCylinder (0.8d, 24d, 64, 64);//ось Ρ€ΠΎΡ‚ΠΎΡ€Π°

Gl.glTranslated (0,0,11.5); //пСрСнос

Glut.glutSolidCylinder (10d, 1d, 64, 64); //диск Ρ€ΠΎΡ‚ΠΎΡ€Π°

float[] color2 = new float[4]{.2f,.2f,.2f, 1}; //Ρ†Π²Π΅Ρ‚

float[] shininess2 = new float[1]{ 30 };

Gl.glMaterialfv (Gl.GL_FRONT, Gl. GL_DIFFUSE, color2); //Π¦Π²Π΅Ρ‚

Gl.glMaterialfv (Gl.GL_FRONT, Gl. GL_SPECULAR, color2); //ΠžΡ‚Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΉ свСт

Gl.glMaterialfv (Gl.GL_FRONT, Gl. GL_SHININESS, shininess2); //Π‘Ρ‚Π΅ΠΏΠ΅Π½ΡŒ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ свСта

Gl.glTranslated (9,0d,-1);//пСрСнос

Glut.glutSolidCylinder (1d, 1d, 64, 64); //балансир1

Gl.glTranslated (-18,0,0); //пСрСнос

Glut.glutSolidCylinder (1d, 1d, 64, 64);//балансир 2

Gl.glTranslated (9,0,1.5);

Gl.glRotatef (-rt,.0f,.0f, 1.0f);

Gl.glRotatef (ryn, 1,0,0);//Π²Ρ€Π΅Ρ‰Π΅Π½ΠΈΠ΅ Π½ Ρ€Π°ΠΌΡ‹

Gl.glRotatef (-90,0,1,0);// оси срСднСй Ρ€Π°ΠΌΡ‹

Gl.glTranslated (0,0,-14);

Glut.glutSolidCylinder (0.5d, 2d, 64, 64);

Gl.glTranslated (0,0,14);

Gl.glRotatef (180,0,1,0);

Gl.glTranslated (0,0,-14);

Glut.glutSolidCylinder (0.5d, 2d, 64, 64);

Gl.glTranslated (0,0,14);

Gl.glRotatef (-90,0,1,0);

Gl.glRotatef (90,1,0,0);// срСдняя Ρ€Π°ΠΌΠ°

Glut.glutSolidTorus (1,15,64,64);

Gl.glRotatef (-90,1,0,0);

Gl.glRotatef (rxn, 0,0,1);

Gl.glRotatef (-180,0,1,0);// оси внСшнСй Ρ€Π°ΠΌΡ‹

Gl.glTranslated (0,0,-17);

Glut.glutSolidCylinder (0.5d, 2d, 64, 64);

Gl.glTranslated (0,0,17);

Gl.glRotatef (180,0,1,0);

Gl.glTranslated (0,0,-17);

Glut.glutSolidCylinder (0.5d, 2d, 64, 64);

Gl.glTranslated (0,0,17);

Gl.glRotatef (90,0,1,0);// внСшняя Ρ€Π°ΠΌΠ°

Glut.glutSolidTorus (1,18,64,64);

Gl.glTranslated (0,-19,0);

Gl.glRotatef (-90,1,0,0);

Glut.glutSolidCylinder (6d, 3d, 64,64);

Gl.glRotatef (90,0,0,0);

Gl.glTranslated (0,19,0);

Gl.glRotatef (-90,0,1,0);

Gl.glFlush ();

AnT.Invalidate ();

}

void AnTMouseDown (object sender, MouseEventArgs e)

{ x=Cursor.Position.X;

y=Cursor.Position.Y;

if (e.Button == MouseButtons. Left) { Cursor. Hide ();}

if (e.Button == MouseButtons. Left) {

if (raxis == false) {cord.set_coord (Cursor.Position.X, Cursor.Position.Y); click=true;}

if (raxis==true) {cord_n.set_coord (Cursor.Position.X, Cursor.Position.Y);click=true; }}

if (e.Button==MouseButtons.Right) {ConMenu.Show (Cursor.Position.X, Cursor.Position.Y);}

}

void AnTMouseMove (object sender, MouseEventArgs e)

{

if (click==true) {if (raxis == false){cord.set_coordn (Cursor.Position.X, Cursor.Position.Y);

ryt+=cord.my ()*sens;

rxt+=cord.mx ()*sens;

ryn+=cord_n.my ()*sens;

rxn+=cord_n.mx ()*sens; }

if (raxis == true){cord_n.set_coordn (Cursor.Position.X, Cursor.Position.Y);

ryt+=cord.my ()*sens;

rxt+=cord.mx ()*sens;

ryn+=cord_n.my ()*sens;

rxn+=cord_n.mx ()*sens;

} }

}

void AnTMouseUp (object sender, MouseEventArgs e)

{

click=false;

if (e.Button == MouseButtons. Left) {Cursor.Show ();}

}

void ExitToolStripMenuItemClick (object sender, EventArgs e)

{

Application.Exit ();

}

void HighToolStripMenuItemClick (object sender, EventArgs e)

{

sens=5;

highToolStripMenuItem.Checked=true;

lowToolStripMenuItem.Checked=false;

mediumToolStripMenuItem.Checked=false;

}

void MediumToolStripMenuItemClick (object sender, EventArgs e)

{

sens=3f;

mediumToolStripMenuItem.Checked=true;

highToolStripMenuItem.Checked=false;

lowToolStripMenuItem.Checked=false;

}

void LowToolStripMenuItemClick (object sender, EventArgs e)

{

sens=1;

lowToolStripMenuItem.Checked=true;

mediumToolStripMenuItem.Checked=false;

highToolStripMenuItem.Checked=false;

}

void CloseToolStripMenuItemClick (object sender, EventArgs e)

{

camdis=-80;

closeToolStripMenuItem.Checked = true;

farToolStripMenuItem.Checked = false;

closeToolStripMenuItem1.Checked = false;

}

void FarToolStripMenuItemClick (object sender, EventArgs e)

{

camdis=-120;

closeToolStripMenuItem.Checked = false;

farToolStripMenuItem.Checked = true;

closeToolStripMenuItem1.Checked = false;

}

void CloseToolStripMenuItem1Click (object sender, EventArgs e)

{

camdis=-50;

closeToolStripMenuItem.Checked = false;

farToolStripMenuItem.Checked = false;

closeToolStripMenuItem1.Checked = true;

}

void CameraToolStripMenuItemClick (object sender, EventArgs e)

{

raxis = false;

cameraToolStripMenuItem.Checked =true;

axisToolStripMenuItem.Checked =false;

}

void AxisToolStripMenuItemClick (object sender, EventArgs e)

{

raxis = true;

cameraToolStripMenuItem.Checked = false;

axisToolStripMenuItem.Checked = true;

}

}

}

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π‘. Π‘Π½ΠΈΠΌΠΊΠΈ экрана Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π‘Π½ΠΈΠΌΠΎΠΊ 1. Запуск Π‘Π½ΠΈΠΌΠΎΠΊ 2. ΠžΠ±Ρ‰ΠΈΠΉ Π²ΠΈΠ΄ Π‘Π½ΠΈΠΌΠΎΠΊ 3. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Π½ΠΎΠ΅ мСню Π‘Π½ΠΈΠΌΠΎΠΊ 4. Π’Ρ‹Π±ΠΎΡ€ элСмСнта контСкстного мСню Π‘Π½ΠΈΠΌΠΎΠΊ 5. ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡ€ΠΈ нСстандартных Ρ€Π°Π·ΠΌΠ΅Ρ€Π°Ρ… ΠΎΠΊΠ½Π° с Π±Π»ΠΈΠ·ΠΊΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ