Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π“Ρ€Π°Ρ„ΠΈΠΊΠ° DirectX Π² DelphiΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 53

Автор ΠœΠΈΡ…Π°ΠΈΠ» ΠšΡ€Π°ΡΠ½ΠΎΠ²

Основной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠ±Π΅Π³Π°ΡŽΡ‚ ΠΏΡ€ΠΈ манипуляции с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ, являСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†, осущСствляСмоС ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅:






ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ строк ΠΏΠ΅Ρ€Π΅ΠΌΠ½ΠΎΠΆΠ°Π΅ΠΌΡ‹Ρ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ.

ΠŸΡ€ΠΈ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»Π΅ΠΌ слагаСмых суммы бСрутся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ элСмСнты СдинствСнного столбца Π²Π΅ΠΊΡ‚ΠΎΡ€Π°.

Единичная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, Ρ‚. Π΅. ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, ΠΏΠΎ Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹, Π° всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ, соотвСтствуСт ΠΌΠΈΡ€ΠΎΠ²ΠΎΠΉ систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π”Ρ€ΡƒΠ³ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ - ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° идСнтичности, послС умноТСния Π΅Π΅ Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ получаСтся исходный Π²Π΅ΠΊΡ‚ΠΎΡ€.

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ сдвига ΠΏΠΎ осям X, Y ΠΈ Z выглядят Ρ‚Π°ΠΊ:





Если ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€ (X, Π£, Z, W) Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ сдвига ΠΏΠΎ оси X, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получится Π²Π΅ΠΊΡ‚ΠΎΡ€ (X + W o a, Y, Z, W). Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ всСх Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ сдвига ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎ Π½ΡƒΠΆΠ½ΠΎΠΉ оси.

Π’Ρ€ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ сдвига ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π² ΠΎΠ΄Π½Ρƒ, Π΄Π°ΡŽΡ‰ΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ сдвиг ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ нСскольким осям. ПослСдняя строка Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ значСния Π² столбцах, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π½ΡƒΠΆΠ½Ρ‹ΠΌ осям.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ Π² Direct3D, поясню: Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° устройства Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠΌΠ½ΠΎΠΆΠ°Ρ‚ΡŒΡΡ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π²Π΅Ρ€ΡˆΠΈΠ½ нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π² пространствС. И ΠΏΠΎΠΊΠ° Π² качСствС Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΡƒΠΊΠ°Π·Π°Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° сдвига, всС воспроизводимыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠ΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ Π² пространствС.

Аналогично сдвигу, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ. Для ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π½Π° ΡƒΠ³ΠΎΠ» Π° Π²ΠΎΠΊΡ€ΡƒΠ³ оси X Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π½Π°Π΄ΠΎ ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° Ρ‚Π°ΠΊΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ:





Если ΠΆΠ΅ Π½Π°Π΄ΠΎ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½Π° ΡƒΠ³ΠΎΠ» (3 Π²ΠΎΠΊΡ€ΡƒΠ³ оси Y, Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ:






И послСдняя ситуация с ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ΠΎΠΌ: ΡƒΠ³ΠΎΠ» Ρƒ, ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π²ΠΎΠΊΡ€ΡƒΠ³ оси Z:





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

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

ПослСдняя ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, которая Π½ΡƒΠΆΠ½Π° для получСния ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ сцСны Π½Π° экранС, Ρ‚Π°ΠΊ ΠΈ называСтся - ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ. ЗначСния элСмСнтов этой ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π·Π°Π΄Π°ΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π°, согласно ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ΅Ρ†ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π½Π΅ΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅ΠΉ ΠΎΡ‚ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΡ… плоскостСй, искаТСния, ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ пСрспСктиву (рис. 9.1).





ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΈΠ»ΠΈ части ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ области видимости, Π½Π° экран ΠΏΡ€ΠΎΠ΅Ρ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚, ΠΈ ΠΌΡ‹ ΠΈΡ… Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ.

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ бросили Π±Π΅Π³Π»Ρ‹ΠΉ взгляд Π½Π° сухой тСорСтичСский ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ вынСсли тяТСлоС ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²ΠΏΠ΅Ρ€Π΅Π΄ΠΈ нас ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π±ΡƒΡ€Π΅Π»ΠΎΠΌ кодирования матСматичСских Ρ„ΠΎΡ€ΠΌΡƒΠ». ΠžΡ‚Ρ‡Π°ΡΡ‚ΠΈ это ΠΏΡ€Π°Π²Π΄Π°. Direct3D оставил программисту тяготы пСрСмноТСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†, оТидая ΠΎΡ‚ Π½Π΅Π³ΠΎ Ρ‚Ρ€ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ трансформаций. Однако ΠΌΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ Dxcutiis, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Π½Π°Π±ΠΎΡ€ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Автор пСрСноса Π½Π° Delphi ΠΊΠΎΠ΄Π° этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Π½ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ модуля.

Π’ спискС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° этой Π³Π»Π°Π²Ρ‹, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Ex01, ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‡Π΅Π½ΡŒ простой, Π² пространствС Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°: Ρ€Π°Π·Π½ΠΎΡ†Π²Π΅Ρ‚Π½Ρ‹ΠΉ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ ΠΈ ΠΆΠ΅Π»Ρ‚Ρ‹ΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ (рис. 9.2).





Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΎΠ±Π΅ ΠΈΡ… стороны, Ρ€Π΅ΠΆΠΈΠΌ отсСчСния ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ, Π° для использования ΠΎΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с источником свСта:


with FDBDDevice do begin

SetRenderState(D3DRS_CULLMODE, D3DCULL_HONE);

SetRenderState(D3DRS_LIGHTING, DWORD (False)); end;

Π‘ΡƒΡ„Π΅Ρ€ Π²Π΅Ρ€ΡˆΠΈΠ½ запираСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. БСмь Π²Π΅Ρ€ΡˆΠΈΠ½ содСрТат ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°. Если Π±Ρ‹ ΠΎΠ½ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π½Π΅ трансформируСмыми, Ρ‚ΠΎ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π»ΠΈΡΡŒ Π±Ρ‹ Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π°:


Vertices.X := 0.0; // ΠŸΠ΅Ρ€Π²Π°Ρ Π²Π΅Ρ€ΡˆΠΈΠ½Π° Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°

Vertices.Y := 1.0;

Vertices.Z := 0.0;

Vertices.Color := $00FF0000;

Inc(Vertices);

Vertices.X := 1.0; // Вторая Π²Π΅Ρ€ΡˆΠΈΠ½Π° Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°

Vertices.Y := -1.0;

Vertices.Z := 0.0;

Vertices.Color := $0000FF00;

Inc(Vertices);

Vertices.X := -1.0; // Π’Ρ€Π΅Ρ‚ΡŒΡ Π²Π΅Ρ€ΡˆΠΈΠ½Π° Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°

Vertices.Y := -1.0;

Vertices.Z := 0.0;

Vertices.Color := $000000FF;

Inc(Vertices);

Vertices.X := -1.0; // ΠŸΠ΅Ρ€Π²Π°Ρ Π²Π΅Ρ€ΡˆΠΈΠ½Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°

Vertices.Y := -1.0;

Vertices.Z := 0.0;

Vertices.Color := $00FFFF00;

Inc(Vertices);

Vertices.X := -1.0; // Вторая Π²Π΅Ρ€ΡˆΠΈΠ½Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°

Vertices.Y := 1.0;

Vertices.Z := 0.0;

Vertices.Color := $00FFFF00;

Inc(Vertices);

Vertices.X := 1.0; // Π’Ρ€Π΅Ρ‚ΡŒΡ Π²Π΅Ρ€ΡˆΠΈΠ½Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°

Vertices.Y := -1.0;

Vertices.Z := 0.0;

Vertices.Color := $00FFFF00;

Inc(Vertices);

Vertices.X := 1.0; // ЧСтвСртая Π²Π΅Ρ€ΡˆΠΈΠ½Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°

Vertices.Y := 1.0;

Vertices.Z := 0.0;

Vertices.Color := $00FFFF00;

ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ пСрСрисовкС ΠΊΠ°Π΄Ρ€Π° вызываСтся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°:


procedure TfrmD3D.DrawScene;

var

matView, matProj : TDSDMatrix; // ΠœΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ 4x4

matRotate, matTranslate : TDSDMatrix;

begin

// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π²ΠΎΠΊΡ€ΡƒΠ³ оси X

SetRotateXMatrix(matRotate, Angle); // ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° сдвига ΠΏΠΎ оси X, Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π²Π»Π΅Π²ΠΎ

SetTranslateMatrix(matTranslate, -1.0, 0.0, 0.0); // УстанавливаСм ΠΌΠΈΡ€ΠΎΠ²ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ трансформаций FDSDDevice.SetTransform(D3DTS_WORLD,

MatrixMul(matRotate, matTranslate)); // Выводится Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ

FD3DDevice.DrawPrimiti.ve(D3DPTJTRIANGLELIST, 0, 1); // ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ вращаСтся ΠΏΠΎ оси Y Π² 2 Ρ€Π°Π·Π° быстрСС Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° SetRotateYMatrix(matRotate, 2 * Angle); // ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ сдвигаСтся Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π²ΠΏΡ€Π°Π²ΠΎ

SetTranslateMatrix(matTranslate, 1.0, 0.0, 0.0); // ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° трансформаций для ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°

FD3DDevice.SetTransform(D3DTS_WORLD,

MatrixMul(matTranslate, matRotate)); // Π’Ρ‹Π²ΠΎΠ΄ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°

FD3DDevice.DrawPrimitive(D3DPT_TRIANGLESTRIP, 3, 2); // Π—Π°Π΄Π°Π΅ΠΌ Π²ΠΈΠ΄ΠΎΠ²ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ

SetViewMatrix(matView, D3DVector(0, 0, -5),

D3DVector(0, 0, 0), D3DVector(0, 1, 0)); // УстанавливаСм Π²ΠΈΠ΄ΠΎΠ²ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ

FD3DDevice.SetTransform(D3DTS_VIEW, matView); // Π—Π°Π΄Π°Π΅ΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΉ

SetProjectionMatrix(matProj, I, 1, 1, 10); // УстанавливаСм ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΉ

FD3DDevice.SetTransform(D3DTS_PROJECTION, matProj);

end;


Π’ΠΈΠΏ TD3DMatrix, массив 4x4 вСщСствСнных чисСл, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ DirectxGraphics, Π° всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ - Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ DXGUtils. Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ Ρ‚ΠΈΠΏΠ° HRESULT, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹, для простоты, Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ.

Ѐункция D3DVector этого ΠΆΠ΅ модуля Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ сформированный ΠΏΠΎ Ρ‚Ρ€Π΅ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌ Π²Π΅ΠΊΡ‚ΠΎΡ€, Ρ‚Ρ€ΠΎΠΉΠΊΡƒ вСщСствСнных чисСл, Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ Ρ‚ΠΈΠΏΠ° TD3DVector.

Ѐункция SetRotateXMatrix ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ помСщаСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π²ΠΎΠΊΡ€ΡƒΠ³ оси X. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ - ΡƒΠ³ΠΎΠ», Π² Ρ€Π°Π΄ΠΈΠ°Π½Π°Ρ…, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ осущСствляСтся ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚. Ѐункция SetTranslateMatrix ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ помСщаСтся заполнСнная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° сдвига. ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ ΠΏΠΎ нСскольким осям.

ΠœΠ΅Ρ‚ΠΎΠ΄ setTransform ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° устройства позволяСт ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ трансформаций. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ - константа, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ, для ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ устанавливаСтся трансформация. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ - собствСнно ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° трансформаций. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ сдвига, Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² трансформации участвовало нСсколько ΠΌΠ°Ρ‚Ρ€ΠΈΡ†. Ѐункция MatrixMul позволяСт ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π΄Π²Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

Напоминаю, Ρ‡Ρ‚ΠΎ порядок пСрСчислСния этих ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ΅Π½. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Ρ€Π°Π·Π½ΠΎΡ†Π²Π΅Ρ‚Π½Ρ‹ΠΉ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ поворачиваСтся Π²ΠΎΠΊΡ€ΡƒΠ³ оси X, Π·Π°Ρ‚Π΅ΠΌ сдвигаСтся Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π²Π»Π΅Π²ΠΎ, ΠΏΠΎ этой ΠΆΠ΅ оси.

ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Π½Π°Ρ‡Π°Π»Π΅ сдвигаСтся Π²ΠΏΡ€Π°Π²ΠΎ, Π·Π°Ρ‚Π΅ΠΌ поворачиваСтся Π²ΠΎΠΊΡ€ΡƒΠ³ оси Y (собствСнной оси, Π° Π½Π΅ ΠΌΠΈΡ€ΠΎΠ²ΠΎΠΉ). Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ порядок пСрСмноТСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ.

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

Ѐункция setProjectionMatrix ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ опрСдСлСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°Π΄Π°Π΅Ρ‚ ΡƒΠ³ΠΎΠ» ΠΎΠ±Π·ΠΎΡ€Π° ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎ оси Y, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ - ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅ ΡƒΠ³ΠΎΠ» ΠΎΠ±Π·ΠΎΡ€Π° ΠΏΠΎ оси X, послСдниС Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° - расстояния ΠΎΡ‚ Π³Π»Π°Π·Π° Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»Ρ Π΄ΠΎ Π±Π»ΠΈΠΆΠ½Π΅ΠΉ ΠΈ дальнСй плоскостСй отсСчСния.

ΠŸΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°ΡŽ, Ρ‡Ρ‚ΠΎ послСдниС Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π·ΠΎΠ²ΡƒΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ вопросов, поэтому Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΈΡ… смысл. Пока ΠΆΠ΅ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ смотрим Π½Π° сцСну со стороны оси Z, ΠΈ находимся ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ отсчСта систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π½Π° расстоянии 5 Π΅Π΄ΠΈΠ½ΠΈΡ†.


РСалистичныС изобраТСния

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


* ΠΏΡ€ΠΈ описании ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² Π·Π°Π΄Π°Ρ‚ΡŒ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ; ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ свойство ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°; Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ источник свСта.