Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ
ΠΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½Π°Ρ Π³ΡΠ°ΡΠΈΠΊΠ° ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π² ΡΠ°ΠΌΡΡ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·Π½ΡΡ ΡΡΠ΅ΡΠ°Ρ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°: Π² ΠΊΠΈΠ½ΠΎ, Π² ΡΡΠ΅ΡΠ΅ ΡΠ΅ΠΊΠ»Π°ΠΌΡ, Π² ΠΏΠΎΠ»ΠΈΠ³ΡΠ°ΡΠΈΠΈ, Π² ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΡΠ΅ΡΠ°Ρ (ΡΠ΅Π»Π΅Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅, ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ), Π² ΡΡΠ΅ΡΠ΅ ΠΈΠ³ΡΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ Π΄ΡΡΠ³ΠΈΡ . Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π±ΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ Π²ΡΠ΅ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΡΠ΅Π»ΠΈ, ΠΈΠ·ΡΡΠ΅Π½Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠ΅Ρ ΠΌΠ΅ΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
ΠΠ£Π Π‘ΠΠΠΠ ΠΠ ΠΠΠΠ’
Π½Π° ΡΠ΅ΠΌΡ:
«Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ»
ΠΡΠ΅Π», 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.