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

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ

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

Π’ Ρ‚Π°ΠΊΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π² Π»Π΅Π²ΠΎΠΉ части экрана располагаСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° тСкстур ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² nVidia, Π° Π² ΠΏΡ€Π°Π²ΠΎΠΉ части — модСль, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅Ρ€Ρ‚ΡƒΡ‚ΡŒ, ΠΎΡ‚Π΄Π°Π»ΡΡ‚ΡŒ, ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ°Ρ‚ΡŒ, выбирая Π»ΡƒΡ‡ΡˆΠΈΠΉ ракурс ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ 2D ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΏΠ΅Π½Ρ‚Π°Π³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов Save Viewport to File, послС Ρ‡Π΅Π³ΠΎ появляСтся стандартноС ΠΎΠΊΠ½ΠΎ для сохранСния Ρ„Π°ΠΉΠ»Π° с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ для сохранСния… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

[Π’Π²Π΅Π΄ΠΈΡ‚Π΅ тСкст]

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚

ΠšΡƒΡ€ΡΠΎΠ²Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° посвящСна ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ соврСмСнных Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² высокого уровня. Она Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π° Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Π½ΠΈΠΉ ΠΎ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°Ρ… написанных Π½Π° Π²Ρ‹ΡΠΎΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΌ языкС ΠΈ ΡΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… создания рСалистичных 3D ΠΈ 2D ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π’ Π²ΠΈΠ΄Ρƒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ Π² Ρ…ΠΎΠ΄ΠΈΡ‚ курс изучСния ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ останСтся Π½Π° Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅. Π Π°Π±ΠΎΡ‚Π° содСрТит Π² ΡΠ΅Π±Π΅ ΠΊΠΎΠ΄ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π° (см. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅), ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС структурных элСмСнтов ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ программирования ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ².

Π—Π°Π΄Π°Ρ‡Π° курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ — ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Для этого Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ язык HLSL ΠΈ ΡΡ€Π΅Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ FX Composer ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ nVidia, созданная для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΡΠ·Ρ‹ΠΊΠ°ΠΌΠΈ программирования ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² высокого уровня ΠΈ ΠΈΡ… ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Π°ΠΌΠΈ nVidia. Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ основы взята модСль пистолСта с ΡΠ°ΠΉΡ‚Π° http://3dlenta.com/ ΠΈ Ρ‚Скстура ΠΌΠ΅Ρ‚Π°Π»Π»Π° ΠΈΠ· ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° nVidia. На Π²Ρ‹Ρ…ΠΎΠ΄Π΅ я ΠΏΠΎΠ»ΡƒΡ‡Ρƒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅.bmp.

HLSL (High Level Shader Language) — высокоуровнСвый Π‘ΠΈ-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ язык для написания ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ², Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Microsoft ΠΈ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ DirectX. Аналоги: GLSL (OpenGL), Cg (OpenGL, Direct3D).

HLSL ΠΏΡ€ΠΈΡˆΠ΅Π» Π½Π° ΡΠΌΠ΅Π½Ρƒ ассСмблСрному ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π½ΠΎΠΌΡƒ языку ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ся ΠΊΠ°ΠΊ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ язык для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². ДоступСн для Direct3D начиная с Π²Π΅Ρ€ΡΠΈΠΈ 9.0 (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π½Π° HLSL ΠΈ asm). Начиная с Direct3D10 ассСмблСрныС вставки Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹. [1]

HLSL являСтся соврСмСнным ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ языком программирования ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π±Π΅Π· особых усилий ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ красивыС 3-Ρ… ΠΈ 2-Ρ… ΠΌΠ΅Ρ€Π½Ρ‹Π΅ изобраТСния. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ срСд Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ этот язык. Π― Π² ΡΠ²ΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ срСду Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ nVidia FX Composer, которая поддСрТиваСтся ΠΈ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ распространяСтся ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ nVidia.

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

ΠŸΡ€ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π΅ слоТных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² трСбуСтся большая Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΈ Π΄Π»Ρ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Ρƒ ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π² Π±ΠΎΠ»Π΅Π΅ соврСмСнной Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нСгласноС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ: всС Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ — считай сам, всС Ρ‡Ρ‚ΠΎ нСльзя ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ самому считай Π² Π²Π΅Ρ€ΡˆΠΈΠ½Π½ΠΎΠΌ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π΅, Π° Π²ΡΠ΅ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Π² ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½ΠΎΠΌ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ обусловлСн Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ ΠΈ Π±Π΅Π· Ρ‚ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½ вычислСниями, ΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ вычислСния Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠΈ всСго создания изобраТСния. [2]

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

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

Π’ Π²ΠΈΠ΄Ρƒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π½Π°ΠΊΠΎΠΌ с Ρ‚Π΅ΠΌΠΎΠΉ я ΡΠ»Π°Π±ΠΎ, Ρ‚ΠΎ ΠΌΠΎΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ ΠΎΡ‚ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… дСйствий Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ².

Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ с Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² nVidia тСкстуру, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ Π·Π°Π΄ΡƒΠΌΠΊΠ΅ Π°Π²Ρ‚ΠΎΡ€Π°.

БрСдствами ComposerΠ° Π½Π°Π»ΠΎΠΆΠΈΡ‚ΡŒ тСкстуру Π½Π° ΠΌΠΎΠ΄Π΅Π»ΡŒ.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ источник свСта. Π’Ρ‹Π΄Π΅Π»ΠΈΠ² источник свСта с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΡΠ²ΠΈΠ²ΡˆΠΈΡ…ΡΡ Ρ‚Ρ€Π΅Ρ… Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² (ΠΏΠΎ ΠΎΡΡΠΌ x, y, z), ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ источник свСта Π² Π½ΡƒΠΆΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, добившись Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ освСщСния. ΠŸΡ€ΠΎΠΈΠ·Π²Π΅ΡΡ‚ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ изобраТСния для получСния Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°.

ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°

Π‘Ρ€Π΅Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: nVidia FX Composer.

Π―Π·Ρ‹ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: HLSL.

АппаратныС трСбования: Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Π° — nVidia с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Directx 9.0 ΠΈ Π²Ρ‹ΡˆΠ΅, процСссор — 1 Π³Π“Ρ†, опСративная ΠΏΠ°ΠΌΡΡ‚ΡŒ — 512 mb.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° состоит ΠΈΠ· 4 Ρ‚Π΅Ρ…Π½ΠΈΠΊ (Simple, Textured, SimpleFalloff, TexturedFalloff), ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²Π΅Ρ€ΡˆΠΈΠ½Π½ΠΎΠ³ΠΎ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π° (std_dp_VS), 5 ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹Ρ… ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² (metal_shared, metalPS, metalPS_t, metalQPS, metalQPS_t).

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ На Π²Ρ…ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ я ΠΏΠΎΠ΄Π°ΡŽ модСль ΠΈ Ρ‚Скстуру, Π° Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ².

МодСль Π±Ρ‹Π»Π° скачана с ΡΠ°ΠΉΡ‚Π° http://netlib.narod.ru

Рис. 1

ВСкстура Π±Ρ‹Π»Π° скачана с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ рСпозитория тСкстур nVidia.

Рис. 2

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ сайта nVidia http://developer.download.nvidia.com. ПослС установки Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ярлыком с Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ стола ΠΈΠ»ΠΈ ΠΈΠ· ΠΌΠ΅Π½ΡŽ «ΠŸΡƒΡΠΊ». Π‘ΠΎΠ»Π΅Π΅ подробная информация Π΄Π°Π½Π° Π΄Π°Π»Π΅Π΅ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ интСрфСйса.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π° ΡΠ°ΠΉΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅, Ρ‚Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠ°Π½ΡƒΠ°Π» ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡŽ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ языкС.

ОписаниС интСрфСйса

Рис. 3

ПослС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ появляСтся ΠΎΠΊΠ½ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰Π΅Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π½Π΅Π΄Π°Π²Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ нСсколько ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ссылок Π½Π° Π³Π°ΠΉΠ΄ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² ΠΈ Ρ„ΠΎΡ€ΡƒΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

ПослС Π²Ρ‹Π±ΠΎΡ€Π° Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° открываСтся интСрфСйс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° (Ρ‚.ΠΊ. ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ Π±Ρ‹Π» Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ для удобства Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²ΠΎ Π²Ρ€Π΅ΠΌΡ послСднСго запуска).

Рис. 4

Π’ Π»Π΅Π²ΠΎΠΉ части ΠΎΠΊΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΎΠΊΠ½Π° Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ ΠΏΠΎ Ρ‚Скстурам ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°ΠΌ, Π² Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ — пустоС ΠΎΠΊΠ½ΠΎ для рСдактирования ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ заполнится тСкстом послС Π²Ρ‹Π±ΠΎΡ€Π° тСкстуры ΠΈΠ»ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π° Π² ΠΏΡ€Π°Π²ΠΎΠΉ части ΠΎΠΊΠ½ΠΎ свойств ΠΈ ΠΌΠΎΡ закончСнная модСль. Π§Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠΎΠ΄Π΅Π»ΡŒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ Π² Ρ€Π΅ΠΆΠΈΠΌ PowerUser: Edit — Layouts — PowerUser.

Рис. 5

Π’ Ρ‚Π°ΠΊΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π² Π»Π΅Π²ΠΎΠΉ части экрана располагаСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° тСкстур ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² nVidia, Π° Π² ΠΏΡ€Π°Π²ΠΎΠΉ части — модСль, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅Ρ€Ρ‚ΡƒΡ‚ΡŒ, ΠΎΡ‚Π΄Π°Π»ΡΡ‚ΡŒ, ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ°Ρ‚ΡŒ, выбирая Π»ΡƒΡ‡ΡˆΠΈΠΉ ракурс ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ 2D ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΏΠ΅Π½Ρ‚Π°Π³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов Save Viewport to File, послС Ρ‡Π΅Π³ΠΎ появляСтся стандартноС ΠΎΠΊΠ½ΠΎ для сохранСния Ρ„Π°ΠΉΠ»Π° с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ для сохранСния ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ изобраТСния. bmp,.jpeg,.png.

Π’Π°ΠΊΠΎΠΉ Ρ€Π΅ΠΆΠΈΠΌ интСрфСйса ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π΅Π½ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΊΠ°ΠΊ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…, Ρ‚Π°ΠΊ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΠΊΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π² ΡΡ‚ΠΎΠΉ области (Π½Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²), Ρ‚.ΠΊ. позволяСт ΠΈ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² Π±ΠΎΠ»ΡŒΡˆΠΎΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ дСйствия, быстро Π½Π°ΠΉΡ‚ΠΈ Π½ΠΎΠ²ΡƒΡŽ тСкстуру, Π° Ρ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… мСню ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ свойства ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, Ссли ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ знания.

Π’Π°ΠΊ ΠΆΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ источника свСта, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ½ΠΎΠΏΠΊΠΈ Add Point Light.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ½ΠΎΠΏΠΎΠΊ New ΠΈ Open ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΡƒΠΆΠ΅ созданный ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ½ΠΎΠΏΠΊΠΈ Import ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΅Ρ‰Π΅ модСль ΠΈΠ»ΠΈ тСкстуру.

ОписаниС структурных элСмСнтов ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π’Π΅Ρ€ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ std_dp_VS опрСдСляСт Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ Π² ΡΠΎΠΎΡ‚вСтствии с Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠΎΠΉ примСняСт тСкстуру.

ΠŸΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ metal_shared Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΈ Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ тСкстурС.

ΠŸΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ metalPS осущСствляСт ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΡƒ Ρ†Π²Π΅Ρ‚Π°.

ΠŸΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ metalPS_t осущСствляСт ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚Π° Π² ΠΌΠΈΡ€ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ… ΠŸΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ metalQPS осущСствляСт ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΡƒ отраТСния ΠΈ ΠΈΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠ° свСта ΠŸΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ metalQPS_t ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ отраТСния ΠΈ Ρ‚Π΅Π½ΠΈ Π½Π° Π»ΠΈΡ†Π΅Π²ΠΎΠΉ сторонС ΠΌΠΎΠ΄Π΅Π»ΠΈ.

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ²:

ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Рис. 6

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

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

1. http://ru.wikipedia.org/wiki/HLSL

2. http://www.gamedev.ru

3. http://netlib.narod.ru

4. http://developer.download.nvidia.com

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

// #define _XSI_/* predefined when running in XSI */

// #define TORQUE/* predefined in TGEA 1.7 and up */

// #define _3DSMAX_/* predefined in 3DS Max */

#ifdef _3DSMAX_

int ParamID = 0×0003;/* Used by Max to select the correct parser */

#endif /* _3DSMAX_ */

#ifdef _XSI_

#define Main Static/* Technique name used for export to XNA */

#endif /* _XSI_ */

#ifndef FXCOMPOSER_VERSION/* for very old versions */

#define FXCOMPOSER_VERSION 180

#endif /* FXCOMPOSER_VERSION */

#ifndef DIRECT3D_VERSION

#define DIRECT3D_VERSION 0×900

#endif /* DIRECT3D_VERSION */

#define FLIP_TEXTURE_Y/* Different in OpenGL & DirectX */

/*** EFFECT-SPECIFIC CODE BEGINS HERE *********************/

/******* Lighting Macros *******/

/** To use «Object-Space» lighting definitions, change these two macros: **/

#define LIGHT_COORDS «World»

// #define OBJECT_SPACE_LIGHTS /* Define if LIGHT_COORDS is «Object» */

float Script: STANDARDSGLOBAL <

string UIWidget = «none» ;

string ScriptClass = «object» ;

string ScriptOrder = «standard» ;

string ScriptOutput = «color» ;

// string Script = «Technique=Technique?Simple:Simple10:Textured:Textured10:SimpleFalloff:SimpleFalloff10:TexturedFalloff:TexturedFalloff10;» ;

> = 0.8;

/**** UNTWEAKABLES: Hidden & Automatically-Tracked Parameters **********/

// transform object vertices to world-space:

float4x4 gWorldXf: World < string UIWidget="None"; >;

// transform object normals, tangents, & binormals to world-space:

float4x4 gWorldITXf: WorldInverseTranspose < string UIWidget="None"; >;

// transform object vertices to view space and project them in perspective:

float4x4 gWvpXf: WorldViewProjection < string UIWidget="None"; >;

// provide tranform from «view» or «eye» coords back to world-space:

float4x4 gViewIXf: ViewInverse < string UIWidget="None"; >;

/************* TWEAKABLES **************/

// «DirPos» Lamp 0 /////////

float4 gLamp0DirPos: POSITION < // or direction, if W==0

string Object = «Light0» ;

string UIName = «Lamp 0 Position/Direction» ;

string Space = (LIGHT_COORDS);

> = {-0.5f, 2.0f, 1.25f, 1.0};

float3 gLamp0Color: SPECULAR <

string UIName = «Lamp 0» ;

string Object = «Light0» ;

string UIWidget = «Color» ;

> = {1.0f, 1.0f, 1.0f};

float gLamp0Intensity <

string UIWidget = «slider» ;

float UIMin = 1.0;

float UIMax = 10 000.0f;

float UIStep = 0.1;

string UIName = «Lamp 0 Quadratic Intensity» ;

> = 1.0f;

// Ambient Light

float3 gAmbiColor: AMBIENT <

string UIName = «Ambient Light» ;

string UIWidget = «Color» ;

> = {0.07f, 0.07f, 0.07f};

// surface color

float3 gSurfaceColor: DIFFUSE <

string UIName = «Surface» ;

string UIWidget = «Color» ;

> = {1,1,1};

float gSpecExpon <

string UIWidget = «slider» ;

float UIMin = 1.0;

float UIMax = 128.0;

float UIStep = 1.0;

string UIName = «Specular Exponent» ;

> = 12.0;

float gKd <

string UIWidget = «slider» ;

float UIMin = 0.0;

float UIMax = 1.0;

float UIStep = 0.01;

string UIName = «Diffuse» ;

> = 0.1;

float gKr <

string UIWidget = «slider» ;

float UIMin = 0.0;

float UIMax = 1.0;

float UIStep = 0.05;

string UIName = «Reflection» ;

> = 0.2;

texture gColorTexture: DIFFUSE <

string ResourceName = «default_color.dds» ;

string UIName = «Diffuse Texture» ;

string ResourceType = «2D» ;

>;

sampler2D gColorSampler = sampler_state {

Texture = ;

#if DIRECT3D_VERSION >= 0xa00

Filter = MIN_MAG_MIP_LINEAR;

#else /* DIRECT3D_VERSION < 0xa00 */

MinFilter = Linear;

MipFilter = Linear;

MagFilter = Linear;

#endif /* DIRECT3D_VERSION */

AddressU = Wrap;

AddressV = Wrap;

};

texture gEnvTexture: ENVIRONMENT <

string ResourceName = «default_reflection.dds» ;

string UIName = «Environment» ;

string ResourceType = «Cube» ;

>;

samplerCUBE gEnvSampler = sampler_state {

Texture = ;

#if DIRECT3D_VERSION >= 0xa00

Filter = MIN_MAG_MIP_LINEAR;

#else /* DIRECT3D_VERSION < 0xa00 */

MinFilter = Linear;

MipFilter = Linear;

MagFilter = Linear;

#endif /* DIRECT3D_VERSION */

AddressU = Clamp;

AddressV = Clamp;

AddressW = Clamp;

};

/************* DATA STRUCTS **************/

/* data from application vertex buffer */

struct appdata {

float3 Position: POSITION;

float4 UV: TEXCOORD0;

float4 Normal: NORMAL;

float4 Tangent: TANGENT0;

float4 Binormal: BINORMAL0;

};

/* data passed from vertex shader to pixel shader */

struct vertexOutput {

float4 HPosition: POSITION;

float2 UV: TEXCOORD0;

// The following values are passed in «World» coordinates since

// it tends to be the most flexible and easy for handling

// reflections, sky lighting, and other «global» effects.

float3 LightVec: TEXCOORD1;

float3 WorldNormal: TEXCOORD2;

float3 WorldTangent: TEXCOORD3;

float3 WorldBinormal: TEXCOORD4;

float3 WorldView: TEXCOORD5;

};

/*********** vertex shader for pixel-shaded versions ******/

/*********** Generic Vertex Shader ******/

vertexOutput std_dp_VS (appdata IN,

uniform float4x4 WorldITXf, // our four standard «untweakable» xforms

uniform float4x4 WorldXf,

uniform float4x4 ViewIXf,

uniform float4x4 WvpXf,

uniform float4 LampDirPos

) {

vertexOutput OUT = (vertexOutput)0;

OUT.WorldNormal = mul (IN.Normal, WorldITXf).xyz;

OUT.WorldTangent = mul (IN.Tangent, WorldITXf).xyz;

OUT.WorldBinormal = mul (IN.Binormal, WorldITXf).xyz;

float4 Po = float4(IN.Position.xyz, 1);

float4 Pw = mul (Po, WorldXf);// convert to «world» space

#ifdef OBJECT_SPACE_LIGHTS

float4 Lw = mul (LampDirPos, WorldXf);// convert to «world» space

#else /* !OBJECT_SPACE_LIGHTS — standard world-space lights */

float4 Lw = LampDirPos;

#endif /* !OBJECT_SPACE_LIGHTS */

if (Lw.w == 0) {

OUT.LightVec = -normalize (Lw.xyz);

} else {

// we are still passing a (non-normalized) vector

OUT.LightVec = Lw. xyz — Pw. xyz;

}

#ifdef FLIP_TEXTURE_Y

OUT.UV = float2(IN.UV.x,(1.0-IN.UV.y));

#else /* !FLIP_TEXTURE_Y */

OUT.UV = IN.UV.xy;

#endif /* !FLIP_TEXTURE_Y */

OUT.WorldView = normalize (ViewIXf[3]. xyz — Pw. xyz);

OUT.HPosition = mul (Po, WvpXf);

return OUT;

}

/********* pixel shaders ********/

void metal_shared (vertexOutput IN,

uniform float Kd,

uniform float SpecExpon,

uniform float Kr,

uniform samplerCUBE EnvSampler,

float3 LightColor,

uniform float3 AmbiColor,

out float3 DiffuseContrib,

out float3 SpecularContrib)

{

float3 Ln = normalize (IN.LightVec.xyz);

float3 Nn = normalize (IN.WorldNormal);

float3 Vn = normalize (IN.WorldView);

float3 Hn = normalize (Vn + Ln);

float4 litV = lit (dot (Ln, Nn), dot (Hn, Nn), SpecExpon);

DiffuseContrib = litV. y * Kd * LightColor + AmbiColor;

SpecularContrib = litV. z * LightColor;

float3 reflVect = -reflect (Vn, Nn);

float3 ReflectionContrib = Kr * texCUBE (EnvSampler, reflVect).rgb;

SpecularContrib += ReflectionContrib;

}

float4 metalPS (vertexOutput IN,

uniform float3 SurfaceColor,

uniform float Kd,

uniform float SpecExpon,

uniform float Kr,

uniform samplerCUBE EnvSampler,

uniform float3 LampColor,

uniform float3 AmbiColor

): COLOR {

float3 diffContrib;

float3 specContrib;

metal_shared (IN, Kd, SpecExpon, Kr,

EnvSampler, LampColor, AmbiColor,

diffContrib, specContrib);

float3 result = SurfaceColor * (specContrib + diffContrib);

return float4(result, 1);

}

float4 metalPS_t (vertexOutput IN,

uniform float3 SurfaceColor,

uniform sampler2D ColorSampler,

uniform float Kd,

uniform float SpecExpon,

uniform float Kr,

uniform samplerCUBE EnvSampler,

uniform float3 LampColor,

uniform float3 AmbiColor

): COLOR {

float3 diffContrib;

float3 specContrib;

metal_shared (IN, Kd, SpecExpon, Kr,

EnvSampler, LampColor, AmbiColor,

diffContrib, specContrib);

float3 map = tex2D (ColorSampler, IN. UV).xyz;

float3 result = SurfaceColor * map * (specContrib + diffContrib);

return float4(result, 1);

}

float4 metalQPS (vertexOutput IN,

uniform float3 SurfaceColor,

uniform float Kd,

uniform float SpecExpon,

uniform float Kr,

uniform samplerCUBE EnvSampler,

uniform float3 LampColor,

uniform float LampIntensity,

uniform float3 AmbiColor

): COLOR {

float3 diffContrib;

float3 specContrib;

float3 Cl = (LampIntensity/dot (IN.LightVec.xyz, IN.LightVec.xyz)) * LampColor;

metal_shared (IN, Kd, SpecExpon, Kr,

EnvSampler, Cl, AmbiColor,

diffContrib, specContrib);

float3 result = SurfaceColor * (specContrib + diffContrib);

return float4(result, 1);}

float4 metalQPS_t (vertexOutput IN,

uniform float3 SurfaceColor,

uniform sampler2D ColorSampler,

uniform float Kd,

uniform float SpecExpon,

uniform float Kr,

uniform samplerCUBE EnvSampler,

uniform float3 LampColor,

uniform float LampIntensity,

uniform float3 AmbiColor

): COLOR {

float3 diffContrib;

float3 specContrib;

float3 Cl = (LampIntensity/dot (IN.LightVec.xyz, IN.LightVec.xyz)) * LampColor;

metal_shared (IN, Kd, SpecExpon, Kr,

EnvSampler, Cl, AmbiColor,

diffContrib, specContrib);

float3 map = tex2D (ColorSampler, IN. UV).xyz;

float3 result = SurfaceColor * map * (diffContrib+specContrib);

return float4(result, 1);}

/// TECHNIQUES ////////////////////////

#if DIRECT3D_VERSION >= 0xa00

// Standard DirectX10 Material State Blocks

RasterizerState DisableCulling {CullMode = NONE;};

DepthStencilState DepthEnabling {DepthEnable = TRUE;};

DepthStencilState DepthDisabling {

DepthEnable = FALSE;

DepthWriteMask = ZERO;};

BlendState DisableBlend {BlendEnable[0] = FALSE;};

technique10 Simple10 <

string Script = «Pass=p0;» ;

> {

pass p0 <

string Script = «Draw=geometry;» ;

> {

SetVertexShader (CompileShader (vs4_0, std_dp_VS (gWorldITXf, gWorldXf,

gViewIXf, gWvpXf,

gLamp0DirPos)));

SetGeometryShader (NULL);

SetPixelShader (CompileShader (ps4_0, metalPS (gSurfaceColor,

gKd, gSpecExpon, gKr,

gEnvSampler,

gLamp0Color, gAmbiColor)));

SetRasterizerState (DisableCulling);

SetDepthStencilState (DepthEnabling, 0);

SetBlendState (DisableBlend, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF);}}

#endif /* DIRECT3D_VERSION >= 0xa00 */

technique Simple <

string Script = «Pass=p0;» ;

> {pass p0 <

string Script = «Draw=geometry;» ;

> {

VertexShader = compile vs3_0 std_dp_VS (gWorldITXf, gWorldXf,

gViewIXf, gWvpXf,

gLamp0DirPos);

ZEnable = true;

ZWriteEnable = true;

ZFunc = LessEqual;

AlphaBlendEnable = false;

CullMode = None;

PixelShader = compile ps3_0 metalPS (gSurfaceColor,

gKd, gSpecExpon, gKr,

gEnvSampler,

gLamp0Color, gAmbiColor);

}

}

#if DIRECT3D_VERSION >= 0xa00

technique10 Textured10 <

string Script = «Pass=p0;» ;

> { pass p0 <

string Script = «Draw=geometry;» ;

> {

SetVertexShader (CompileShader (vs4_0, std_dp_VS (gWorldITXf, gWorldXf,

gViewIXf, gWvpXf,

gLamp0DirPos)));

SetGeometryShader (NULL);

SetPixelShader (CompileShader (ps4_0, metalPS_t (gSurfaceColor, gColorSampler,

gKd, gSpecExpon, gKr,

gEnvSampler,

gLamp0Color, gAmbiColor)));

SetRasterizerState (DisableCulling);

SetDepthStencilState (DepthEnabling, 0);

SetBlendState (DisableBlend, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF);}}

#endif /* DIRECT3D_VERSION >= 0xa00 */

technique Textured <

string Script = «Pass=p0;» ;

> {

pass p0 <

string Script = «Draw=geometry;» ;

> {

VertexShader = compile vs3_0 std_dp_VS (gWorldITXf, gWorldXf,

gViewIXf, gWvpXf,

gLamp0DirPos);

ZEnable = true;

ZWriteEnable = true;

ZFunc = LessEqual;

AlphaBlendEnable = false;

CullMode = None;

PixelShader = compile ps3_0 metalPS_t (gSurfaceColor, gColorSampler,

gKd, gSpecExpon, gKr,

gEnvSampler,

gLamp0Color, gAmbiColor);}}

// pixel shaded, quadratic falloff

#if DIRECT3D_VERSION >= 0xa00

technique10 SimpleFalloff10 <

string Script = «Pass=p0;» ;

> { pass p0 <

string Script = «Draw=geometry;» ;

> {

SetVertexShader (CompileShader (vs4_0, std_dp_VS (gWorldITXf, gWorldXf,

gViewIXf, gWvpXf,

gLamp0DirPos)));

SetGeometryShader (NULL);

SetPixelShader (CompileShader (ps4_0, metalQPS (gSurfaceColor,

gKd, gSpecExpon, gKr,

gEnvSampler,

gLamp0Color, gLamp0Intensity,

gAmbiColor)));

SetRasterizerState (DisableCulling);

SetDepthStencilState (DepthEnabling, 0);

SetBlendState (DisableBlend, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF);

}

}

#endif /* DIRECT3D_VERSION >= 0xa00 */

technique SimpleFalloff <

string Script = «Pass=p0;» ;

> {

pass p0 <

string Script = «Draw=geometry;» ;

> {

VertexShader = compile vs3_0 std_dp_VS (gWorldITXf, gWorldXf,

gViewIXf, gWvpXf,

gLamp0DirPos);

ZEnable = true;

ZWriteEnable = true;

ZFunc = LessEqual;

AlphaBlendEnable = false;

CullMode = None;

PixelShader = compile ps3_0 metalQPS (gSurfaceColor,

gKd, gSpecExpon, gKr,

gEnvSampler,

gLamp0Color, gLamp0Intensity,

gAmbiColor);}}

#if DIRECT3D_VERSION >= 0xa00

technique10 TexturedFalloff10 <

string Script = «Pass=p0;» ;

> {

pass p0 <

string Script = «Draw=geometry;» ;

> {

SetVertexShader (CompileShader (vs4_0, std_dp_VS (gWorldITXf, gWorldXf,

gViewIXf, gWvpXf,

gLamp0DirPos)));

SetGeometryShader (NULL);

SetPixelShader (CompileShader (ps4_0, metalQPS_t (gSurfaceColor, gColorSampler,

gKd, gSpecExpon, gKr,

gEnvSampler,

gLamp0Color, gLamp0Intensity,

gAmbiColor)));

SetRasterizerState (DisableCulling);

SetDepthStencilState (DepthEnabling, 0);

SetBlendState (DisableBlend, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF);}}

#endif /* DIRECT3D_VERSION >= 0xa00 */

technique TexturedFalloff <

string Script = «Pass=p0;» ;

> {pass p0 <

string Script = «Draw=geometry;» ;

> {

VertexShader = compile vs3_0 std_dp_VS (gWorldITXf, gWorldXf,

gViewIXf, gWvpXf,

gLamp0DirPos);

ZEnable = true;

ZWriteEnable = true;

ZFunc = LessEqual;

AlphaBlendEnable = false;

CullMode = None;

PixelShader = compile ps3_0 metalQPS_t (gSurfaceColor, gColorSampler,

gKd, gSpecExpon, gKr,

gEnvSampler,

gLamp0Color, gLamp0Intensity,

gAmbiColor);

}

}

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