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

Π Π°Π±ΠΎΡ‚Π° с 3D-модСлями Π² 3D max

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

БистСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нСсколько Π²ΠΈΠ΄ΠΎΠ² систСм ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Для отобраТСния Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π°ΠΌ Π±Ρ‹Π»Π° Π½ΡƒΠΆΠ½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ с Π΄Π²ΡƒΠΌΡ осями — Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ осью X ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ осью Y. Напомним, Ρ‡Ρ‚ΠΎ экранная систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ для Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΠΎ (Ρ‚ΠΎΡ‡ΠΊΡƒ 0,0) Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°, ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ оси… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π Π°Π±ΠΎΡ‚Π° с 3D-модСлями Π² 3D max (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

1. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

2. ΠžΠ±Π·ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ

3. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΎΠ±Ρ‰Π΅ΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΌΠΎΠ΄Π΅Π»ΠΈ

4. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈ двиТСния 3D ΠΌΠΎΠ΄Π΅Π»ΠΈ

4.1 БистСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

4.2. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΌ пространствС

5. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈ освСщСния 3D сцСны

6. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ рСализация систСмы модСлирования двиТСния 3D ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

7. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΉ систСмы

8. Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

9. Бписок Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

1.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π˜Π½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΠ΅ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ срСдств ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ достаточно ΠΎΠ±ΡˆΠΈΡ€Π½Ρ‹Π΅ возмоТности Π² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ изобраТСния ΠΈΠ»ΠΈ видСоряда, Π½ΠΎ Π΄Π°ΠΆΠ΅ сСйчас Π΅ΡΡ‚ΡŒ шанс Π½Π΅ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½ΡƒΡŽ Π½Π°ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· Π½ΠΈΡ…. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, Π½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΠΎΠ³ΠΎΠ΄Π½Ρ‹Π΅ условия, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅ΠΌ Ρ„ΠΎΠ½Π΅, нСдостаток освСщСния Π½Π΅ Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠΉ нас ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ зная ряд условий ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ модСль повСдСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. 3D сцСна ΠΎΠ΄Π½Π° ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. Π“Π΄Π΅ Π½Π°ΠΌ позволяСтся ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ самим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ рядом Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй самой сцСны.

2. ΠžΠ±Π·ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ Π—Π°Π΄Π°Ρ‡Π° состоит Π² Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с 3D-модСлями Π½Π° 3D-сцСнС. Для этого Π² Microsoft Vusial C# приходится Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ для этих дСйствий, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² ΡΠ°ΠΌΠΎΠΉ срСдС. Π‘Π°ΠΌΡ‹Π΅ распространСнныС Π² Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚ это Ρ‚Ρ€ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ OpenGL, XNA Game Studio ΠΈ WPF (Windows Presentation Foundation). OpenGL (Open Graphics Library — открытая графичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, графичСскоС API) — спСцификация, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ нСзависимый ΠΎΡ‚ ΡΠ·Ρ‹ΠΊΠ° прораммирования платформонСзависимый ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс для написания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½ΡƒΡŽ ΠΈ Ρ‚Ρ€Ρ‘Ρ…ΠΌΠ΅Ρ€Π½ΡƒΡŽ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΡƒΡŽ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ. На Π±Π°Π·ΠΎΠ²ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅, OpenGL — это просто спСцификация, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΈΡ… Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ оборудования Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ этой спСцификации ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ — Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π½Π°Π±ΠΎΡ€Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ спСцификации. РСализация ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ возмоТности оборудования Ρ‚Π°ΠΌ, Π³Π΄Π΅ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Если Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Π° Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ эмулирована ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ спСцифичСскиС тСсты (conformance tests — тСсты Π½Π° ΡΠΎΠΎΡ‚вСтствиС) ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ рСализация Π±ΡƒΠ΄Π΅Ρ‚ классифицирована ΠΊΠ°ΠΊ OpenGL рСализация. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния достаточно Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, описанныС Π² ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, оставив ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ послСдних Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ обСспСчСния. Windows Presentation Foundation (WPF) — систСма для построСния клиСнтских ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Windows с Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ возмоТностями взаимодСйствия с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, графичСская (прСзСнтационная) подсистСма Π² ΡΠΎΡΡ‚Π°Π²Π΅ .NET Framework (начиная с Π²Π΅Ρ€ΡΠΈΠΈ 3.0), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ язык XAML. Microsoft XNA (Π°Π½Π³Π». XNA’s Not Acronymed) — Π½Π°Π±ΠΎΡ€ инструмСнтов с ΡƒΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌΠΎΠΉ срСдой Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния (.NET), созданный Microsoft, ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹ΠΌΠΈ ΠΈΠ³Ρ€Π°ΠΌΠΈ. XNA стрСмится ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈΠ³Ρ€ ΠΎΡ‚ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ «ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰Π΅Π³ΠΎΡΡ шаблонного ΠΊΠΎΠ΄Π°» ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ аспСкты Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ³Ρ€ Π² ΠΎΠ΄Π½ΠΎΠΉ систСмС. Набор инструмСнтов XNA Π±Ρ‹Π» анонсирован 24 ΠΌΠ°Ρ€Ρ‚Π° 2004 Π½Π° Game Developers Conference Π² Π‘Π°Π½-Π₯осС, ΠšΠ°Π»ΠΈΡ„ΠΎΡ€Π½ΠΈΡ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Community Technology Preview XNA Build Π±Ρ‹Π» Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½ 14 ΠΌΠ°Ρ€Ρ‚Π° 2006.

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ дрСвняя ΠΈΠ· Ρ‚Ρ€Π΅Ρ… прСдставлСнных ΠΈ Π±ΠΎΠ»ΡŒΡˆΠ΅ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»Π°ΡΡŒ ΠΏΠΎΠ΄ Π‘++. Бравнивая Π΄Π²Π΅ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ я ΠΏΡ€ΠΈΡˆΠ΅Π» ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ XNA Studio Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π΅Π½ Π² ΠΏΠΎ Ρ€ΡΠ΄Ρƒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½. Π’ ΠΏΠ»Π°Π½Π΅ возмоТностСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ с 3D-модСлями, лСгкости нахоТдСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

3. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΎΠ±Ρ‰Π΅ΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ систСмы ЛогичСски Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ Π΄Π°Π½Π½ΠΎΠΉ систСмы ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅:

Рис. 1. ЛогичСски простроСнная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° систСмы Как Π²ΠΈΠ΄Π½ΠΎ всС ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Ρ‚Ρ€ΠΈ логичСских Π±Π»ΠΎΠΊΠ°. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ производится ΠΏΡ€ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Сля. ПослС слСдуСт вычислСния ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. И ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π±Π»ΠΎΠΊ это построСниС сцСны ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ вычислСний. Для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° всС Ρ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° Π·Π°Ρ†ΠΈΠΊΠ»Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² Π»ΡŽΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π²Π²ΠΎΠ΄ΠΈΠΌ.

Если Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ всС Π±Π»ΠΎΠΊΠΈ, Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ нашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (Π’Π°Π±Π». 1).

Π’Π°Π±Π»ΠΈΡ†Π° 1. АрхитСктура ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ

На ΡΡ‚Π°ΠΏΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° проводится инициализация графичСской ΠΈ Π·Π²ΡƒΠΊΠΎΠ²Ρ‹Ρ… подсистСм, систСмы Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ….

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° рСсурсов

Π—Π΄Π΅ΡΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ рСсурсы, Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ тСкстуры ΠΈ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π·Π²ΡƒΠΊΠΈ, ΡˆΡ€ΠΈΡ„Ρ‚Ρ‹.

Начало Ρ†ΠΈΠΊΠ»Π°

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ дСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Π²ΠΈΠ΄Π΅ Ρ†ΠΈΠΊΠ»Π°. ЀактичСски, Ρ†ΠΈΠΊΠ» — это ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт любой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с 3Π΄-модСлями.

Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ управляСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… устройств Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Π½Π°ΡˆΠ΅ΠΌ случаС это — ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° ΠΈ ΠΌΡ‹ΡˆΡŒ. Π—Π΄Π΅ΡΡŒ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ информация, ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰Π°Ρ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… устройств Π²Π²ΠΎΠ΄Π°. НапримСр — ΠΎΡ‚ Π΄ΠΆΠΎΠΉΡΡ‚ΠΈΠΊΠ°.

ВычислСния

ВычислСния Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² ΡΠ΅Π±Ρ всС вычислСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ процСсса. Π’ Ρ‡Π°ΡΡ‚ности, здСсь ΠΎΠ±ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², проводятся вычислСния, вычислСния, связанныС с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ столкновСний ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Если Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎΠ± ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ быстродСйствия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚ΠΎ Ρ‚акая оптимизация ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ касаСтся ΠΈΠΌΠ΅Π½Π½ΠΎ вычислСний, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π° Π½ΠΈΡ… тратится большая Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Ρ†ΠΈΠΊΠ»Π°.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° критСрия прСкращСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π¦ΠΈΠΊΠ» продолТаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½Π°. НапримСр, ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅ΠΌ останова ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ истСчСниС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ событиС, ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠ΅Π΅ Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ остановка, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ€Π΅ΡˆΠΈΠ» ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π’Ρ‹Π²ΠΎΠ΄ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ Π·Π²ΡƒΠΊΠΎΠ²

ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ этапа вычислСний Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ Ρ‡Π°ΡΡ‚ности, ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π½ΠΎΠ²Ρ‹Ρ… позициях ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΎ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ вывСсти Π½Π° 3Π΄-сцСнС, ΠΎ Π·Π²ΡƒΠΊΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ воспроизвСсти. На Π΄Π°Π½Π½ΠΎΠΌ этапС проводится ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ 3Π΄-сцСнС, Π²Ρ‹Π²ΠΎΠ΄ сообщСний, ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ Π·Π²ΡƒΠΊΠ°.

ΠšΠΎΠ½Π΅Ρ† Ρ†ΠΈΠΊΠ»Π°

Π¦ΠΈΠΊΠ» заканчиваСтся послС выполнСния условия останова ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ОсвобоТдСниС рСсурсов

На ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ этапС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ проводится освобоТдСниС систСмных рСсурсов, занятых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Π΅Π΅.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ€Π°Π½Π½Π΅Π΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ряд ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

Game1() — ΠžΠ±Ρ‰Π°Ρ инициализация. Game1() — это конструктор класса Game1, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Game Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ Main Ρ„Π°ΠΉΠ»Π° Program.cs.

Initialize () — Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ. Бюда ΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠΉ подсистСмы ΠΈΠ³Ρ€Ρ‹. Надо ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΡΡ‚ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ инициализируСтся всС, ΠΊΡ€ΠΎΠΌΠ΅ графичСских рСсурсов ΠΈΠ³Ρ€Ρ‹

LoadContent () — Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° рСсурсов.

Run () — Запуск Ρ†ΠΈΠΊΠ»Π°.

Π¦ΠΈΠΊΠ» Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ состоит ΠΈΠ· Π΄Π²ΡƒΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

Update () — ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… — это ΠΌΠ΅Ρ‚ΠΎΠ΄ Update (), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ выполняСтся ΠΏΡ€ΠΈΠ΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°, всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ вычислСния, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π² останова ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Draw () — Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ†ΠΈΠΊΠ»Π° — это ΠΌΠ΅Ρ‚ΠΎΠ΄ Draw (), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΊΠΎΠ΄ для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ.

UnloadContent () — По ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° этот ΠΌΠ΅Ρ‚ΠΎΠ΄ освобоТдаСт систСмныС рСсурсы.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих стандартных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Π° с ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ упрощаСтся достаточно сущСствСнно. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ.

4. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈ двиТСния 3D ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ 3D ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΠΏΠΎΠ΄ собой систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. И ΠΏΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ модСль двиТСния ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π½Π°Π΄ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. И ΠΏΠΎΡΠ»Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся «ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΌ пространствС».

4.1 БистСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нСсколько Π²ΠΈΠ΄ΠΎΠ² систСм ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Для отобраТСния Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π°ΠΌ Π±Ρ‹Π»Π° Π½ΡƒΠΆΠ½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ с Π΄Π²ΡƒΠΌΡ осями — Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ осью X ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ осью Y. Напомним, Ρ‡Ρ‚ΠΎ экранная систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ для Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΠΎ (Ρ‚ΠΎΡ‡ΠΊΡƒ 0,0) Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°, ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ оси X Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ся справа ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ оси Y — снизу.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π½Π°ΠΌ понадобится Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° ось — ΠΎΠ½Π° называСтся ось Z. БущСствуСт нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Ρ… систСм ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Π² Ρ‡Π°ΡΡ‚ности, распространСны Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ правосторонняя ΠΈ Π»Π΅Π²ΠΎΡΡ‚оронняя систСмы. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ правостороннСй систСмой — ΠΎΠ½Π° примСняСтся Π² XNA Framework. Π•Ρ‘ ΡΡ…Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π½Π° Ρ€ΠΈΡ. 2

Рис. 2. ΠŸΡ€Π°Π²ΠΎΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡΡ систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ этой систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ с Π»Π΅Π²Ρ‹ΠΌ Π½ΠΈΠΆΠ½ΠΈΠΌ ΡƒΠ³Π»ΠΎΠΌ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°, ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ оси X Π½Π°Ρ…одится справа ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ оси Y — свСрху, Π° ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ оси Z — спСрСди. А ΡΡ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ видимая Ρ‡Π°ΡΡ‚ΡŒ оси Z — это Π΅Ρ‘ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ. Π­Ρ‚Π° Ρ‡Π°ΡΡ‚ΡŒ оси находится ΠΊΠ°ΠΊ Π±Ρ‹ «Π² Π³Π»ΡƒΠ±ΠΈΠ½Π΅ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°», Π² Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΡ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ находится «ΡΠΏΠ΅Ρ€Π΅Π΄ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°». На Ρ€ΠΈΡ. 2. ΠΏΡƒΠ½ΠΊΡ‚ΠΈΡ€ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π° ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ оси Z.

Π’ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΉ систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ сущСствуСт понятиС Ρ‚ΠΎΡ‡ΠΊΠΈ — Π΅Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ двумя значСниями — X ΠΈ Y. Π’ΠΎΡ‡ΠΊΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π² Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ — ΠΎΠ½ΠΈ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ ΡƒΠΆΠ΅ трСмя значСниями — X, Y, Z.

Π’ΠΎΡ‡ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² (ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ΠΎΠ²), Π² Ρ‡Π°ΡΡ‚ности — Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ². Π’Π°ΠΊ, Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΉ Π½Π° Ρ€ΠΈΡ. 2., Π·Π°Π΄Π°Π½ трСмя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ — A, B, C.

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π±ΠΎΠ»Π΅Π΅ слоТныС Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ строятся ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ· Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ².

Π’ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅ сущСствуСт Ρ‚Π°ΠΊΠΎΠ΅ понятиС, ΠΊΠ°ΠΊ Π³Ρ€Π°Π½ΡŒ (face). Π­Ρ‚ΠΎ — плоский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ нСсколько Π²Π΅Ρ€ΡˆΠΈΠ½. Π’ Π½Π°ΡˆΠ΅ΠΌ случаС ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ — это ΠΈΠΌΠ΅Π½Π½ΠΎ Π³Ρ€Π°Π½ΡŒ. Из Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… плоских Π³Ρ€Π°Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΌΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π§Π΅ΠΌ большС Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² использовано ΠΏΡ€ΠΈ построСнии ΠΌΠΎΠ΄Π΅Π»ΠΈ — Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΎΠ½Π° получаСтся. Π’ΠΎΡ‡ΠΊΠΈ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π² Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΌ пространствС, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ. Работая с Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ Π² XNA Π²Π°ΠΌ часто придСтся Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒ английский Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ слова Π²Π΅Ρ€ΡˆΠΈΠ½Π° — vertex. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ встрСтится мноТСствСнноС число слова Π²Π΅Ρ€ΡˆΠΈΠ½Π°: «Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹» выглядит ΠΏΠΎ-английски ΠΊΠ°ΠΊ «vertices». Иногда для обозначСния Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠ°Π»ΡŒΠΊΡƒ с Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠ³ΠΎ — вСртСкс.

Π’Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Π½Π΅ ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Π½ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π±Π°Π·ΠΎΠ²ΠΎΠΉ гСомСтричСской Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ — Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ… — этот ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ всСгда являСтся Π²Ρ‹ΠΏΡƒΠΊΠ»Ρ‹ΠΌ, Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ… — Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Ρ‚Ρ€ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Π»ΠΈ ΠΎΠ΄Π½ΠΎΠΉ плоскости. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ — это Ρ„ΠΈΠ³ΡƒΡ€Π°, которая всСгда являСтся Π²Ρ‹ΠΏΡƒΠΊΠ»ΠΎΠΉ ΠΈ ΠΏΠ»ΠΎΡΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎ позволяСт с ΡƒΡΠΏΠ΅Ρ…ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Ρ†Π΅Π»ΡΡ… Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ.

НСсколько Π³Ρ€Π°Π½Π΅ΠΉ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… состоит Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ сСткой (mesh). «Π‘Π΅Ρ‚ΠΊΠ°» прСдставляСт собой Π½Π°Π±ΠΎΡ€ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ².

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ понятиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ пригодится Π²Π°ΠΌ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ — это понятиС Π²Π΅ΠΊΡ‚ΠΎΡ€Π°. Π’Π΅ΠΊΡ‚ΠΎΡ€ (vector), Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Ρ‚ΠΎΡ‡ΠΊΠ°, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ трСмя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ ΠΎΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ Π½Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΡΡ‚ранствС, Π° Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ двиТСния.

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

НапримСр, Π²Π΅ΠΊΡ‚ΠΎΡ€ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (1,0,0) ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚: «Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ — Π²ΠΏΡ€Π°Π²ΠΎ, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ — 1». Если ΠΎΡ‚Π»ΠΎΠΆΠΈΡ‚ΡŒ этот Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²ΠΏΡ€Π°Π²ΠΎ (рис. 3.).

НаправлСниС Π²Π΅ΠΊΡ‚ΠΎΡ€Π° опрСдСляСтся ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ (Π² Π½Π°ΡˆΠ΅ΠΌ случаС — ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΊΠΎΠ½Ρ†Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ задаСтся Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Ρ‡Π°Π»Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚), Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ — Π΄Π»ΠΈΠ½ΠΎΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° — Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ — Ρ€Π°Π·Π½ΠΈΡ†Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ. Π’ Π½Π°ΡˆΠ΅ΠΌ случаС Π΄Π»ΠΈΠ½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π° совпадаСт с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ Π΅Π³ΠΎ ΠΊΠΎΠ½Ρ†Π°.

Рис. 3. Π’Π΅ΠΊΡ‚ΠΎΡ€ (1,0,0)

БущСствуСт особый Π²ΠΈΠ΄ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² — Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ (normals). Нормали ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ построСны для Π³Ρ€Π°Π½Π΅ΠΉ ΠΈ Π΄Π»Ρ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Нормали для Π³Ρ€Π°Π½Π΅ΠΉ пСрпСндикулярны этим граням. Они ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ расчСтС Ρ†Π²Π΅Ρ‚Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

4.2 ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ Π² Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΌ пространствС Зная ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ΠΎΠ², ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… состоит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² ΠΏΡ€ΠΎΡΡ‚ранствС. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ полоТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΏΡ€ΠΎΡΡ‚ранствС. БущСствуСт нСсколько основных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для пСрСмСщСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΌ пространствС. Π­Ρ‚ΠΎ — ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ (translation), Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ (rotation) ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (scale).

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ графичСской подсистСмы Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΠΌ экранС ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π° — смодСлированная ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠΌ трСхмСрная сцСна проСцируСтся Π½Π° Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΡƒΡŽ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ. ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ΅Ρ†ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ, которая выполняСт Ρ€ΠΎΠ»ΡŒ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠ΅ пространство. Π’ ΡΠ²ΠΎΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΌ пространствС ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π² ΡΠΎΠΎΡ‚вСтствии с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ. Для управлСния всСм этим ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ нСсколько ΠΌΠ°Ρ‚Ρ€ΠΈΡ†. Π­Ρ‚ΠΎ — мировая ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° (World Matrix), ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π²ΠΈΠ΄Π° (View Matrix) ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ (Projection Matrix).

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, состоящСй ΠΈΠ· m ΡΡ‚Ρ€ΠΎΠΊ ΠΈ n ΡΡ‚ΠΎΠ»Π±Ρ†ΠΎΠ². Π’ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ 4×4. ΠŸΠ΅Ρ€Π²Ρ‹Ρ… Ρ‚Ρ€ΠΈ столбца этой ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π·Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ X, Y, Z Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π² Ρ‚рансформации.

ΠœΠΈΡ€ΠΎΠ²Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° позволяСт Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ прСобразования — пСрСмСщСния, вращСния ΠΈ Ρ‚рансформации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° Π²ΠΈΠ΄Π° позволяСт ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΌΠ΅Ρ€ΠΎΠΉ.

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ слуТит для настройки ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ сцСны Π½Π° ΡΠΊΡ€Π°Π½.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, имССтся Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ (Ρ‚Π°Π±Π». 2.).

Π’Π°Π±Π»ΠΈΡ†Π° 2. Π’Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π΄ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΡ

Π’Π΅Ρ€ΡˆΠΈΠ½Π°

X

Y

Z

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ этого Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π½Π° 10 ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ ΠΏΠΎ ΠΎΡΠΈ X ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎ 10 ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ X Π΅Π³ΠΎ Π²Π΅Ρ€ΡˆΠΈΠ½. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получится ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° (Ρ‚Π°Π±Π». 3.).

Π’Π°Π±Π»ΠΈΡ†Π° 3. Π’Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° послС пСрСмСщСния

Π’Π΅Ρ€ΡˆΠΈΠ½Π°

X

Y

Z

Π’ΠΎΠ³ΠΎ ΠΆΠ΅ эффСкта ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ, ΡƒΠΌΠ½ΠΎΠΆΠΈΠ² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½ Π½Π° ΠΌΠΈΡ€ΠΎΠ²ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ. Для этого ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, состоящСй ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ строки ΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… столбцов. Π’ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Ρ‚Ρ€Π΅Ρ… столбцах содСрТатся ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ X, Y, Z, Π² Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠΌ — 1. ΠœΠΈΡ€ΠΎΠ²Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° прСдставлСна Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ 4×4. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит опСрация умноТСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ† (Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° 1.):

Π€ΠΎΡ€ΠΌΡƒΠ»Π° 1. Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΈ ΠΌΠΈΡ€ΠΎΠ²ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠŸΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ каТдая ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½ умноТаСтся Π½Π° ΠΌΠΈΡ€ΠΎΠ²ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ.

КаТдоС ΠΈΠ· ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ Π² ΠΏΡ€ΠΎΡΡ‚ранствС Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ особой настройки ΠΌΠΈΡ€ΠΎΠ²ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹. Π’ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ 2. ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ шаблон ΠΌΠΈΡ€ΠΎΠ²ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, которая позволяСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ΠΏΡ€ΠΎΡΡ‚ранствС.

Π€ΠΎΡ€ΠΌΡƒΠ»Π° 2. ΠœΠΈΡ€ΠΎΠ²Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° для пСрСмСщСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Π—Π΄Π΅ΡΡŒ Π”X, Π”Y ΠΈ Π”Z — это приращСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ X, Y ΠΈ Z.

ΠœΠΈΡ€ΠΎΠ²Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° для вращСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ оси Π₯ Π²Ρ‹Π³Π»ΡΠ΄ΠΈΡ‚ Ρ‚Π°ΠΊ (Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° 3.).

Π€ΠΎΡ€ΠΌΡƒΠ»Π° 3. ΠœΠΈΡ€ΠΎΠ²Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° для вращСния ΠΏΠΎ ΠΎΡΠΈ

Π—Π΄Π΅ΡΡŒ Π± — ΡƒΠ³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π² Ρ€Π°Π΄ΠΈΠ°Π½Π°Ρ… ΠœΠΈΡ€ΠΎΠ²Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° для вращСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ ΠΎΡΠΈ Y Π²Ρ‹Π³Π»ΡΠ΄ΠΈΡ‚ Ρ‚Π°ΠΊ (Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° 4.)

Π€ΠΎΡ€ΠΌΡƒΠ»Π° 4. ΠœΠΈΡ€ΠΎΠ²Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° для вращСния ΠΏΠΎ ΠΎΡΠΈ

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° для вращСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ оси Z ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π² Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ 5.

Π€ΠΎΡ€ΠΌΡƒΠ»Π° 5. ΠœΠΈΡ€ΠΎΠ²Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° для вращСния ΠΏΠΎ ΠΎΡΠΈ Z

Π€ΠΎΡ€ΠΌΡƒΠ»Π° 6. прСдставляСт ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, которая слуТит для трансформации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Ρ†x, Ρ†y, Ρ†z — это коэффициСнты ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊ Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌ. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ «ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒ» ΠΈΠ»ΠΈ «Ρ€Π°ΡΡ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒ» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†:

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° Π²ΠΈΠ΄Π° влияСт Π½Π° ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ — Ρ‚ΠΎΡ‡ΠΊΠΈ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ осущСствляСтся просмотр Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ сцСны.

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ позволяСт ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅Ρ†ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ сцСны Π½Π° ΡΠΊΡ€Π°Π½. Π’ XNA сущСствуСт Π΄Π²Π° Π²ΠΈΠ΄Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΉ.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ — это пСрспСктивная проСкция (Perspective projection). Π’ ΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ выглядят Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ ΠΈΡ… Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΡ€Π΅. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ располоТСны дальшС, каТутся мСньшС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², располоТСнных Π±Π»ΠΈΠΆΠ΅.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²ΠΈΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ — это ΠΎΡ€Ρ‚ΠΎΠ³ΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ проСкция. Π—Π΄Π΅ΡΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΡ€ΠΎΠ΅Ρ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ экрана Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° пСрспСктивы.

5. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈ освСщСния 3D сцСны Рассмотрим ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ освСщСниСм ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Ρ‚Π΅Π½Π΅ΠΉ Π² XNA. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚Снями, ΠΌΡ‹ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ отрисовку Ρ‚Π΅Π½Π΅ΠΉ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Ρ‚Ρ€Π°Ρ„Π°Ρ€Π΅Ρ‚ΠΎΠ², ΠΈΠ»ΠΈ, ΠΏΠΎ-английски — Stencil Buffer.

Stencil Buffer являСтся стандартным устройством, входящим Π² ΡΠΎΡΡ‚Π°Π² соврСмСнных Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚. Однако, Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ этого Π±ΡƒΡ„Π΅Ρ€Π°, поэтому, ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π³ΠΎ использованиСм, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ Π±ΡƒΡ„Π΅Ρ€ доступСн Π½Π° Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚.

Для создания Ρ‚Π΅Π½ΠΈ ΠΌΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ CreateShadow ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Matrix. Он ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Π΅Π½ΡŒ ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± ΠΈΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠ΅ освСщСния ΠΈ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΎΠ΅Ρ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π΅Π½ΡŒ.

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ сознана ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ собой Ρ‚Π΅Π½ΡŒ, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ эту ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ для Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚Π΅Π½ΠΈ. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ, Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚Π°ΠΊΠΎΠ²Π°: сначала вывСсти сцСну, ΠΎΡΠ²Π΅Ρ‰Π΅Π½Π½ΡƒΡŽ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π½ΡƒΠΆΠ½ΠΎ, послС этого ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€ Ρ‚Ρ€Π°Ρ„Π°Ρ€Π΅Ρ‚ΠΎΠ² ΠΈ Π²Ρ‹Π²Π΅ΡΡ‚ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΡΡ†Π΅Π½Ρƒ Π±Π΅Π· освСщСния, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π² ΠΌΠΈΡ€ΠΎΠ²ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Ρ‚Π΅Π½ΠΈ.

Π’ ΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ источника свСта. Π’ Ρ‡Π°ΡΡ‚ности, ΠΌΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ для рисования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠ΄ΠΈΠ½ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ источник свСта, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ клавиш ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ — ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° Z ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ‚ся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ клавиш-Z ΠΈ X, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° X — Π‘ ΠΈ V, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° Y — B ΠΈ N. ИзмСнСниС направлСния освСщСния влияСт Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΎΡΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½ΠΎ ΠΈ Π½Π° Ρ‚Π΅Π½ΡŒ.

6. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ рСализация систСмы модСлирования двиТСния 3D ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° modCls, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… этим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΈ Π·Π° ΠΈΡ… Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ

public class modCls: Microsoft.Xna.Framework.DrawableGameComponent

{

//МодСль

public Model myModel;

//ΠœΠΈΡ€ΠΎΠ²Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π²ΠΈΠ΄Π° ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ

publicMatrix WorldMatrix;

publicMatrix ViewMatrix;

publicMatrix ProjectMatrix;

//НаправлСниС свСта

public Vector3 LightDirection;

//ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° для отобраТСния Ρ‚Π΅Π½ΠΈ

Matrix shadow;

//ΠŸΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ отобраТаСтся Ρ‚Π΅Π½ΡŒ

Plane sPlane;

//Π‘ΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ сторон экрана

publicfloat aspectRatio;

//Для управлСния графичСским устройством

GraphicsDeviceManager graphics;

//ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄

//ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ класс, модСль, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ для управлСния графичСским устройством

public modCls (Game game, Model mod, GraphicsDeviceManager grf, Plane pl)

base (game)

{

myModel = mod;

graphics = grf;

sPlane = pl;

aspectRatio = (float)graphics.GraphicsDevice.Viewport.Width /

(float)graphics.GraphicsDevice.Viewport.Height;

LightDirection = new Vector3();

}

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π±Π°Π·Ρƒ которая Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ. НастраиваСм Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ этих ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ Draw ()

public override void Draw (GameTime gameTime)

{

//Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

foreach (ModelMesh mesh in myModel. Meshes)

{

//Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ эффСкта Π² ΡΠ΅Ρ‚ΠΈ

foreach (BasicEffecteffect in mesh. Effects)

{

//Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ источник Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ свСта № 0

effect.DirectionalLight0.Enabled = true;

//ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

effect.DirectionalLight0.DiffuseColor = Vector3. One;

effect.DirectionalLight0.SpecularColor = Vector3. One;

//НаправлСниС свСта — Π² ΠΊΠ»Π°ΡΡΠ° Game1 ΠΌΡ‹ ΠΌΠ΅Π½ΡΠ΅ΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅

//ΠΏΠΎ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ

effect.DirectionalLight0.Direction = Vector3. Normalize (LightDirection);

effect.LightingEnabled = true;

//ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

effect.World = WorldMatrix;

effect.View = ViewMatrix;

effect.Projection = ProjectMatrix;

}

mesh.Draw ();

}

//Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Ρ‚Π΅Π½ΠΈ

shadow = Matrix. CreateShadow (-LightDirection, sPlane);

graphics.GraphicsDevice.DepthStencilState = DepthStencilState. Default;

graphics.GraphicsDevice.BlendState = BlendState. Opaque;

//Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Ρ‚Π΅Π½ΡŒ

foreach (ModelMesh mesh in myModel. Meshes)

{

foreach (BasicEffecteffect in mesh. Effects)

{

effect.AmbientLightColor = Vector3. Zero;

effect.Alpha = 0.5f;

effect.DirectionalLight0.Enabled = false;

effect.DirectionalLight1.Enabled = false;

effect.DirectionalLight2.Enabled = false;

effect.View = ViewMatrix;

effect.Projection = ProjectMatrix;

//ΠŸΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Ρ‚Π΅Π½ΠΈ ΡƒΠΌΠ½ΠΎΠΆΠ°Π΅ΠΌ ΠΌΠΈΡ€ΠΎΠ²ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ

//Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚Π΅Π½ΠΈ

effect.World = WorldMatrix*shadow;

}

mesh.Draw ();

}

base.Draw (gameTime);

}

ПослС объявляСм список ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅.

GraphicsDeviceManager graphics;

//ΠœΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

Matrix viewMatrix;

Matrix projMatrix;

const int shadowMapWidthHeight = 2048;

//МодСли

Model ball, cube, ball2;

// ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚

Vector3avatarPosition = new Vector3(0, -1f, -50);

float avatarlRotation;

//Массив ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ сцСны

modCls[] cls;

//Π˜Π³Ρ€ΠΎΠ²ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

modCls ballObj;

//ΠŸΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ

modCls plane;

//НаправлСниС свСта

Vector3 LightDirection;

BoundingFrustum cameraFrustum = new BoundingFrustum (Matrix.Identity);

// ПолоТСниС ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹

Vector3 cameraReference = new Vector3(0, 0, 10);

Vector3 thirdPersonReference = new Vector3(0, 200, -200);

// Бкорости ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ

float rotationSpeed = 1f / 60f;

float forwardSpeed = 50f / 60f;

//ПолС зрСния ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹

float viewAngle = MathHelper. ToRadians (45.0f);

//РасстояниС ΠΎΡ‚ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅Π³ΠΎ ΠΈ Π·Π°Π΄Π½Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π°

float nearClip = 1.0f;

float farClip = 2000.0f;

// Установка ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ 2 — Π²ΠΈΠ΄ ΠΎΡ‚ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ Π»ΠΈΡ†Π°

//1 — ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π»ΠΈΡ†Π°

int cameraState = 2;

//Π‘ΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ сторон экрана

float aspectRatio;

Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π±Π°Π·Ρƒ для хранСния этих ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ.

protected override void LoadContent ()

{

//Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ

ball = Content. Load («ball»);

cube = Content. Load («cube»);

ball2 = Content. Load («ball2»);

aspectRatio = (float)graphics.GraphicsDevice.Viewport.Width /

(float)graphics.GraphicsDevice.Viewport.Height;

cls = new modCls[75];

LightDirection = new Vector3(80, -136, 80);

}

ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ полоТСния источника свСта. Π—Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎ ΠΎΡΠΈ Z ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ клавиши Z ΠΈ X (пСрвая ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, вторая ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚), ось XC ΠΈ V, ось YB ΠΈ N.

//ИзмСнСниС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ источника свСта

void LightSourceControl ()

{

//ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ состояниС ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹

KeyboardState key = Keyboard. GetState ();

//Клавиша z — ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΏΠΎ Z

if (key.IsKeyDown (Keys.Z))

{

LightDirection.Z -= 0.5f;

}

//Клавиша x — ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠΌ Z

if (key.IsKeyDown (Keys.X))

{

LightDirection.Z += 0.5f;

}

//c — ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠΌ X

if (key.IsKeyDown (Keys.C))

{

LightDirection.X -= 0.5f;

}

//" v" - ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠΌ X

if (key.IsKeyDown (Keys.V))

{

LightDirection.X += 0.5f;

}

//" b" - ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠΌ Y

if (key.IsKeyDown (Keys.B))

{

LightDirection.Y += 0.5f;

}

//" n" - ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠΌ Y

if (key.IsKeyDown (Keys.N))

{

LightDirection.Y -= 0.5f;

}

//Π’Ρ‹Π²Π΅Π΄Π΅ΠΌ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ

this.Window.Title = «Light source: «+ LightDirection. ToString ();

}

Π—Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ класс UpdateAvatarPosition (). Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ производится стрСлками ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ Π½Π° ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠ»ΠΈ Π½Π°Π·Π°Π΄ производится ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ двиТСния. А ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ клавиш Π²Π»Π΅Π²ΠΎ ΠΈΠ»ΠΈ Π²ΠΏΡ€Π°Π²ΠΎ происходит ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ оси Y.

//ОбновляСм состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

void UpdateAvatarPosition ()

{

KeyboardState keyboardState = Keyboard. GetState ();

//ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π²Π»Π΅Π²ΠΎ

if (keyboardState.IsKeyDown (Keys.Left))

{

avatarlRotation += rotationSpeed;

}

//ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π²ΠΏΡ€Π°Π²ΠΎ

if (keyboardState.IsKeyDown (Keys.Right))

{

avatarlRotation -= rotationSpeed;

}

//Π”Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΏΠ΅Ρ€Π΅Π΄

if (keyboardState.IsKeyDown (Keys.Up))

{

Matrix forwardMovement = Matrix. CreateRotationY (avatarlRotation);

Vector3 v = new Vector3(0, 0, forwardSpeed);

v = Vector3. Transform (v, forwardMovement);

avatarPosition.Z += v. Z;

avatarPosition.X += v. X;

while (IsCollide ())

{

avatarPosition.Z -= v. Z;

avatarPosition.X -= v. X;

}

}

//Π”Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π½Π°Π·Π°Π΄

if (keyboardState.IsKeyDown (Keys.Down))

{

Matrix forwardMovement = Matrix. CreateRotationY (avatarlRotation);

Vector3 v = new Vector3(0, 0, -forwardSpeed);

v = Vector3. Transform (v, forwardMovement);

avatarPosition.Z += v. Z;

avatarPosition.X += v. X;

while (IsCollide ())

{

avatarPosition.Z -= v. Z;

avatarPosition.X -= v. X;

}

}

//УмСньшСниС ΡƒΠ³Π»Π° ΠΎΠ±Π·ΠΎΡ€Π° ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹

if (keyboardState.IsKeyDown (Keys.R))

{

viewAngle -= MathHelper. ToRadians (1.0f);

}

//Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΡƒΠ³Π»Π° ΠΎΠ±Π·ΠΎΡ€Π° ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹

if (keyboardState.IsKeyDown (Keys.F))

{

viewAngle += MathHelper. ToRadians (1.0f);

}

//Если Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΠ³ΠΎΠ» ΠΎΠ±Π·ΠΎΡ€Π° Π²Ρ‹ΡˆΠ΅Π» Π·Π° Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹

//измСняСм Сго

if (viewAngle > MathHelper. ToRadians (180.0f)) viewAngle = MathHelper. ToRadians (179.9f);

if (viewAngle < MathHelper. ToRadians (0.9f)) viewAngle = MathHelper. ToRadians (1f);

// Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ Esc.

if (keyboardState.IsKeyDown (Keys.Escape))

{

Exit ();

}

}

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π±ΡƒΠ»Π΅Π²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ столкновСний ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

bool IsCollide ()

{

//Для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° BoundingSphere, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ

//Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ сцСны

BoundingSphere b1;

//ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ BoundingSphere для ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

BoundingSphere b = ball. Meshes[0]. BoundingSphere;

//Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ†Π΅Π½Ρ‚Ρ€ сфСры Π² ΡΠΎΠΎΡ‚вСтствии с ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ

//ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

b.Center =avatarPosition;

//ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ для хранСния Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ

Vector3 scale;

//ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ для хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ

Quaternion rotation;

//ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π°Ρ для хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ

Vector3 translation;

//Π¦ΠΈΠΊΠ» ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² сцСны

for (int i = 0; i < 75; i++)

{

//ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ BoundingBox для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

b1 =cls[i]. myModel. Meshes[0].BoundingSphere;

//ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ — Ρ€Π°Π·ΠΌΠ΅Ρ€, ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚, ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

cls[i]. WorldMatrix. Decompose (out scale, out rotation, out translation);

//Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ соотвСтствии с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

b1.Center = translation;

//Если сфСры ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

if (b1.Intersects (b))

{

//Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΠΌ True

return true;

}

} //Если выполняСтся этот ΠΊΠΎΠ΄ ;

//столкновСния Π½Π΅ Π±Ρ‹Π»ΠΎ

//ΠΈ Π²Π΅Ρ€Π½Π΅ΠΌ false

return false;

}

ПослСдний ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° ΠΏΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ самой сцСны ΠΈ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

//Π’Ρ‹Π²ΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² сцСны

void DrawScene ()

{

Components.Clear ();

int i = 0;

//Она Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ плоскости, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

//для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π΅Π½ΡŒ Π±Ρ‹Π»Π° Π²ΠΈΠ΄Π½Π°

Plane pl1 = new Plane (new Vector3(0, -2f, 0), new Vector3(2, -2f, 1), new Vector3(-1, -2f, -2));

//ВывСсти ΠΊΡƒΠ±Ρ‹, располоТСнныС Π² ΠΏΡΡ‚ΡŒ рядов

//ΠΏΠΎ ΠΏΡΡ‚ΡŒ ΡˆΡ‚ΡƒΠΊ Π² Ρ‚Ρ€Π΅Ρ… уровнях

for (int x = 0; x < 5; x++)

{

for (int y = 0; y < 3; y++)

{

for (int z = 0; z < 5; z++)

{

//ДобавляСм Π² ΠΌΠ°ΡΡΠΈΠ² Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

cls[i] = new modCls (this, ball2, graphics, pl1);

//УстанавливаСм Π΅Π³ΠΎ свойства

cls[i]. WorldMatrix = Matrix. CreateTranslation (x * 40, y*3, z * 40);

cls[i]. ViewMatrix = viewMatrix;

cls[i]. ProjectMatrix = projMatrix;

cls[i]. LightDirection = LightDirection;

//ДобавляСм Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

Components .Add (cls[i]);

i++;

}

}

}

ballObj = new modCls (this, ball, graphics, pl1);

ballObj.WorldMatrix = Matrix. CreateRotationY (avatarlRotation) * Matrix. CreateTranslation (avatarPosition);

ballObj.ViewMatrix = viewMatrix;

ballObj.ProjectMatrix = projMatrix;

ballObj.LightDirection = LightDirection;

Components.Add (ballObj);

plane = new modCls (this, Content. Load («plane»), graphics, new Plane ());

//НастраиваСм ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ плоскости

plane.WorldMatrix = Matrix. CreateScale (100) * Matrix. CreateRotationY (MathHelper.ToRadians (90)) *

Matrix.CreateRotationZ (MathHelper.ToRadians (90)) *

Matrix.CreateTranslation (80, -2.5f, 80);

plane.ViewMatrix = viewMatrix;

plane.ProjectMatrix = projMatrix;

plane.LightDirection = LightDirection;

Components.Add (plane);

}

}

}

7. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΉ систСмы.

Рис. 4. Запуск ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Рис. 5. ИзмСнСния освСщСния сцСны, мСстополоТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Рис. 6. ИзмСнСния Π²ΠΈΠ΄Π° ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹

8.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π‘Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½Ρ‹ умСния ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с 3D модСлями Π² 3D max’Π΅ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°, с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ, созданной ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² XNA Studio.

Π‘Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Microsoft Vusial Π‘#, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π°Ρ ряд Π·Π°Π΄Π°Ρ‡. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΈ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ это рСализация двиТСния 3D ΠΌΠΎΠ΄Π΅Π»ΠΈ. Вторая рСализация освСщСния сцСны. Π’Π°ΠΊ ΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²ΠΈΠ΄Π° ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ с Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. ИзмСнСния ΡƒΠ³Π»Π° ΠΎΠ±Π·ΠΎΡ€Π° ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ большС сцСны. И Π·Π°ΠΏΠΈΡΡŒ всСй ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠΎΠ΄Π΅Π»ΡŒΡŽ Π² Π²ΠΈΠ΄Π΅ΠΎ Ρ„Π°ΠΉΠ» Ρ„ΠΎΠΌΠ°Ρ‚Π° *.avi.

9.

Бписок Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ модСль Π²ΠΈΠ΄Π΅ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚

David M. Bourg, Glenn Seeman. AI for Game Developers. — O'Reilly, 2004

Michael Morrison. Teach yourself Game Programming in 24 hours. — Sams Publishing, 2002

Katie Salen, Eric Zimmerman, Rules of Play: Game Design Fundamentals. — MIT Press, 2004

David Franson, 2D Artwork and 3D Modeling for Game Artists. — Premier Press, 2003

Erik Bethke, Game Development and Production — Worldware Publishing, 2003

Π“ΠΎΡ€Π½Π°ΠΊΠΎΠ² Π‘. Π“. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ³Ρ€ ΠΏΠΎΠ΄ Windows Π² XNA Game Studio Express. — Πœ.: Π”ΠœΠš ΠŸΡ€Π΅ΡΡ, 2007.

Π›Π°ΠΌΠΎΡ‚, АндрС. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Ρ… ΠΈΠ³Ρ€ для Windows. Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ профСссионала ΠΏΠΎ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅ ΠΈ Ρ€Π°ΡΡ‚Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠŸΠ΅Ρ€. Ρ Π°Π½Π³Π». — Πœ.: Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π΄ΠΎΠΌ «Π’ΠΈΠ»ΡŒΡΠΌΡ», 2004.

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ microsoft.com ΠΏΠΎ XNA

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