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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ создания Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ

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

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ срСдствами ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ языка Object Pascal ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ OpenGL создано ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ„ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π³Π°Π»Π΅Ρ€Π΅ΠΈ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ ΠΌΡ‹ΡˆΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Π½Π΅ΠΉ ΠΈ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ. ΠŸΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ просмотра Ρ„ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° описываСт Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ клавиш… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ создания Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π€Π΅Π΄Π΅Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ агСнтство ΠΏΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ Рязанский ГосударствСнный РадиотСхничСский УнивСрситСт ΠšΠ°Ρ„Π΅Π΄Ρ€Π° Π­Π’Πœ

ΠŸΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ записка

ΠΊ ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π° Ρ‚Π΅ΠΌΡƒ

«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ создания Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ»

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»

студСнт Π³Ρ€ΡƒΠΏΠΏΡ‹ 541

Π“ΡƒΠ΄ΠΊΠΎΠ² АлСксандр

ΠŸΠΎΠ²Π΅Ρ€ΠΈΠ»

Π§ΠΈΡ‡ΠΈΠΊΠΈΠ½ Π’. А

Рязань 2008 Π³.

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ срСдствами ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ языка Object Pascal ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ OpenGL создано ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ„ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π³Π°Π»Π΅Ρ€Π΅ΠΈ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ ΠΌΡ‹ΡˆΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Π½Π΅ΠΉ ΠΈ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ. ΠŸΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ просмотра Ρ„ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ.

1. ВСорСтичСская Ρ‡Π°ΡΡ‚ΡŒ

ΠšΡƒΡ€ΡΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄Π²Π° этапа:

1. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° пСрСмСщСния ΠΏΠΎ Ρ„ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ;

2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ помСщСния Π³Π°Π»Π΅Ρ€Π΅ΠΈ.

1.1 Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° пСрСмСщСния ΠΏΠΎ Ρ„ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ

Одна ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Π΅ΠΉ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ Ρ„ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ — это ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ 3D срСду ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΅Ρ‘ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Β· Π’Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠ΅Ρ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ слСдуя ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ;

Β· Π’Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΌΠΈΡ€ Π²ΠΎΠΊΡ€ΡƒΠ³ Π½Π°Ρ‡Π°Π»Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡŽ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ (это Π΄Π°Ρ‘Ρ‚ иллюзию Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΠ»Π°ΡΡŒ ΠΊΠ°ΠΌΠ΅Ρ€Π°);

Β· ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΌΠΈΡ€ способом, ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ (это Π΄Π°Ρ‘Ρ‚ иллюзию Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΠ»Π°ΡΡŒ ΠΊΠ°ΠΌΠ΅Ρ€Π°)

Рис 1. Π’Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

Π—Π° ΠΈΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π³ΠΎΠ»ΠΎΠ²Π° смотрит Π»ΠΈΡ†ΠΎΠΌ ΠΏΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ оси Y, Π° Π²Π²Π΅Ρ€Ρ… смотрит ΠΏΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ оси Z. Π‘Π»Π΅Π²Π° Π½Π°ΠΏΡ€Π°Π²ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ось X. Глядя Π² ΡΡ‚ΠΎΠΌ ΠΆΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π³ΠΎΠ»ΠΎΠ²Ρƒ Π²ΠΎΠΊΡ€ΡƒΠ³ оси Z.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ Π²ΠΎΠΊΡ€ΡƒΠ³ оси Z ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ вращСния ΠΌΠΈΡ€Π°

glRotate (f, 0, 0, 1),

Π³Π΄Π΅ f — ΡƒΠ³ΠΎΠ», Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ ΠΌΠΈΡ€ Π½Π°Π²

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ вдоль осСй X, Y ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

glTranslatef (tx, ty, 0),

Π³Π΄Π΅

ty := ty + sin (f*pi/180)/2;

tx := tx + cos (f*pi/180)/2;

ΠΈΠ»ΠΈ

ty := ty — sin (f*pi/180)/2;

tx := tx — cos (f*pi/180)/2;

Π’ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ двиТСния:

НаТата стрСлка «Π²Π»Π΅Π²ΠΎ» (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΎΡΠΈ X):

ty := ty — sin (f*pi/180)/2;

tx := tx + cos (f*pi/180)/2;

НаТата стрСлка «Π²ΠΏΡ€Π°Π²ΠΎ»:

ty := ty + sin (f*pi/180)/2;

tx := tx — cos (f*pi/180)/2;

НаТата стрСлка «Π²Π²Π΅Ρ€Ρ…» (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΎΡΠΈ Y):

ty := ty + sin ((f+90)*pi/180)/2;

tx:= tx — cos ((f+90)*pi/180)/2;

НаТата стрСлка «Π²Π½ΠΈΠ·»:

ty := ty — sin ((f+90)*pi/180)/2;

tx := tx + cos ((f+90)*pi/180)/2;

ЀотогалСрСя состоит ΠΈΠ· Π΄Π²ΡƒΡ… основных ΠΊΠΎΠΌΠ½Π°Ρ‚, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ 12?12.

Рис 2. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Ρ„ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ

2. ОписаниС модуля Gallery. pas

2.1 ΠžΠ±Ρ‰ΠΈΠ΅ свСдСния

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ Π΅Π΄ΠΈΠ½ΠΈΡ†Π° прСдставляСт собой ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡƒΡŽ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° ΡΡ‚Π°ΠΏΠ΅ компиляции.

НаимСнованиС модуля Gallery.pas.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ создан Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Delphi Π² ΡΡ€Π΅Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Delphi 7.0

2.2 Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ Π² ΡΠΎΠΎΡ‚вСтствии с ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

2.3 ОписаниС структуры модуля Gallery.pas.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ содСрТит 13 ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΡ… созданиС Π³Π°Π»Π΅Ρ€Π΅ΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π½Π΅ΠΉ.

procedure TfrmGL. FormPaint (Sender: TObject)

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° обСспСчиваСт установку ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ ΠΊΠΎΠΌΠ½Π°Ρ‚ Ρ„ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ осущСствлСниС просмотра Π³Π°Π»Π΅Ρ€Π΅ΠΈ Π² Π°Π²Ρ‚оматичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅.

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

Y: Integer);

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° описываСт Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ полоТСния ΠΌΡ‹ΡˆΠΈ.

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

Shift: TShiftState);

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° описываСт Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ клавиш управлСния для пСрСдвиТСния ΠΏΠΎ Ρ„ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΊΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ ΠΊΠΎΠΌΠ½Π°Ρ‚ Ρ„ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ установлСния дСмонстрационного Ρ€Π΅ΠΆΠΈΠΌ ΠΈ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π° Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ.

procedure TfrmGL. FormCreate (Sender: TObject);

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ‚ ссылку Π½Π° ΠΎΠΊΠ½ΠΎ для OpenGL

procedure TfrmGL. FormDestroy (Sender: TObject);

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° удаляСт всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ OpenGl, высвобоТдая ΠΏΠ°ΠΌΡΡ‚ΡŒ

procedure TfrmGL. FormResize (Sender: TObject);

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° пСрСрисовываСт ΠΎΠΊΠ½ΠΎ ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ‚ пСрспСктиву

procedure SetDCPixelFormat (hdc: HDC);

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π·Π°Π΄Π°Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ пиксСлСй для Ρ€Π°Π±ΠΎΡ‚Ρ‹ c Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ OpenGl.

Procedure zal1;

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ рисованиС обстановки ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ Ρ„ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ

Procedure zal2;

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ рисованиС обстановки Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ Ρ„ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ.

Procedure zal0;

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ рисованиС обстановки Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ ΠΈ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ Ρ„ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ построСния Π²Ρ‚ΠΎΡ€ΠΎΠΉ, Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ ΠΈ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚ Ρ„ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ сходСн с ΠΏΠ΅Ρ€Π²ΠΎΠΉ.

procedure BmpTexture (name:string; k: boolean);

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ графичСского Ρ„Π°ΠΉΠ»Π° `name', ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ тСкстуры Π² ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ Ρ„ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ.

Procedure kartina;

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ рисованиС Ρ€Π°ΠΌΡ‹ для ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ изобраТСния ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹.

2.4 Π’Ρ‹Π·ΠΎΠ² ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ модуля

Для использования ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ модуля Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π° ΡΡ‚Π°ΠΏΠ΅ компиляции ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ, ввСдя Π½Π°Π·Π²Π°Π½ΠΈΠ΅ модуля Gallery Π² ΡΠΏΠΈΡΠΎΠΊ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, пСрСчислСнных Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ uses. ПослС этого ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅.

3. ОписаниС примСнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Gallery. pas ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π»ΡŽΠ±Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π² ΡΡ€Π΅Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Delphi, ΠΏΡƒΡ‚Π΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ модуля Π½Π° ΡΡ‚Π°ΠΏΠ΅ компиляции.

4. Бписок использованной Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

1. Π•Π‘ΠŸΠ” Π“ΠžΠ‘Π’Ρ‹ 19.101, 19.105, 19,401.

2. M. B. ΠšΡ€Π°ΡΠ½ΠΎΠ² OpenGL. Π“Ρ€Π°Ρ„ΠΈΠΊΠ° Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Delphi. М. 2000.

ВСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ модуля Gallery. pas

unit Gallery. pas;

interface

uses

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

OpenGL, ExtDlgs;

type

TfrmGL = class (TForm)

OpenPictureDialog1: TOpenPictureDialog;

procedure FormCreate (Sender: TObject);

procedure FormPaint (Sender: TObject);

procedure FormDestroy (Sender: TObject);

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

Shift: TShiftState);

procedure FormResize (Sender: TObject);

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

Y: Integer);

private

DC: HDC;

hrc: HGLRC;

tx, ty, tz, f, t: GLfloat;

quadObj: GLUquadricObj;

lock, zal, kadr: boolean;

wrkx, wrky: Glint;

mode, demonstr: boolean;

time0, time1, FrameTime: GLInt;

count: GLint;

end;

var

frmGL: TfrmGL;

mode: (POINT, LINE, FILL, SILHOUETTE) = FILL;

gluobj: (SPHERE, CONE, CYLINDER, DISK) = SPHERE;

Position1:array [0.3] of GlFloat;

Position:array [0.2] of GlFloat=(0.5,0.5,0.5);

heading, lookupdown: GlFloat;

mpos: TPoint;

float:GlFloat;

Bitmap:TBitmap;

getpict:boolean;

room, pict: byte;

p:0.18;

implementation

uses Unit3, Unit2;

{$R *.DFM}

{====================================================================

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ графичСского Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ тСкстуры}

procedure BmpTexture (name:string; k: boolean);

var

// массив ΠΎΠ±Ρ€Π°Π·Π°, 64×64

i, j: Integer;

bits1:array [0.63,0.63,0.2] of Glbyte;

bits2:array [0.31,0.31,0.2] of Glbyte;

begin

Bitmap := TBitmap. Create;

Bitmap.LoadFromFile ('image/'+name); // Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° тСкстуры ΠΈΠ· Ρ„Π°ΠΉΠ»Π°

if k then

begin

For i := 0 to 63 do

For j := 0 to 63 do

begin

bits1 [i, j, 0] := GetRValue (Bitmap.Canvas.Pixels [i, j]);

bits1 [i, j, 1] := GetGValue (Bitmap.Canvas.Pixels[i, j]);

bits1 [i, j, 2] := GetBValue (bitmap.Canvas.Pixels[i, j]);

end;

glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA,

64,64, // здСсь задаСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ тСкстуры

0, GL_RGB, GL_UNSIGNED_BYTE, @Bits1);

end

else begin

For i := 0 to 31 do

For j := 0 to 31 do

begin

bits2 [i, j, 0] := GetRValue (Bitmap.Canvas.Pixels [i, j]);

bits2 [i, j, 1] := GetGValue (Bitmap.Canvas.Pixels[i, j]);

bits2 [i, j, 2] := GetBValue (bitmap.Canvas.Pixels[i, j]);

end;

glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA,

31,31, // здСсь задаСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ тСкстуры

0, GL_RGB, GL_UNSIGNED_BYTE, @Bits2);

end;

glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_Mag_FILTER, GL_LINEAR);

glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

end;

{==============================================================

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ€Π°ΠΌΡ‹ для ΠΊΠ°Ρ€Ρ‚ΠΈΠ½, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π° изобраТСния ΠΊΠ°Ρ€Ρ‚ΠΈΠ½}

Procedure rama;

var

i:byte;

Begin

if (form2.colpic[p]=true)

then

For i:=1 to 4 do

begin

glColor3f (0.72,0.31,0.05);

glNormal3f (0,1,0);

glBegin (Gl_Quads);

glTexCoord2d (0.5,0); glVertex3f (0,0,0);

glTexCoord2d (0.5,2); glVertex3f (0,0,2);

glTexCoord2d (0, 2); glVertex3f (0.2,0.1,1.78);

glTexCoord2d (0, 0); glVertex3f (0.2,0.1,0.18);

glEnd;

glColor3f (0.491,0.25,0.1);

glBegin (Gl_Quads);

glTexCoord2d (0.2, 0); glVertex3f (0.2,0.1,0.18);

glTexCoord2d (0.2, 2); glVertex3f (0.2,0.1,1.78);

glTexCoord2d (0, 2); glVertex3f (0.3,0.05,1.78);

glTexCoord2d (0, 0); glVertex3f (0.3,0.05,0.18);

glEnd;

if getpict

then begin

frmGL.Visible:=true;

frmGL.Enabled:=true;

BMPPIC (p);

glEnable (GL_TEXTURE_2D);

end;

glColor3f (0.9,0.9,0.8);

glBegin (Gl_Quads);

glTexCoord2d (0, 1);

glVertex3f (0.3,0.05,0.3);

glTexCoord2d (1, 1);

glVertex3f (0.3,0.05,1.7);

glTexCoord2d (1, 0);

glVertex3f (1.7,0.05,1.7);

glTexCoord2d (0, 0);

glVertex3f (1.7,0.05,0.3);

glEnd;

glDisable (GL_TEXTURE_2D);

glTranslatef (2,0,0);

glRotatef (-90,0,1,0);

end;

End;

{=============================================================

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° создания 3 ΠΈ 4 ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ Ρ„ΠΎΡ‚ΠΎΠ³Π°Π»Π΅Ρ€Π΅ΠΈ}

Procedure zal0;

var

i, k, j:integer;

quadObj: GLUquadricObj;

Begin

glPushMatrix;

quadObj := gluNewQuadric;

glColor3f (0.9, 0.9, 1); //стСны

if (room>=3)

then begin

glBegin (GL_QUADS);

glNormal3f (1, 0, 1); //лСвая стСна

glTexCoord2d (2.0, 0.0); glVertex3f (-12, 12.0, 0);

glTexCoord2d (2.0, 5.0); glVertex3f (-12.0, 12.0, 5);

glTexCoord2d (0.0, 5.0); glVertex3f (-12.0, 11.0, 5);

glTexCoord2d (0.0, 0.0); glVertex3f (-12.0, 11.0, 0);

glEnd;

фотогалСрСя Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ просмотр графичСский

glBegin (GL_QUADS);

glNormal3f (1, 0, 1); //лСвая стСна

glTexCoord2d (4.0, 0.0); glVertex3f (-12, 11.0, 0);

glTexCoord2d (4.0, 1.0); glVertex3f (-12.0, 11.0, 1);

glTexCoord2d (0.0, 1.0); glVertex3f (-12.0, 7.0, 1);

glTexCoord2d (0.0, 0.0); glVertex3f (-12.0, 7.0, 0);

glEnd;

glBegin (GL_QUADS);

glNormal3f (1, 0, 1); //лСвая стСна

glTexCoord2d (18.0, 0.0); glVertex3f (-12, 7.0, 0);

glTexCoord2d (18.0, 5.0); glVertex3f (-12.0, 7.0, 5);

glTexCoord2d (0.0, 5.0); glVertex3f (-12.0, -12.0, 5);

glTexCoord2d (0.0, 0.0); glVertex3f (-12.0, -12.0, 0);

glEnd;

glBegin (GL_QUADS);

glNormal3f (0, -1, 1); // стСна

glVertex3f (-12, 11.0, 1);

glVertex3f (-12, 7.0, 1);

glVertex3f (-12.2, 7.0, 1);

glVertex3f (-12.2, 11.0, 1);

glEnd;

end

else begin

glBegin (GL_QUADS);

glNormal3f (1, 0, 1); //лСвая стСна

glTexCoord2d (24.0, 0.0); glVertex3f (-12, 12.0, 0);

glTexCoord2d (24.0, 5.0); glVertex3f (-12.0, 12.0, 5);

glTexCoord2d (0.0, 5.0); glVertex3f (-12.0, -12.0, 5);

glTexCoord2d (0.0, 0.0); glVertex3f (-12.0, -12.0, 0);

glEnd;

end;

glBegin (GL_QUADS);

glNormal3f (0, 1, 1);//дальняя

glTexCoord2d (12.0, 0.0); glVertex3f (-12, -12.0, 0);

glTexCoord2d (12.0, 5.0); glVertex3f (-12, -12.0, 5);

glTexCoord2d (0.0, 5.0); glVertex3f (12, -12.0, 5);

glTexCoord2d (0.0, 0.0); glVertex3f (12, -12.0, 0);

glEnd;

glBegin (GL_QUADS);

glNormal3f (0, -1, 1); //блиТняя

glTexCoord2d (24.0, 0.0); glVertex3f (12, 12.0, 0);

glTexCoord2d (24.0, 5.0); glVertex3f (12.0, 12.0, 5);

glTexCoord2d (0.0, 5.0); glVertex3f (-12.0, 12.0, 5);

glTexCoord2d (0.0, 0.0); glVertex3f (-12.0, 12.0, 0);

glEnd;

glBegin (GL_QUADS);

glNormal3f (-1, 0, 1); //правая стСна

glTexCoord2d (24.0, 0.0); glVertex3f (12, 12.0, 0);

glTexCoord2d (24.0, 5.0); glVertex3f (12.0, 12.0, 5);

glTexCoord2d (0.0, 5.0); glVertex3f (12.0, -12.0, 5);

glTexCoord2d (0.0, 0.0); glVertex3f (12.0, -12.0, 0);

glEnd;

BmpTexture ('WOOD30.bmp', true);

glEnable (GL_TEXTURE_2D);

glTranslatef (0.0, 0.0, 5);

glBegin (GL_QUADS);

glNormal (1,0,-1);

glTexCoord2d (12.0, 0.0); glVertex3f (12, 12.0, 0.0);

glTexCoord2d (12.0, 12.0); glVertex3f (-12.2, 12.0, 0.0);

glTexCoord2d (0.0, 12.0); glVertex3f (-12.2, -12.0, 0.0);

glTexCoord2d (0.0, 0.0); glVertex3f (12.0, -12.0, 0.0);

glEnd;

glDisable (GL_TEXTURE_2D);

glTranslatef (0.0, 0.0, -5);

BmpTexture ('w.bmp', true);

glEnable (GL_TEXTURE_2D);

glBegin (GL_QUADS);

glNormal3f (1,0,1);

glTexCoord2d (12.0, 0.0); glVertex3f (12, 12.0, 0.0);

glTexCoord2d (12.0, 12.0); glVertex3f (-12.0, 12.0, 0.0);

glTexCoord2d (0.0, 12.0); glVertex3f (-12.0, -12.0, 0.0);

glTexCoord2d (0.0, 0.0); glVertex3f (12.0, -12.0, 0.0);

glEnd;

glDisable (GL_TEXTURE_2D);

glpopMatrix;

glPushMatrix;

glTranslatef (-1.5,-11.9,0.5);

if pict=1 then

begin

//прорисовка Ρ€Π°ΠΌ для ΠΊΠ°Ρ€Ρ‚ΠΈΠ½

glPushMatrix;

glScalef (1.5,1.5,1.5);

p:=9;

rama;

glPopmatrix ;

glTranslatef (13.4,4,0.5);

glRotatef (90,0,0,1);

p:=12;

for j:=1 to 3 do

begin

inc (p);

rama;

glTranslatef (6,0,0);

end;

glTranslatef (1.8,6.9,-0.5);

glRotatef (90,0,0,1);

p:=18;

for j:=1 to 2 do

begin

glPushMatrix;

glScalef (1.5,1.5,1.5);

dec (p);

rama;

glPopmatrix ;

glTranslatef (7,0,0);

end;

glTranslatef (2.7,9,0.5);

glRotatef (90,0,0,1);

p:=13;

for j:=1 to 3do

begin

dec (p);

rama;

glTranslatef (4.5,0,0);

end;

end;

glPopMatrix;

glPushMatrix;

//ΠŸΡ€ΠΎΡ€ΠΈΡΠΎΠ²ΠΊΠ° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΊ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°ΠΌ

glTranslatef (-12, 15, 1);

for k:=1 to 2 do

begin

glTranslatef (0, -4.0, 0.0);

glColor3f (0.7, 0.7, 0.4);

gluCylinder (quadObj, 0.4, 0.4, 4, 20, 1);

for i:=1 to 10 do

begin

glPushMatrix;

glTranslatef (0.4, 0.0, 0);

gluCylinder (quadObj, 0.01, 0.01, 4, 5,1);

glPopMatrix;

glRotatef (36, 0.0, 0.0, 1.0);

end;

glPushMatrix;

gluCylinder (quadObj, 0.8, 0.4, 0.4, 4, 1);

glPopMatrix;

end;

glTranslatef (6, 0, 0);

glPopMatrix;

glPushMatrix;

glTranslatef (11.5, -9.0, 3.5);

For j:=1 to 2 do

Begin

glColor3f (0.7,0.3,0.1);

GlTranslatef (0,2,0);

For i:=1 to 4 do

begin

gluCylinder (quadObj, 0.07, 0.07,1.5, 6, 1);

gluDisk (quadObj, 0, 0.08, 10, 1);

GlTranslatef (0,5,0);

end;

glColor3f (1,0,0);

glBegin (GL_QUADS);

glNormal3f (1,1,0);

glVertex3f (0, -20.0, 0.0);

glVertex3f (0, -20.0, 0.2);

glVertex3f (0, -5, 0.2);

glVertex3f (0, -5, 0.0);

glEnd;

glTranslatef (-23, -25.5, 0.1);

end;

glPopMatrix;

glPushMatrix;

glTranslatef (-7.5, 11.5, 3.5);

For k:=1 to 2 do

begin

glColor3f (0.7,0.3,0.1);

For i:=1 to 4 do

begin

gluCylinder (quadObj, 0.07, 0.07,1.5, 6, 1);

gluDisk (quadObj, 0, 0.08, 10, 1);

GlTranslatef (5,0,0);

end;

glColor3f (1,0,0);

glTranslatef (0, 0, 0.1);

glBegin (GL_QUADS);

glNormal3f (1,1,0);

glVertex3f (-5, 0, 0.0);

glVertex3f (-5.0, 0, 0.2);

glVertex3f (-20.0, 0, 0.2);

glVertex3f (-20.0, 0, 0.0);

glEnd;

glTranslatef (-20, -47, -0.1);

end;

GlPopMatrix;

glPushMatrix;

GlTranslatef (-4,-11.5,3.5);

glColor3f (0.7,0.3,0.1);

For i:=1 to 3 do

begin

gluCylinder (quadObj, 0.07, 0.07,1.5, 6, 1);

gluDisk (quadObj, 0, 0.08, 10, 1);

GlTranslatef (4,0,0);

end;

glColor3f (1,0,0);

glTranslatef (0, 0, 0.1);

glBegin (GL_QUADS);

glNormal3f (1,1,0);

glVertex3f (-4, 0, 0.0);

glVertex3f (-4.0, 0, 0.2);

glVertex3f (-12.0, 0, 0.2);

glVertex3f (-12.0, 0, 0.0);

glEnd;

glPopMatrix;

End;

{=============================================================

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° прорисовки ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹}

Procedure zal1;

var

i, k, j:integer;

quadObj: GLUquadricObj;

Begin

glPushMatrix;

quadObj := gluNewQuadric;

glColor3f (0.9, 0.9, 1); //Ρ†Π²Π΅Ρ‚ стСн

BmpTexture ('w.bmp', true);

glEnable (GL_TEXTURE_2D);

if room>=4

then begin

glBegin (GL_QUADS);

glNormal3f (1, 0, 1); //лСвая стСна

glTexCoord2d (19.0, 0.0); glVertex3f (-12, 12.0, 0);

glTexCoord2d (19.0, 5.0); glVertex3f (-12.0, 12.0, 5);

glTexCoord2d (0.0, 5.0); glVertex3f (-12.0, -7.0, 5);

glTexCoord2d (0.0, 0.0); glVertex3f (-12.0, -7.0, 0);

glEnd;

glBegin (GL_QUADS);

glNormal3f (1, 0, 1); //лСвая стСна

glTexCoord2d (4.0, 0.0); glVertex3f (-12, -7.0, 0);

glTexCoord2d (4.0, 1.0); glVertex3f (-12.0, -7.0, 1);

glTexCoord2d (0.0, 1.0); glVertex3f (-12.0, -11.0, 1);

glTexCoord2d (0.0, 0.0); glVertex3f (-12.0, -11.0, 0);

glEnd;

glBegin (GL_QUADS);

glNormal3f (1, 0, 1); //лСвая стСна

glTexCoord2d (1.0, 0.0); glVertex3f (-12, -11.0, 0);

glTexCoord2d (1.0, 5.0); glVertex3f (-12.0, -11.0, 5);

glTexCoord2d (0.0, 5.0); glVertex3f (-12.0, -12.0, 5);

glTexCoord2d (0.0, 0.0); glVertex3f (-12.0, -12.0, 0);

glEnd;

end

else begin

glBegin (GL_QUADS);

glNormal3f (1, 0, 1); //лСвая стСна

glTexCoord2d (24.0, 0.0); glVertex3f (-12, 12.0, 0);

glTexCoord2d (24.0, 5.0); glVertex3f (-12.0, 12.0, 5);

glTexCoord2d (0.0, 5.0); glVertex3f (-12.0, -12.0, 5);

glTexCoord2d (0.0, 0.0); glVertex3f (-12.0, -12.0, 0);

glEnd;

end;

glBegin (GL_QUADS);

glNormal3f (0, 1, 1);//дальняя

glTexCoord2d (3.0, 0.0); glVertex3f (-12, -12.0, 0);

glTexCoord2d (3.0, 5.0); glVertex3f (-12, -12.0, 5);

glTexCoord2d (0.0, 5.0); glVertex3f (-9.0, -12.0, 5);

glTexCoord2d (0.0, 0.0); glVertex3f (-9.0, -12.0, 0);

glEnd;

glBegin (GL_QUADS);

glNormal3f (0, 1, 1);

glTexCoord2d (4.0, 0.0); glVertex3f (-9, -12.0, 0);

glTexCoord2d (4.0, 1); glVertex3f (-9, -12.0, 1);

glTexCoord2d (0.0, 1); glVertex3f (-5, -12.0, 1);

glTexCoord2d (0.0, 0.0); glVertex3f (-5, -12.0, 0);

glEnd;

glBegin (GL_QUADS);

glNormal3f (0, 1, 1);//дальняя

glTexCoord2d (10, 0.0); glVertex3f (-5, -12.0, 0);

glTexCoord2d (10, 5.0); glVertex3f (-5, -12.0, 5);

glTexCoord2d (0.0, 5.0); glVertex3f (5.0, -12.0, 5);

glTexCoord2d (0.0, 0.0); glVertex3f (5.0, -12.0, 0);

glEnd;

glBegin (GL_QUADS);

glNormal3f (0, 1, 1);

glTexCoord2d (4.0, 0.0); glVertex3f (5, -12.0, 0);

glTexCoord2d (4.0, 1); glVertex3f (5, -12.0, 1);

glTexCoord2d (0.0, 1); glVertex3f (9, -12.0, 1);

glTexCoord2d (0.0, 0.0); glVertex3f (9, -12.0, 0);

glEnd;

glBegin (GL_QUADS);

glNormal3f (0, 1, 1);//дальняя

glTexCoord2d (3.0, 0.0); glVertex3f (9, -12.0, 0);

glTexCoord2d (3.0, 5.0); glVertex3f (9.0, -12.0, 5);

glTexCoord2d (0.0, 5.0); glVertex3f (12.0, -12.0, 5);

glTexCoord2d (0.0, 0.0); glVertex3f (12.0, -12.0, 0);

glEnd;

glBegin (GL_QUADS);

glNormal3f (0, -1, 1); //блиТняя

glTexCoord2d (24.0, 0.0); glVertex3f (12, 12.0, 0);

glTexCoord2d (24.0, 5.0); glVertex3f (12.0, 12.0, 5);

glTexCoord2d (0.0, 5.0); glVertex3f (-12.0, 12.0, 5);

glTexCoord2d (0.0, 0.0); glVertex3f (-12.0, 12.0, 0);

glEnd;

if room>=3 //ΠŸΡ€ΠΎΡ€ΠΈΡΠΎΠ²ΠΊΠ° ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΡŽ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ, Ссли ΠΎΠ½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π°

then begin

glBegin (GL_QUADS);

glNormal3f (-1, 0, 1); //правая стСна

glTexCoord2d (1.0, 0.0); glVertex3f (12, 12.0, 0);

glTexCoord2d (1.0, 5.0); glVertex3f (12.0, 12.0, 5);

glTexCoord2d (0.0, 5.0); glVertex3f (12.0, 11.0, 5);

glTexCoord2d (0.0, 0.0); glVertex3f (12.0, 11.0, 0);

glEnd;

glBegin (GL_QUADS);

glNormal3f (-1, 0, 1); //лСвая стСна

glTexCoord2d (4.0, 0.0); glVertex3f (12, 11.0, 0);

glTexCoord2d (4.0, 1.0); glVertex3f (12.0, 11.0, 1);

glTexCoord2d (0.0, 1.0); glVertex3f (12.0, 7.0, 1);

glTexCoord2d (0.0, 0.0); glVertex3f (12.0, 7.0, 0);

glEnd;

glBegin (GL_QUADS);

glNormal3f (-1, 0, 1); //правая стСна

glTexCoord2d (19.0, 0.0); glVertex3f (12, 7.0, 0);

glTexCoord2d (19.0, 5.0); glVertex3f (12.0, 7.0, 5);

glTexCoord2d (0.0, 5.0); glVertex3f (12.0, -12.0, 5);

glTexCoord2d (0.0, 0.0); glVertex3f (12.0, -12.0, 0);

glEnd;

end

else begin

glBegin (GL_QUADS);

glNormal3f (-1, 0, 1); //правая стСна

glTexCoord2d (24.0, 0.0); glVertex3f (12, 12.0, 0);

glTexCoord2d (24.0, 5.0); glVertex3f (12.0, 12.0, 5);

glTexCoord2d (0.0, 5.0); glVertex3f (12.0, -12.0, 5);

glTexCoord2d (0.0, 0.0); glVertex3f (12.0, -12.0, 0);

glEnd;

end;

//ΠΏΠΎΠ» ΠΈ ΠΏΠΎΡ‚ΠΎΠ»ΠΎΠΊ

glTranslatef (0.0, 0.0, 5);

glBegin (GL_QUADS);

glNormal (1,0,-1);

glTexCoord2d (12.0, 0.0); glVertex3f (12, 12.0, 0.0);

glTexCoord2d (12.0, 12.0); glVertex3f (-12.0, 12.0, 0.0);

glTexCoord2d (0.0, 12.0); glVertex3f (-12.0, -12.0, 0.0);

glTexCoord2d (0.0, 0.0); glVertex3f (12.0, -12.0, 0.0);

glEnd;

glDisable (GL_TEXTURE_2D);

glTranslatef (0.0, 0.0, -5);

BmpTexture ('blue.bmp', true);

glEnable (GL_TEXTURE_2D);

glBegin (GL_QUADS);

glNormal3f (1,0,1);

glTexCoord2d (12.0, 0.0); glVertex3f (12, 12.0, 0.0);

glTexCoord2d (12.0, 12.0); glVertex3f (-12.0, 12.0, 0.0);

glTexCoord2d (0.0, 12.0); glVertex3f (-12.0, -12.0, 0.0);

glTexCoord2d (0.0, 0.0); glVertex3f (12.0, -12.0, 0.0);

glEnd;

glDisable (GL_TEXTURE_2D);

glpopMatrix;

glPushMatrix;

glTranslatef (-1.5,-11.9,0.5);

if pict=1 then

begin

//Ρ€Π°ΠΌΡ‹ для ΠΊΠ°Ρ€Ρ‚ΠΈΠ½

glPushMatrix;

glScalef (1.5,1.5,1.5);

p:=9;

rama;

glPopmatrix ;

glTranslatef (13.4,4,0.5);

glRotatef (90,0,0,1);

p:=12;

for j:=1 to 3 do

begin

inc (p);

rama;

glTranslatef (6,0,0);

end;

glTranslatef (1.8,6.9,-0.5);

glRotatef (90,0,0,1);

p:=18;

for j:=1 to 2 do

begin

glPushMatrix;

glScalef (1.5,1.5,1.5);

dec (p);

rama;

glPopmatrix ;

glTranslatef (7,0,0);

end;

glTranslatef (2.7,4.1,0.5);

glRotatef (90,0,0,1);

p:=13;

for j:=1 to 3do

begin

dec (p);

rama;

glTranslatef (6,0,0);

end;

end;

//ΠŸΡ€ΠΎΡ€ΠΈΡΠΎΠ²ΠΊΠ° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΊ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°ΠΌ

glPopMatrix;

glPushMatrix;

glTranslatef (-13, -12, 1);

For j:=1 to 2 do

begin

for k:=1 to 2 do

begin

glTranslatef (4, 0.0, 0.0);

glColor3f (0.7, 0.7, 0.4);

gluCylinder (quadObj, 0.4, 0.4, 4, 20, 1);

for i:=1 to 10 do

begin

glPushMatrix;

glTranslatef (0.4, 0.0, 0);

gluCylinder (quadObj, 0.01, 0.01, 4, 5,1);

glPopMatrix;

glRotatef (36, 0.0, 0.0, 1.0);

end;

glPushMatrix;

gluCylinder (quadObj, 0.8, 0.4, 0.4, 4, 1);

glPopMatrix;

end;

glTranslatef (6, 0, 0);

end;

glPopMatrix;

glPushMatrix;

glTranslatef (11.5, -10.0, 3.5);

For k:=1 to 2 do

Begin

For j:=1 to 2 do

Begin

glColor3f (0.7,0.3,0.1);

For i:=1 to 5 do

begin

gluCylinder (quadObj, 0.07, 0.07,1.5, 6, 1);

// glTranslatef (0, 0, -1);

gluDisk (quadObj, 0, 0.08, 10, 1);

GlTranslatef (0,4,0);

end;

glColor3f (1,0,0);

glBegin (GL_QUADS);

glNormal3f (1,1,0);

glVertex3f (0, -4.0, 0.0);

glVertex3f (0, -4.0, 0.2);

glVertex3f (0, -20, 0.2);

glVertex3f (0, -20, 0.0);

glEnd;

glTranslatef (0, -43, 0);

end;

glNormal3f (-1,1,0);

glTranslatef (-23, 50, 0);

end;

glPopMatrix;

glPushMatrix;

glTranslatef (-7.5, 11.5, 3.5);

For k:=1 to 2 do

begin

glColor3f (0.7,0.3,0.1);

For i:=1 to 4 do

begin

gluCylinder (quadObj, 0.07, 0.07,1.5, 6, 1);

gluDisk (quadObj, 0, 0.08, 10, 1);

GlTranslatef (5,0,0);

end;

glColor3f (1,0,0);

glTranslatef (0, 0, 0.1);

glBegin (GL_QUADS);

glNormal3f (1,1,0);

glVertex3f (-5, 0, 0.0);

glVertex3f (-5.0, 0, 0.2);

glVertex3f (-20.0, 0, 0.2);

glVertex3f (-20.0, 0, 0.0);

glEnd;

glTranslatef (-18, -47, -0.1);

end;

GlPopMatrix;

glPushMatrix;

GlTranslatef (-4,-11.5,3.5);

glColor3f (0.7,0.3,0.1);

For i:=1 to 3 do

begin

gluCylinder (quadObj, 0.07, 0.07,1.5, 6, 1);

gluDisk (quadObj, 0, 0.08, 10, 1);

GlTranslatef (4,0,0);

end;

glColor3f (1,0,0);

glTranslatef (0, 0, 0.1);

glBegin (GL_QUADS);

glNormal3f (1,1,0);

glVertex3f (-4, 0, 0.0);

glVertex3f (-4.0, 0, 0.2);

glVertex3f (-12.0, 0, 0.2);

glVertex3f (-12.0, 0, 0.0);

glEnd;

glPopMatrix;

End;

{=============================================================

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° прорисовки ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹}

Procedure zal2;

var

i, j: integer;

quadObj: GLUquadricObj;

Begin

quadObj := gluNewQuadric;

glPushMatrix;

glColor3f (0.9,0.9,0.8);

glBegin (GL_QUADS);

glNormal3f (1, 0, 1); //лСвая стСна

glVertex3f (-12, 12.0, 0);

glVertex3f (-12.0, 12.0, 5);

glVertex3f (-12.0, -12.0, 5);

glVertex3f (-12.0, -12.0, 0);

glEnd;

glBegin (GL_QUADS);

glNormal3f (0, 1, 1); //дальняя стСна

glVertex3f (12, -12.0, 0);

glVertex3f (12.0, -12.0, 5);

glVertex3f (-12.0, -12.0, 5);

glVertex3f (-12.0, -12.0, 0);

glEnd;

glBegin (GL_QUADS);

glNormal3f (-1,0, 1); // правая стСна

glVertex3f (12, 12.0, 0);

glVertex3f (12.0, 12.0, 5);

glVertex3f (12.0, -12.0, 5);

glVertex3f (12.0, -12.0, 0);

glEnd;

glBegin (GL_QUADS);

glNormal3f (0, -1, 1);//блиТняя

glVertex3f (-12, 11.8, 0);

glVertex3f (-12, 11.8, 5);

glVertex3f (-9.0, 11.8, 5);

glVertex3f (-9.0, 11.8, 0);

glEnd;

glBegin (GL_QUADS);

glNormal3f (0, -1, 1);

glVertex3f (-9, 11.8, 0);

glVertex3f (-9, 11.8, 1);

glVertex3f (-5, 11.8, 1);

glVertex3f (-5, 11.8, 0);

glEnd;

glBegin (GL_QUADS);

glNormal3f (1, 0, 1);

glVertex3f (-9, 11.8, 1);

glVertex3f (-9, 12, 1);

glVertex3f (-5, 12, 1);

glVertex3f (-5, 11.8, 1);

glEnd;

glBegin (GL_QUADS);

glNormal3f (0, -1, 1);//блиТняя

glVertex3f (-5, 11.8, 0);

glVertex3f (-5, 11.8, 5);

glVertex3f (5.0, 11.8, 5);

glVertex3f (5.0, 11.8, 0);

glEnd;

glBegin (GL_QUADS);

glNormal3f (0, -1, 1);

glVertex3f (5, 11.8, 0);

glVertex3f (5, 11.8, 1);

glVertex3f (9, 11.8, 1);

glVertex3f (9, 11.8, 0);

glEnd;

glBegin (GL_QUADS);

glNormal3f (1, 0, 1);

glVertex3f (5, 11.8, 1);

glVertex3f (5, 12, 1);

glVertex3f (9, 12, 1);

glVertex3f (9, 11.8, 1);

glEnd;

glBegin (GL_QUADS);

glNormal3f (0, -1, 1);//блиТняя

glVertex3f (9, 11.8, 0);

glVertex3f (9.0, 11.8, 5);

glVertex3f (12.0, 11.8, 5);

glVertex3f (12.0, 11.8, 0);

glEnd;

glBegin (GL_QUADS);

glNormal3f (0, -1, 1); // стСна

glVertex3f (-0.25, -4.0, 0);

glVertex3f (-0.25, -4.0, 5);

glVertex3f (0.25, -4.0, 5);

glVertex3f (0.25, -4.0, 0);

glEnd;

glPushMatrix;

glTranslatef (-0.75,0,0);

glNormal3f (-1,0, 1); // ΠΏΠ΅Ρ€Π΅Π³ΠΎΡ€ΠΎΠ΄ΠΊΠ° правая стСна

For i:=1 to 2 do

begin

glTranslatef (0.5,0,0);

glBegin (GL_QUADS);

glVertex3f (0, 12.0, 0);

glVertex3f (0, 12.0, 5);

glVertex3f (0, -4.0, 5);

glVertex3f (0, -4.0, 0);

glEnd;

glNormal3f (1,0, 1); // ΠΏΠ΅Ρ€Π΅Π³ΠΎΡ€ΠΎΠ΄ΠΊΠ° лСвая стСна

end ;

glpopMatrix;

BmpTexture ('Roof.bmp', true);

glEnable (GL_TEXTURE_2D);

glBegin (GL_QUADS); //ΠΏΠΎΠ» ΠΈ ΠΏΠΎΡ‚ΠΎΠ»ΠΎΠΊ

glNormal3f (0,0, 1);

glTexCoord2d (12.0, 0.0); glVertex3f (12, 12.0, 0.0);

glTexCoord2d (12.0, 12.0); glVertex3f (-12.0, 12.0, 0.0);

glTexCoord2d (0.0, 12.0); glVertex3f (-12.0, -12.0, 0.0);

glTexCoord2d (0.0, 0.0); glVertex3f (12.0, -12.0, 0.0);

glEnd;

glDisable (GL_TEXTURE_2D);

glTranslatef (0.0, 0.0, 5);

BmpTexture ('ΠΏΠ°Ρ€ΠΊΠ΅Ρ‚.bmp', true);

glColor3f (1,1,1);

glEnable (GL_TEXTURE_2D);

glNormal (0,0,1);

glBegin (GL_QUADS); //ΠΏΠΎΠ» ΠΈ ΠΏΠΎΡ‚ΠΎΠ»ΠΎΠΊ

glTexCoord2d (12.0, 0.0); glVertex3f (12, 12.0, 0.0);

glTexCoord2d (12.0, 12.0); glVertex3f (-12.0, 12.0, 0.0);

glTexCoord2d (0.0, 12.0); glVertex3f (-12.0, -12.0, 0.0);

glTexCoord2d (0.0, 0.0); glVertex3f (12.0, -12.0, 0.0);

glEnd;

glEnable (GL_COLOR_Material);

glDisable (GL_TEXTURE_2D);

glTranslatef (0.0, 0.0, 5);

glPopMatrix;

glPushMatrix;

if pict=2 then

begin

glTranslatef (-5,-11.8,0.5);

p:=0;

for j:=1 to 2 do //Ρ€Π°ΠΌΡ‹ для ΠΊΠ°Ρ€Ρ‚ΠΈΠ½

begin

glPushmatrix;

glScalef (1.5,1.5,1.5);

inc (p);

rama;

glPopMatrix ;

glTranslatef (7,0,0);

end;

glTranslatef (2.9,4,0.5);

glRotatef (90,0,0,1);

p:=2;

for j:=1 to 3 do

begin

inc (p);

rama;

glTranslatef (6,0,0);

end;

glTranslatef (1.8,6,0);

glRotatef (90,0,0,1);

glTranslatef (17.7,4.1,0);

glRotatef (90,0,0,1);

p:=9;

for j:=1 to 3 do

begin

dec (p);

rama;

glTranslatef (6,0,0);

end;

end;

//ΠŸΡ€ΠΎΡ€ΠΈΡΠΎΠ²ΠΊΠ° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΊ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°ΠΌ

glPopMatrix;

glPushMatrix;

GlTranslatef (0.8,0,3.5);

For j:=1 to 2 do

begin

For i:=1 to 3 do

begin

glColor3f (0.7,0.3,0.1);

gluCylinder (quadObj, 0.07, 0.07,1.5, 6, 1);

gluDisk (quadObj, 0, 0.08, 10, 1);

GlTranslatef (0,4.5,0);

end;

glColor3f (1,0,0);

glTranslatef (0, -4.5, 0.1);

glBegin (GL_QUADS);

glVertex3f (0, 0, 0.0);

glVertex3f (0, 0, 0.2);

glVertex3f (0, -9, 0.2);

glVertex3f (0, -9, 0.0);

glEnd;

GlTranslatef (-1.6,-9,-0.1);

end;

glPopMatrix;

glTranslatef (-7.3, -11.9, 1);

End;

{=======================================================================

ΠŸΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²ΠΊΠ° ΠΎΠΊΠ½Π°}

procedure TfrmGL. FormPaint (Sender: TObject);

begin

Position1 [0]: =0; //Установка

Position1 [1]: =3; //полоТСния

Position1 [2]: =4; //источников

Position1 [3]: =12; //свСта

glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);// очистка Π±ΡƒΡ„Π΅Ρ€Π° Ρ†Π²Π΅Ρ‚Π°

glLightfv (GL_LIGHT0,GL_PosiTion, @position1); //Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° источников свСта

glMaterialfv (GL_FRONT, GL_SPECULAR, @Position); //установка свойств ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°

if Lock //ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ указатСля

then SetCursorPos (wrkX, wrkY);

if not mode

then glPolygonMode (GL_FRONT_AND_BACK, GL_LINE) //Установка стиля рисования линиями

else glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); //Установка стиля рисования с Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ

glPushMatrix; //Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ исходного состояния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

glRotate (f, 0, 0, 1); //ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ «ΠΌΠΈΡ€Π°» Π½Π° ΡƒΠ³ΠΎΠ» f

glTranslatef (tx, ty, tz); //ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π³Π°Π»Π΅Ρ€Π΅ΠΈ

glPushMatrix;

zal1; // Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ рисования ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹

glPopMatrix;

glPushMatrix;

glTranslatef (0,-24,0);

zal2; //Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ рисования Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹

glPopMatrix;

if room>=3 then

begin

glTranslatef (24.2,0,0);

glPushMatrix;

zal0; //Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ рисования Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹

glPopMatrix;

end;

if room>=4 then

begin

glTranslatef (-48.4,0,0);

glRotatef (180,0,0,1);

glPushMatrix;

zal0; //Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ рисования Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹

glPopMatrix;

end;

glPopMatrix;

if demonstr

then //Запуск Ρ€Π΅ΠΆΠΈΠΌΠ° дСмонстрации

begin

count:= count+1;

tx:=0;

ty:=0;

case count of

2:begin

f:=0;

pict:=1;

end;

3.61:f:=f+6;

62.78:ty:=(count-62)*0.5;

79.92:begin

ty:=8;

tx:=tx+(count-78)*0.5;

f:=f+6;

end;

93.133:begin

ty:=-(count-93)*0.4+8;

tx:=7;

end;

134.150:begin

ty:=-8;

tx:=7;

f:=f+6

end;

151.177:begin

ty:=-7.5;

tx:=-(count-151)*0.5+7;

end;

178.193:begin

ty:=-7.5;

tx:=-6;

f:=f+6;

end;

194.223:begin

ty:=(count-193)*0.5−7.5;

tx:=-6.5;

end;

224.229:begin

tx:=-6.5;

ty:=7.5;

f:=f+6;

end;

230.236:begin

pict:=2;

tx:=-6.5;

ty:=7.5;

f:=f+6;

end;

237.256:begin

pict:=2;

tx:=-6.5;

ty:=(count-236)*0.5+7.5;

end;

257.265:begin

tx:=-6.5;

ty:=14.5;

f:=f-6;

end;

266.296:begin

ty:=(count-265)*0.5+14.5;

tx:=-6.5;

end;

297.307:begin

tx:=-6.5;

ty:=29.5;

f:=f+6;

end;

308.332:begin

tx:=(count-308)*0.5−6.5;

ty:=29.5;

end;

333.345:begin

tx:=6.5;

ty:=29.5;

f:=f+6;

end;

346.374:begin

ty:=-(count-346)*0.5+29.5;

tx:=6.5;

end;

375.380:begin

tx:=6.5;

ty:=15.5;

f:=f+6;

end;

381.406:begin

pict:=1;

tx:=6.5;

ty:=15.5;

f:=f+6;

end;

407.420:begin

pict:=2;

tx:=6.5;

ty:=15.5;

f:=f+6;

end;

else begin

tX:=0;

tY:=-10;

f:=0;

demonstr:=false;

count:=1;

end

end;

end;

if kadr

then begin //Запуск Ρ€Π΅ΠΆΠΈΠΌΠ° отобраТСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ построСния 1 ΠΊΠ°Π΄Ρ€Π°

time0:= GetTickCount;

FrameTime:=time0 — time1;

time1:=time0;

FRMGL.Caption :=inttostr (count)+'ΠΊΠ°Π΄Ρ€ 3Π° '+ inttostr (Frametime)+'мс ';

end

else

FRMGL.Caption :='Gallery ';

SwapBuffers (DC);

end;

{=======================================================================

Π€ΠΎΡ€ΠΌΠ°Ρ‚ пиксСля}

procedure SetDCPixelFormat (hdc: HDC);

var

pfd: TPixelFormatDescriptor;

nPixelFormat: Integer;

begin

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

pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;

nPixelFormat := ChoosePixelFormat (hdc, @pfd);

SetPixelFormat (hdc, nPixelFormat, @pfd);

end;

{=======================================================================

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹}

procedure TfrmGL. FormCreate (Sender: TObject);

begin

room:=2;

DC := GetDC (Handle);

SetDCPixelFormat (DC);

hrc := wglCreateContext (DC);

wglMakeCurrent (DC, hrc);

glClearColor (1, 1, 0.9, 1.0); // Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π°

glLineWidth (1.5);

glEnable (GL_LIGHTING);

glEnable (GL_LIGHT0);

glEnable (GL_DEPTH_TEST);

glEnable (GL_COLOR_MATERIAL);

quadObj := gluNewQuadric;

tX:=0;

tY:=-10;

tZ:=-2;

demonstr:=false;

count:=1;

lock:=true;

pict:=1;

zal:=false;

mode:=true;

form2.prosmotr:=false;

getpict:=true;

p:=0;

t:=0;

f:=0;

ShowCursor (false);

wrkX:=Left+round (Width/2);

wrkY:=Top+round (Height/2);

SetCursorPos (wrkx, wrky);

end;

{=======================================================================

ΠšΠΎΠ½Π΅Ρ† Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния}

procedure TfrmGL. FormDestroy (Sender: TObject);

begin

gluDeleteQuadric (quadObj);

wglMakeCurrent (0, 0);

wglDeleteContext (hrc);

ReleaseDC (Handle, DC);

DeleteDC (DC);

end;

procedure showimage (number:byte);

begin

Form3.Visible:=true;

Form3.Image1.Center:=true;

Form3.Image1.AutoSize:=true;

if fileexists (form2.nameimage[number]) then

begin

form3.Image1.Picture.LoadFromFile (form2.nameimage[number]);

form3.deleteimage.Enabled:=true;

form3.rotate90.Enabled:=true;

form3.Rotate180.Enabled:=true;

end

else

begin

form3.Image1.Picture:=nil;

form3.rotate90.Enabled:=false;

form3.Rotate180.Enabled:=false;

form3.deleteimage.Enabled:=false;

end;

Form3.Height:=Form3.Image1.Height+60;

Form3.Width:=Form3.Image1.Width+35;

frmGl.Visible:=false;

ShowCursor (true);

frmgl.hide;

showcursor (true)

end;

{==============================================================

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ клавиш управлСния}

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

Shift: TShiftState);

var

tx0,ty0:Glfloat;

var

kolfile:byte;

begin

If Key = VK_ESCAPE then

begin

ShowCursor (true);

form2.Visible:=true;

form2.DirectoryListBox1.Directory:=form2.directory+'/download';

form2.FilterComboBox1.Filelist.Mask:='*.bmp';

for kolfile:=1 to 17 do

begin

if fileexists (form2.directory+'/download/fotogallery'+inttostr (kolfile)+'.bmp') then

if deletefile (form2.directory+'/download/fotogallery'+inttostr (kolfile)+'.bmp') then

form2.FileListBox1.DeleteSelected;

Form2.colpic[kolfile]: =false;

end ;

form2.DirectoryListBox1.Directory:=form2.directory;

form2.FilterComboBox1.Filelist.Mask:=form2.mask;

frmgl.close;

end;

if Key=VK_Return

then

begin

if (ty<-6) and (ty>-12) and (tx>0) and (tx<8)

then begin form3. number:=16; showimage (form3.number); end;

if (ty>-9) and (ty<-3) and (tx>3) and (tx<12)

then begin form3. number:=12; showimage (form3.number); end;

if (ty>-3) and (ty<4) and (tx>3) and (tx<12)

then begin form3. number:=11; showimage (form3.number); end;

if (ty>4) and (ty<12) and (tx>3) and (tx<12)

then begin form3. number:=10; showimage (form3.number); end;

if (ty<-6) and (ty>-12) and (tx>-8) and (tx<0)

then begin form3. number:=17; showimage (form3.number); end;

if (ty>-9) and (ty<-3) and (tx>-12) and (tx<-3)

then begin form3. number:=15; showimage (form3.number); end;

if (ty>-3) and (ty<4) and (tx>-12) and (tx<-3)

then begin form3. number:=14; showimage (form3.number); end;

if (ty>4) and (ty<12) and (tx>-12) and (tx<-3)

then begin form3. number:=13; showimage (form3.number); end;

if (ty>2) and (ty<12) and (tx>-6) and (tx<6)

then begin form3. number:=9; showimage (form3.number); end;

if (ty>12) and (ty<20) and (tx>1) and (tx<12)

then begin form3. number:=8; showimage (form3.number); end;

if (ty>20) and (ty<28) and (tx>1) and (tx<12)

then begin form3. number:=7; showimage (form3.number); end;

if (ty>28) and (ty<36) and (tx>1) and (tx<12)

then begin form3. number:=6; showimage (form3.number); end;

if (ty>12) and (ty<20) and (tx>-11) and (tx<-1)

then begin form3. number:=5; showimage (form3.number); end;

if (ty>20) and (ty<28) and (tx>-11) and (tx<-1)

then begin form3. number:=4; showimage (form3.number); end;

if (ty>28) and (ty<35) and (tx>-11) and (tx<-1)

then begin form3. number:=3; showimage (form3.number); end;

if (ty>30) and (ty<35) and (tx>0) and (tx<8)

then begin form3. number:=1; showimage (form3.number); end;

if (ty>30) and (ty<35) and (tx>-8) and (tx<0)

then begin form3. number:=2; showimage (form3.number); end;

end;

if Key=VK_F1

then begin

lock:=false;

Application.HelpFile:='HelpHelp.hlp';

Application.HelpCommand (HELP_FINDER, 0);

end;

if Key=VK_F2

then begin

if lock

then ShowCursor (true)

else ShowCursor (false);

lock:=not lock;

end;

if Key=VK_F3

then begin

demonstr:=not demonstr;

count:=1;

end;

If Key = VK_F4

then kadr:=not kadr;

if Key=VK_F5

then getpict:=not getpict;

if Key=VK_F8

then begin

zal:=true;

room:=room+1;

end;

if not demonstr

then begin

If Key = VK_Left then

begin

ty0:=ty;

tx0:=tx;

ty := ty — sin (f*pi/180)/2;

tX := tX + cos (f*pi/180)/2;

end;

If Key = VK_Right then

begin

ty0:=ty;

tx0:=tx;

ty := ty + sin (f*pi/180)/2;

tX := tX — cos (f*pi/180)/2;

end;

If Key = VK_up then

begin

ty0:=ty;

tx0:=tx;

ty := ty + sin ((f+90)*pi/180)/2;

tX := tX — cos ((f+90)*pi/180)/2;

end;

If Key = VK_down then

begin

ty0:=ty;

tx0:=tx;

ty := ty — sin ((f+90)*pi/180)/5;

tX := tX + cos ((f+90)*pi/180)/5;

end;

If Key = VK_delete then

tz:=tz-0.5;

If Key = VK_insert then

tz:=tz+0.5;

if room=2

then

begin

if (tx<=-11) and (tx>=-12)

then

tx:=-11;

end

else begin

if (tx<=-11)and (tx>=-12)and (((ty>-12) and (ty<-10.5))or ((ty>-6.5) and (ty<36)))

then

tx:=-11;

if (tx>=-13)and (tx<=-12)and (((ty>-12) and (ty<-10.5))or ((ty>-6.5) and (ty<36)))

then

tx:=-13;

end;

if room>=4

then begin

if (tx>=11)and (tx<=12)and (((ty>-12) and (ty<6.5))or ((ty>10.5) and (ty<36)))

then

tx:=11;

if (tx<=13)and (tx>=12)and (((ty>-12) and (ty<6.5))or ((ty>10.5) and (ty<36)))

then

tx:=13;

end

else if tx>=11

then tx:=11;

if (ty<=-11)

then ty:=-11;

if (ty>=35)

then ty:=35;

if (ty>11.4) and (ty<12.4) and ((tx>8) or (tx<-8) or ((tx<5) and (tx>-5)))

then begin

ty:=ty0;

end;

if (ty>12) and (ty<28.4) and (tx>-0.8) and (tx<0.8)

then

tx:=tx0;

if (tx>-0.8) and (tx<0.8) and (ty<28.4) and (ty>27)

then

ty:=ty0;

if (ty<12)// and (tx<12) and (tx>-12)

then pict:=1

else begin

{if tx<-12

then pict:=1 ;

if tx>12

then pict:=1

else }pict:=2

end;

end;

InvalidateRect (Handle, nil, False);

end;

{======================================================================

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° пСрСрисовки Π³Π°Π»Π΅Ρ€Π΅ΠΈ}

procedure TfrmGL. FormResize (Sender: TObject);

begin

glViewport (0, 0, ClientWidth, ClientHeight);

glMatrixMode (GL_PROJECTION);

glLoadIdentity;

gluPerspective (50, Width/Height, 0.1, 48.2);

glMatrixMode (GL_MODELVIEW);

glLoadIdentity;

glRotatef (90.0, 1.0, 0.0, 0.0); // ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° — ось Y

InvalidateRect (Handle, nil, False);

end;

{====================================================================

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½Π΅ ΠΌΡ‹ΡˆΠΈ}

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

Y: Integer);

begin

if Lock

then

begin

GetCursorPos (mpos);

if not demonstr

then begin

f:=f-(mpos.x-(wrkX))/8;

t:=t+(mpos.y-(wrkY))/8;

end;

InvalidateRect (Handle, nil, False);

end

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