Π”ΠΈΠΏΠ»ΠΎΠΌΡ‹, курсовыС, Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚Ρ‹, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅...
Брочная ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² ΡƒΡ‡Ρ‘Π±Π΅

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтами повСрхности

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

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

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтами повСрхности (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠšΠ£Π Π‘ΠžΠ’ΠžΠ™ ΠŸΠ ΠžΠ•ΠšΠ’

Π½Π° Ρ‚Π΅ΠΌΡƒ:

«Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтами повСрхности»

ΠžΡ€Π΅Π», 2010

  • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
  • ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ «ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Срная Π³Ρ€Π°Ρ„ΠΈΠΊΠ°» сущСствуСт ΡƒΠΆΠ΅ Π΄Π°Π²Π½ΠΎ. Π’Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΊΠ΅ΠΌ Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ понятия ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ. Π’ Π½Π°ΡΡ‚оящСС врСмя ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° — это ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ ΠΌΠΈΡ€, Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΌΠΈΡ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм, ΠΈΠ»ΠΈ программирования, это Π½Π΅Ρ‡Ρ‚ΠΎ большСС, Ρ‡Π΅ΠΌ просто Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. Π’ΠΎΠΎΠ±Ρ‰Π΅, всС, Ρ‡Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ рисуСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ — это ΠΈ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°.
  • ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° примСняСтся Π² ΡΠ°ΠΌΡ‹Ρ… Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Ρ… сфСрах Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°: Π² ΠΊΠΈΠ½ΠΎ, Π² ΡΡ„Π΅Ρ€Π΅ Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹, Π² ΠΏΠΎΠ»ΠΈΠ³Ρ€Π°Ρ„ΠΈΠΈ, Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… сфСрах (Ρ‚Π΅Π»Π΅Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅, ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚), Π² ΡΡ„Π΅Ρ€Π΅ игростроСния ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ….
  • Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· ΡΡ‚ΠΎΠ³ΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим Π·Π½Π°Ρ‡ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π½Π° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡˆΠ½ΠΈΠΉ дСнь. ΠšΠΈΠ½ΠΎΠΈΠ½Π΄ΡƒΡΡ‚Ρ€ΠΈΡ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΅ΠΆΠ΅Π³ΠΎΠ΄Π½ΡƒΡŽ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π½ΡƒΡŽ ΠΏΡ€ΠΈΠ±Ρ‹Π»ΡŒ ΠΎΡ‚ Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ соврСмСнныС спСцэффСкты. Π’ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ хотя Π±Ρ‹ Ρ‚Π°ΠΊΠΈΠ΅ извСстныС фантастичСскиС Ρ„ΠΈΠ»ΡŒΠΌΡ‹, ΠΊΠ°ΠΊ Π›ΡŽΠ΄ΠΈ Π² Ρ‡Π΅Ρ€Π½ΠΎΠΌ, ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅. Π’ΠΎ Π²ΡΠ΅Ρ… Π½ΠΈΡ… использовалась ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°, ΡΠΎΠ·Π΄Π°ΡŽΡ‰Π°Ρ эффСкт максимальной рСалистичности происходящСго. Бмотря Π½Π° Π²ΡΠ΅ происходящСС Π² Ρ„ΠΈΠ»ΡŒΠΌΠ΅, создаСтся Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ всС это Π±Ρ‹Π»ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅.
  • ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π° Ρ‚Π΅Π»Π΅Π²ΠΈΠ΄Π΅Π½ΠΈΠΈ. ВсС большС ΠΈ Π±ΠΎΠ»ΡŒΡˆΠ΅ послСднСС врСмя ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ создании красивых Ρ‚Π΅Π»Π΅Π²ΠΈΠ·ΠΈΠΎΠ½Π½Ρ‹Ρ… заставок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Ρ‰Π°ΡŽΡ‚ Π½Π° Ρ‚Π΅Π»Π΅ΠΊΠ°Π½Π°Π»Π°Ρ…. ΠšΡ€Π°ΡΠΈΠ²Ρ‹Π΅ заставки — это Π·Π°Π»ΠΎΠ³ успСха Ρ‚Π΅Π»Π΅ΠΊΠ°Π½Π°Π»Π°. ПослСднСС врСмя проводятся Π΄Π°ΠΆΠ΅ сорСвнования ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅Π»Π΅ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ, Ρƒ ΠΊΠΎΠ³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ заставка. ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° стала самым основный рСсурсом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ затрачиваСтся ΠΏΡ€ΠΈ создании ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… ΠΈΠ³Ρ€. Π›ΡŽΠ±Π°Ρ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° прСдставляСтся Π² ΠΈΠ³Ρ€Π°Ρ… Π² Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΌ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΈΠ»ΠΈ 3d. Π”Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ спСциализированныС графичСскиС Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Maya, 3d-Studio Max.
  • ЦСлью Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ являСтся ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ практичСских Π·Π½Π°Π½ΠΈΠΉ ΠΏΠΎ ΠΊΡƒΡ€ΡΡƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°.
  • Π—Π°Π΄Π°Ρ‡Π°ΠΌΠΈ являСтся ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ основных возмоТностСй создания Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² OpenGL, налоТСния тСкстур.

1. ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

ЦСлью Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ являСтся ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ практичСских Π·Π½Π°Π½ΠΈΠΉ ΠΏΠΎ ΠΊΡƒΡ€ΡΡƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ возмоТностСй OpenGL Π±ΡƒΠ΄Π΅Ρ‚ создана модСль управлСния элСмСнтами повСрхности.

Π—Π°Π΄Π°Ρ‡Π°ΠΌΠΈ являСтся ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ основных возмоТностСй создания Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², налоТСния тСкстур, Ρ€Π°Π±ΠΎΡ‚Π° с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ.

2. ОписаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ

Для упрощСния описания Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ выполнСния

Π±Ρ‹Π» Ρ€Π°Π·Π±ΠΈΡ‚ Π½Π° Ρ‡Π°ΡΡ‚ΠΈ: ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, созданиС повСрхности Π»Π°Π½Π΄ΡˆΠ°Ρ„Ρ‚Π°, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ повСрхности Π»Π°Π½Π΄ΡˆΠ°Ρ„Ρ‚Π°, рСализация ориСнтирования Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…ности.

2.1 ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

Π‘Π½Π°Ρ‡Π°Π»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ

ΠΎΠ±Ρ‰ΠΈΠ΅ свойства сцСны. Для этого создадим ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события onCreate Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ Π·Π°Π½Π΅ΡΠ΅ΠΌ Π² Π½Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

InitOpenGL (Handle);

glViewport (0, 0, ClientWidth-Panel1. Width, ClientHeight);

glClearColor (0,0,0,0);

glEnable (GL_DEPTH_TEST);

glMatrixMode (GL_PROJECTION);

gluPerspective (30.0, ClientWidth / ClientHeight, 0.1, 1000.0);

glMatrixMode (GL_MODELVIEW);

glLoadIdentity;

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ OpenGL ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ связь с ΠΎΠΊΠ½ΠΎΠΌ прилоТСния, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π²Ρ‹Π²ΠΎΠ΄. ПослС получСния контСкста воспроизвСдСния сообщаСм систСмС OpenGL ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ построСния Π² ΡΠΎΠΎΡ‚вСтствии с Π³Π»ΡƒΠ±ΠΈΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ glEnable (GL_DEPTH_TEST). Команда glClearColor опрСдСляСт Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π±ΡƒΡ„Π΅Ρ€ Ρ†Π²Π΅Ρ‚Π° ΠΏΡ€ΠΈ Π΅Π³ΠΎ очисткС, Ρ‚. Π΅. это Π±ΡƒΠ΄Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° — Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ.

2.2 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ повСрхности Π»Π°Π½Π΄ΡˆΠ°Ρ„Ρ‚Π°

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π»Π°Π½Π΄ΡˆΠ°Ρ„Ρ‚, Π±Ρ‹Π»ΠΎ принято Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массив, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ высота ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚:

Var

height:array [-11.11, -11.11] of single;

ΠŸΡ€ΠΈ создании Ρ„ΠΎΡ€ΠΌΡ‹ происходит Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ initmas, которая ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ массив высот:

procedure initmas;

var i, j: integer;

begin

for i:= -11 to 11 do

for j:=-11 to 11 do

begin

height [i, j]: =-1;

end;

end;

РисованиС повСрхности производится Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Draw Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ события OnPaint:

procedure Draw;

for i:=-10 to 10 do

for j:=-10 to 10 do

begin

x:=i*zoom;

z:=j*zoom;

glBindTexture (GL_TEXTURE_2D, MyTextureTex);

glBegin (GL_QUADS);

glTexCoord2f (0.0, 0.0); glVertex3f (x, height [i, j], z);

glTexCoord2f (1.0, 0.0); glVertex3f (x, height [i, j+1], z+zoom);

glTexCoord2f (1.0, 1.0); glVertex3f (x+Zoom, height [i+1, j+1], z+zoom);

glTexCoord2f (0.0, 1.0); glVertex3f (x+Zoom, height [i+1, j], z);

glEnd;

end;

end;

Π’ ΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ массива height строится Π»Π°Π½Π΄ΡˆΠ°Ρ„Ρ‚.

2.3 РСализация ориСнтирования Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…ности

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ наглядно ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»Π°Π½Π΄ΡˆΠ°Ρ„Ρ‚, Π±Ρ‹Π»ΠΎ принято Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΄Π°Ρ‚ΡŒ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»ΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΠΎ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события OnFormKeyDown Ρ„ΠΎΡ€ΠΌΡ‹ занСсСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

case key of

27: Form1. Close;

65: begin

Human. Position. z:=Human. Position. z+

sin (DegToRad (Human. Rotation. y))*SPEED;

Human. Position. x:=Human. Position. x+

cos (DegToRad (Human. Rotation. y))*SPEED;

end;

87: begin

Human. Position. z:=Human. Position. z+

cos (DegToRad (Human. Rotation. y))*SPEED;

Human. Position. x:=Human. Position. x;

sin (DegToRad (Human. Rotation. y))*SPEED;

end;

68: begin

Human. Position. z:=Human. Position. z;

sin (DegToRad (Human. Rotation. y))*SPEED;

Human. Position. x:=Human. Position. x;

cos (DegToRad (Human. Rotation. y))*SPEED;

end;

83: begin

Human. Position. z:=Human. Position. z;

cos (DegToRad (Human. Rotation. y))*SPEED;

Human. Position. x:=Human. Position. x+

sin (DegToRad (Human. Rotation. y))*SPEED;

end;

end;

ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ клавиши измСняСтся позиция Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»Ρ Π² ΠΏΡ€ΠΎΡΡ‚ранствС.

2.4 ИзмСнСниС повСрхности Π»Π°Π½Π΄ΡˆΠ°Ρ„Ρ‚Π°

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ ΠΌΡ‹ ΡΠ½Π°Ρ‡Π°Π»Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ измСняСмой повСрхности. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ рСализуСтся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ GetCoordinate. Π”Π°Π»Π΅Π΅ происходит ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ массива высот:

i:=Trunc (wx);

j:=Trunc (wz);

height [i, j]: =vis;

Π’ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ vis содСрТится Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ измСнится высота.

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

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ всС поставлСнныС Ρ†Π΅Π»ΠΈ, ΠΈΠ·ΡƒΡ‡Π΅Π½Ρ‹ основныС возмоТности создания Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², налоТСния тСкстур ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΡ Π² ΠΏΡ€ΠΎΡΡ‚ранствС.

1. ΠœΠΈΡ…Π°ΠΈΠ» ΠšΡ€Π°ΡΠ½ΠΎΠ², OpenGL Π² Delphi, элСктронный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

2. Π­ΠΉΠ½Π΄ΠΆΠ΅Π», Π­Π΄Π²Π°Ρ€Π΄, Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Π°Ρ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. Π’Π²ΠΎΠ΄Π½Ρ‹ΠΉ курс Π½Π° Π±Π°Π·Π΅ OpenGL, 2 ΠΈΠ·Π΄.: ΠŸΠ΅Ρ€. Ρ Π°Π½Π³Π». — Πœ.: Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π΄ΠΎΠΌ «Π’ΠΈΠ»ΡŒΡΠΌΠ΅», 2001. — 592 с: ΠΈΠ». — ΠŸΠ°Ρ€Π°Π». Ρ‚ΠΈΡ‚. Англ.

3. Π Π°ΠΉΡ‚, OpenGL. Π‘ΡƒΠΏΠ΅Ρ€ΠΊΠ½ΠΈΠ³Π°, 3-Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ [Π­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹ΠΉ рСсурс] / Π Π°ΠΉΡ‚, Π ΠΈΡ‡Π°Ρ€Π΄ Π‘.-ΠΌΠ»., Π›ΠΈΠΏΡ‡Π°ΠΊ, Π‘Π΅Π½Π΄ΠΆΠ°ΠΌΠΈΠ½ // Книги ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ. [Π Π΅ΠΆΠΈΠΌ доступа: http://www.pmg.org.ru/nehe/nehe07.htm

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ А

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, OpenGL, ExtCtrls, Math, StdCtrls, ComCtrls, TEXTURES;

type

TForm1 = class (TForm)

Timer1: TTimer;

Panel1: TPanel;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

TrackBar1: TTrackBar;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Button5: TButton;

Button6: TButton;

procedure FormKeyDown (Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure FormCreate (Sender: TObject);

procedure FormDestroy (Sender: TObject);

procedure Timer1Timer (Sender: TObject);

procedure FormResize (Sender: TObject);

procedure FormPaint (Sender: TObject);

procedure FormMouseMove (Sender: TObject; Shift: TShiftState; X,

Y: Integer);

procedure FormMouseDown (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Button3Click (Sender: TObject);

procedure Button4Click (Sender: TObject);

procedure Button1Click (Sender: TObject);

procedure Button2Click (Sender: TObject);

procedure TrackBar1Change (Sender: TObject);

procedure Button5Click (Sender: TObject);

procedure Button6Click (Sender: TObject);

private

{Private declarations}

public

{Public declarations}

end;

type

User=record

Position:record

x, y, z: Single;

end;

Rotation:record

y, zx: Single;

end;

end;

var

vis:single;

Form1: TForm1;

DC:HDC;

HRC:HGLRC;

Human: User;

MyTextureTex: glUint;

wx, wy, wz: GLdouble; // Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ ΠΌΠΈΡ€ΠΎΠ²Ρ‹Π΅ x, Ρƒ, z ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹

height:array [-11.11, -11.11] of single;

implementation

procedure glBindTexture (target: GLenum; texture: GLuint); stdcall; external opengl32;

{$R *.dfm}

procedure GetCoordinate (const x, y: integer);

var

Viewport: Array [0.3] of GLInt; // ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄Π°

mvMatrix, // ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ

ProjMatrix: Array [0.15] of GLDouble; // ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΉ

RealY: GLint; // OpenGL Ρƒ — ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°

Zval: GLfloat; // оконная z — ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°

Begin

glGetIntegerv (GL_VIEWPORT, @Viewport); // ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° области Π²Ρ‹Π²ΠΎΠ΄Π°

// заполняСм массивы ΠΌΠ°Ρ‚Ρ€ΠΈΡ†

glGetDoublev (GL_MODELVIEW_MATRIX, @mvMatrix);

glGetDoublev (GL_PROJECTION_MATRIX, @ProjMatrix); // viewport[3] - высота ΠΎΠΊΠ½Π° Π² ΠΏΠΈΠΊΡΠ΅Π»Π°Ρ…, соотвСтствуСт Height

RealY:= viewport[3] - Y — 1;

FloatToStr (RealY);

glReadPixels (X, RealY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, @Zval);

gluUnProject (X, RealY, Zval,

@mvMatrix, @ProjMatrix, @Viewport, wx, wy, wz);

end;

procedure initmas;

var i, j: integer;

begin

for i:= -11 to 11 do

for j:=-11 to 11 do

begin

height [i, j]: =-1;

end;

end;

procedure changemas;

var i, j: integer;

begin

i:=Trunc (wx);

j:=Trunc (wz);

height [i, j]: =vis;

end;

procedure Draw;

var i, j: integer;

x, z: integer;

zoom:integer;

begin

glColor3f (1,0,0);

glPointSize (5);

glBegin (GL_POINTS);

glVertex3f (wx, wy, wz);

glEnd;

zoom:=1;

glColor3f (0. 7,1. 0,0.7);

for i:=-10 to 10 do

for j:=-10 to 10 do

begin

x:=i*zoom;

z:=j*zoom;

glPointSize (1);

glBindTexture (GL_TEXTURE_2D, MyTextureTex);

glBegin (GL_QUADS);

glTexCoord2f (0.0, 0.0); glVertex3f (x, height [i, j], z);

glTexCoord2f (1.0, 0.0); glVertex3f (x, height [i, j+1], z+zoom);

glTexCoord2f (1.0, 1.0); glVertex3f (x+Zoom, height [i+1, j+1], z+zoom);

glTexCoord2f (0.0, 1.0); glVertex3f (x+Zoom, height [i+1, j], z);

glEnd;

end;

end;

procedure TForm1. FormKeyDown (Sender: TObject; var Key: Word;

Shift: TShiftState);

const

SPEED=0.2;

begin

case key of

27: Form1. Close;

65: begin

Human. Position. z:=Human. Position. z+

sin (DegToRad (Human. Rotation. y))*SPEED;

Human. Position. x:=Human. Position. x+

cos (DegToRad (Human. Rotation. y))*SPEED;

end;

87: begin

Human. Position. z:=Human. Position. z+

cos (DegToRad (Human. Rotation. y))*SPEED;

Human. Position. x:=Human. Position. x;

sin (DegToRad (Human. Rotation. y))*SPEED;

end;

68: begin

Human. Position. z:=Human. Position. z;

sin (DegToRad (Human. Rotation. y))*SPEED;

Human. Position. x:=Human. Position. x;

cos (DegToRad (Human. Rotation. y))*SPEED;

end;

83: begin

Human. Position. z:=Human. Position. z;

cos (DegToRad (Human. Rotation. y))*SPEED;

Human. Position. x:=Human. Position. x+

sin (DegToRad (Human. Rotation. y))*SPEED;

end;

end;

end;

procedure SetDCPixelFormat;

var

pfd:TPixelFormatDescriptor;

nPixelFormat: Integer;

begin

FillChar (pfd, SizeOf (pfd), 0);

pfd.dwFlags:=PFD_DRAW_TO_WINDOW or

PFD_DOUBLEBUFFER or

PFD_SUPPORT_OPENGL;

nPixelFormat:=ChoosePixelFormat (DC,@pfd);

SetPixelFormat (DC, nPixelFormat,@pfd);

end;

procedure TForm1. Button1Click (Sender: TObject);

begin

Human. Rotation. y:=Human. Rotation. y-4;

if Human. Rotation. y>=360 then Human. Rotation. y:=0;

if Human. Rotation. y<0 then Human. Rotation. y:=360;

end;

procedure TForm1. Button2Click (Sender: TObject);

begin

Human. Rotation. y:=Human. Rotation. y+4;

if Human. Rotation. y>=360 then Human. Rotation. y:=0;

if Human. Rotation. y<0 then Human. Rotation. y:=360;

end;

procedure TForm1. Button3Click (Sender: TObject);

begin

glPolygonMode (GL_FRONT_AND_BACK, GL_LINE);

end;

procedure TForm1. Button4Click (Sender: TObject);

begin

glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);

end;

procedure TForm1. Button5Click (Sender: TObject);

begin

Human. Rotation. zx:=Human. Rotation. zx+0.2;

end;

procedure TForm1. Button6Click (Sender: TObject);

begin

Human. Rotation. zx:=Human. Rotation. zx-0.2;

end;

procedure TForm1. FormCreate (Sender: TObject);

begin

vis:=0;

initmas;

DC:=GetDC (Handle);

SetDCPixelFormat;

HRC:=wglCreateContext (DC);

wglMakeCurrent (DC, HRC);

glViewport (0, 0, ClientWidth-Panel1. Width, ClientHeight);

glClearColor (0,0,0,0);

glEnable (GL_DEPTH_TEST);

glMatrixMode (GL_PROJECTION);

glLoadIdentity;

gluPerspective (30.0, ClientWidth / ClientHeight, 0.1, 1000.0);

glMatrixMode (GL_MODELVIEW);

glLoadIdentity;

glEnable (GL_TEXTURE_2D); // Enable Texture Mapping

LoadTexture ('texture.bmp', MyTextureTex, FALSE);

with Human do

begin

with Position do

begin

x:=6.4;

y:=0;

z:=-0.3878;

end;

with Rotation do

begin

y:=91;

zx:=10;

end;

end;

end;

procedure TForm1. FormDestroy (Sender: TObject);

begin

wglMakeCurrent (0,0);

wglDeleteContext (HRC);

ReleaseDC (Handle, DC);

DeleteDC (DC);

end;

procedure TForm1. Timer1Timer (Sender: TObject);

begin

InvalidateRect (Handle, nil, false);

end;

procedure TForm1. TrackBar1Change (Sender: TObject);

begin

Label2. Caption:=floattostr (TrackBar1. Position);

vis:=TrackBar1. Position;

end;

procedure TForm1. FormResize (Sender: TObject);

begin

glViewport (0, 0, ClientWidth-Panel1. Width, ClientHeight);

glMatrixMode (GL_PROJECTION);

glLoadIdentity;

gluPerspective (30.0, ClientWidth / ClientHeight, 0.1, 1000.0);

glMatrixMode (GL_MODELVIEW);

glLoadIdentity;

end;

procedure TForm1. FormPaint (Sender: TObject);

var

ps:TPaintStruct;

Const

LPos: Array [0.3] of GLFloat = (3.0, 10, -100.0, 1.0);

begin

BeginPaint (Handle, ps);

glClear (GL_COLOR_BUFFER_BIT or

GL_DEPTH_BUFFER_BIT);

glLoadIdentity;

glRotatef (Human. Rotation. zx, Abs (cos (DegToRad (Human. Rotation. y))), 0,0);

glRotatef (Human. Rotation. y, 0,1,0);

glTranslatef (Human. Position. x,

Human. Position. y,

Human. Position. z);

Draw;

EndPaint (Handle, ps);

SwapBuffers (DC);

end;

procedure TForm1. FormMouseDown (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

changemas;

end;

procedure TForm1. FormMouseMove (Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

GetCoordinate (x, y);

end;

end.

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