ИспользованиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ OpenGL Π² Delphi

Π­Ρ‚Π° достаточно большая ΡΡ‚Π°Ρ‚ΡŒΡ посвящСна ΠΎΠ±Π·ΠΎΡ€Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ OpenGL написанная Ricardo Sarmiento. ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π½ΠΈΠΆΠ΅ написаны с использованиСм этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ - Ρ‚ΠΎΡ‡Π½Π΅Π΅ я нашСл ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈ написал ΡΡ‚Π°Ρ‚ΡŒΡŽ. CΡ‚Π°Ρ‚ΡŒΡ скорСС ΠΎΠ±Π·ΠΎΡ€ возмоТностСй Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ OpenGL , Ρ‡Π΅ΠΌ руководство ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ. Π₯отя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ для своих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ - Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² DXF.

Π₯ΠΎΡ‡Ρƒ Ρ€Π°Π·ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ со всСвозмоТными вСрсиями Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² OpenGL.

Начиная с Delphi 3 Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Source ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Ρ„Π°ΠΉΠ» OpenGL.pas - это ΠΈ Π΅ΡΡ‚ΡŒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ вСрсия Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ OpenGL. Она ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° трансляциСй Ρ„Π°ΠΉΠ»ΠΎΠ² Gl.h ΠΈ Glu.h, соотвСтствСнно с языка C.

БущСствуСт Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ практичСски стандартноС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ - Glut. Π’ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π΅ Glut.h ΠΈ Π΅Π΅ трансляция Π½Π° Delphi Glut.pas. Π­Ρ‚ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ создано для Π±ΠΎΠ»Π΅Π΅ быстрого построСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² OpenGL ΠΈ Π½Π°Π±ΠΎΡ€ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€.

ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ вСрсии Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² OpenGL ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ стандартной вСрсии ΠΈ ΠΏΠΈΡˆΡƒΡ‚ΡΡ сторонними производитСлями. Как ΠΈ Ρ‚Π°, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ Π½ΠΈΠΆΠ΅.

ΠŸΡ€ΠΈΠ·Ρ‹Π²Π°ΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ OpenGL. Π’ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π°ΠΈΠ±ΠΎΠ»ΡŒΡˆΡƒΡŽ быстроту исполнСния ΠΊΠΎΠ΄Π°, ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ. Но Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΎΠ±Π·ΠΎΡ€ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ OpenGL, ΠΏΠΎΡ‡Π΅ΠΌΡƒ? Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²ΠΈΡ‡ΠΊΡƒ ΠΏΠΎΡ€ΠΎΠΉ слоТно Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² дСбрях программирования, Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ позволяСт быстро Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Ρ€Π΅Π»ΠΈΡ‰Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. ИмСнно Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒ вас Π½Π° дальнСйшСС ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ OpenGL.

Π˜Ρ‚Π°ΠΊ Π½Π°Ρ‡Π½Π΅ΠΌ. ΠŸΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π² Π΄Π°Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅:

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ рассмотрСны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ вопросы:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ сцСны TSceneGL

Scene:TSceneGL; ... Scene:=TSceneGL.create; // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡƒΡŽ сцСну....

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° TEntity - ΠΊΡƒΠ±, Π·Π°Π΄Π°Π½ΠΈΠ΅ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ TFace, установка Ρ†Π²Π΅Ρ‚Π° ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° сцСну.

Cube:Tentity; Face:TFace; .... Cube:=TEntity.create; // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ пустой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ TEntity Cube.SetColor(90,200,150); // Π˜Π½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅ΠΌ Ρ†Π²Π΅Ρ‚Π° R,G,B Face:=cube.addFace; // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ 1-ΠΉ face Π² исходном ΠΊΡƒΠ±Π΅ всСго 6 Π³Ρ€Π°Π½Π΅ΠΉ (Π² ΠΊΡƒΠ±Π΅) Face.AddVertex(1.0, 1.0, 1.0,0.0, 0.0, 1.0); // добавляСм 1-ΠΉ vertex Face.AddVertex(-1.0, 1.0, 1.0,0.0, 0.0, 1.0); // добавляСм 2-ΠΉ vertex Face.AddVertex(-1.0, -1.0, 1.0,0.0, 0.0, 1.0);// добавляСм 3-ΠΉ vertex Face.AddVertex(1.0, -1.0, 1.0,0.0, 0.0, 1.0);// добавляСм 4-ΠΉ vertex .... Scene.Entities.add(cube);// Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΡƒΠ± Π½Π° сцСну

Π—Π°Π΄Π°Π½ΠΈΠ΅ источника свСта Tlight ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° сцСну.

Light:=Tlight.create(1); // создадим источник свСта ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΅Π³ΠΎ Π½Π° сцСну Scene.lights.add(light);

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ сцСны

// ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ Handle Panel1 нашСй сцСнС, Π½Π° Π½Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ Scene.InitRC(panel1.handle); Scene.UpdateArea(panel1.width,panel1.height);

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Procedure TForm1.Timer1Timer(Sender: TObject); begin // измСняСм rx, ry,rz .... Tentity(Scene.Entities.Items).Rotate(rx,ry,rz); // ΠΏΠΎΠ²Π΅Ρ€Π½Π΅ΠΌ ΠΊΡƒΠ± Scene.Redraw; // ... ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ сцСну end;

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2

ΠžΡ‚Π»ΠΈΡ‡ΠΈΡ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°: ΠžΡŠΠ΅ΠΊΡ‚Π° TEntity - Π΄Π΅Π»ΡŒΡ„ΠΈΠ½ задаСтся Π½Π΅ Ρ‡Π΅Ρ€Π΅Π· TFace, Π° грузится ΠΈΠ· DXF Ρ„Π°ΠΉΠ»Π° - Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Тизнь.

Dolphin:=TEntity.create; Dolphin.SetColor(100,100,160); Dolphin.LoadDXF("..Dolphin.dxf",true); with dolphin do begin move(0,0,-15); // пСрСмСстим Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°Π·Π°Π΄ rotate(-30,-30,-30); // ΠΈ ΠΏΠΎΠ²Π΅Ρ€Π½Π΅ΠΌ end; Scene.entities.add(dolphin); // Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΄Π΅Π»ΡŒΡ„ΠΈΠ½Π° Π½Π° сцСну...

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3

ИзмСнСния: Π£ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Dolphin ищутся Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ ΠΊ TFace, ΠΏΡ€ΠΈ этом получаСтся эффСкт объСмного пространства:

Dolphin.CalcNormals; // высчитываСм Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Dolphin.Center; ....

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4

Procedure TForm1.FormCreate(Sender: TObject); .... Mouse:=T3DMouse.create(dolphin); // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ T3DMouse для нашСго ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Mouse.scale(1,1,0.1,1,1,1); // Π·Π°Π΄Π°Π΅ΠΌ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ пСрСмСщСния ΠΈ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°....

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ:

Procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Mouse.move(x,y,shift); // обновляСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ - Π΄Π΅Π»ΡŒΡ„ΠΈΠ½ Π² Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ… Scene.Redraw; // пСрСрисуСм сцСну end;

МоТно ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅:

Mouse.Block(4,TspeedButton(sender).down); // Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° rx ...

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 5

Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ:

Case dolphin.wireframe of 0:begin speedbutton5.caption:="Π›ΠΈΠ½ΠΈΠΈ"; dolphin.wireframe:=1; end; 1:begin speedbutton5.caption:="Π—Π°Π»ΠΈΠ²ΠΊΠ°"; dolphin.wireframe:=2; end; 2:begin speedbutton5.caption:="Π’ΠΎΡ‡ΠΊΠΈ"; dolphin.wireframe:=0; end; end; Scene.Redraw; // ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ сцСну...

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 6

Π‘ΠΎΠ±Π΅Ρ€Π΅ΠΌ всС Π² ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ FPS ΠΏΡ€ΠΈ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π΅.

Ну Π²ΠΎΡ‚, самая основа Π΄ΠΎΠ»ΠΆΠ½Π° ΡΡ‚Π°Ρ‚ΡŒ Π’Π°ΠΌ понятна. Если Ρƒ Вас Π½Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Opengl32.dll ΠΈ Glu32.dll. Π˜ΡΡ…ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² находятся Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ… Demo1-XXX.

ВСкстуры

Π­Ρ‚Π° Π³Π»Π°Π²Π° посвящСна Ρ‚Π΅ΠΊΡΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² OpenGL. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ я даю пояснСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ. По этому Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ сначала ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 1 ΠΏΠΎΡ‚ΠΎΠΌ 2, Π° Π½Π΅ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° 5. Π’ этой Π³Π»Π°Π²Π΅ описаны ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ тСкстур, ΠΈ ΠΏΡ€ΠΈ использовании GL_linear Π½ΡƒΠΆΠ΅Π½ 3D ΡƒΡΠΊΠΎΡ€ΠΈΡ‚Π΅Π»ΡŒ, ΠΈΠ½Π°Ρ‡Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠžΠ§Π•ΠΠ¬ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1

Π—Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Ρ‹

Point:TVertex; .... begin // ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° панСль Panel1 mouse.FindVertex(x,panel1.height-y,Scene,point); for i:=1 to numFound do // Для всСх ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ΠΎΠ² Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎ Mouse.FindVertex begin poly:=VertexHits[i] shr 16; vert:=VertexHits[i] mod 65536; If (poly "

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2

Π€ΠΎΡ€ΠΌΠ°Ρ‚ DXF являСтся ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для записи Ρ‚.ΠΊ. ΠΈΠΌΠ΅Π΅Ρ‚ большиС Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹. Для этого Π°Π²Ρ‚ΠΎΡ€ создаСт Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ записи. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° функция чтСния-записи.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3

НалоТСниС тСкстур Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

Thing.CreateTexture; // Π΄ΠΎΠ±Π°Π²ΠΈΠΌ тСкстуры Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ thing.texture.LoadTexture("texture.bmp"); thing.texture.automatic:=False; ... // Π° Π΄Π°Π»Π΅Π΅ ΠΈΠ΄Π΅Ρ‚ Ρ€ΡƒΡ‚ΠΈΠ½Π½Ρ‹ΠΉ процСсс задания Π²Π΅Ρ€ΡˆΠΈΠ½ для тСкстур Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ повСрхности ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° with thing do begin vertex:=Tvertex(Tface(thing.faces.items).vertices.items);// x,y,z =0,0,0 vertex.tx:=1; vertex.tz:=0; ... end;

Π”Π° Π² качСствС экспСримСнта Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ всС начиная с with thing do ..... end (задания Ρ‚ΠΎΡ‡Π΅ΠΊ для тСкстур) ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ thing.texture.automatic:=true.

ИспользованиС Ρ‚ΠΈΠΏΠΎΠ² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ тСкстур

Thing.Texture.MagFilter:=GL_linear;

Thing.Texture.MagFilter:=GL_nearest;

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4

Установка прозрачности Ρƒ тСкстур (Π°Π»ΡŒΡ„Π° ΠΊΠ°Π½Π°Π»ΠΎΠ²)

Thing.texture.EnvironmentMode:=GL_decal; // Установка transparent texturing thing.texture.envblendcolor:=scrollbar1.position; // Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0 - 255

ΠŸΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ сначала создаСтся сцСна с освСщСниСм, Π½ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ создаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС установки, ΠΏΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ FormCreate_partII.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 5

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ тСкстура:) ΠŸΡ€ΠΎΡ†Π΅ΡΡ прост - ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠΈ с Ρ†ΠΈΡ„Ρ€Π°ΠΌΠΈ ΠΌΡ‹ создаСм TBitmap ΠΈ Ρ‡Π΅Ρ€Π΅Π· Π΅Π³ΠΎ Canvas пишСм эти Ρ†ΠΈΡ„Ρ€Ρ‹. Π”Π°Π»Π΅Π΅ сохраняСм этот Π’Bitmap Π² Ρ„Π°ΠΉΠ» "texture.bmp". УдаляСм с экрана ΠΊΠΎΠΌΠΏΠ° ΡΡ‚Π°Ρ€ΡƒΡŽ тСкстуру ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ Π½ΠΎΠ²ΡƒΡŽ ΠΈΠ· Ρ€Π°Π½Π΅Π΅ созданного "texture.bmp".


Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹Π΅ тСксты всСх ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² находятся Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ… Demo2-XXX

ΠžΡΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΊΠ°ΠΊ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ источника. Π Π°Π½Π΅Π΅ источник свСта задавался ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ источник Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΎΠΆΠ΅ΠΊΡ‚ΠΎΡ€

(CLspot). Light:=Tlight.create(1); Light.LightType:=CLspot; Light.CutOffAngle:=5; Light.SpotExponent:=100;

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ CutOffAngle - ΡƒΠ³ΠΎΠ» расхоТдСния Π»ΡƒΡ‡Π°.

SpotExponent - ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ затухания источника.

Light.SetOrientation(0,-1,0); Light.Source.SetPosition(0,5,-20);

Π“Ρ€ΡƒΠ±ΠΎ говоря это коэфициСнт ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠ°ΠΊ Π΄Π°Π»Π΅ΠΊΠΎ ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ свСт. Если SpotExponent=0, Ρ‚ΠΎ ΠΏΡƒΡ‡Π΅ΠΊ свСта ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ Π² Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ. ИдСм Π΄Π°Π»Π΅Π΅:

Π—Π°Π΄Π°Π΅ΠΌ ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎΠΆΠ΅ΠΊΡ‚ΠΎΡ€Π° ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚.
ΠŸΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ полос ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ просто мСняСм ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ†Π²Π΅Ρ‚Π° Π² источникС. НапримСр для Ambient:

SBlightRed.position:=round(Light.Fambient * 100); SBlightGreen.position:=round(Light.Fambient * 100); SBlightBlue.position:=round(Light.Fambient * 100);

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2

НаиболСС ΠΏΠΎΠ»Π½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ освСщСния ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅ΠΌ источник Π² пространствС.


ВсС, исходныС тСксты всСх ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² этой Π³Π»Π°Π²Ρ‹ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ… Demo3-XXX

Π’ΡƒΠΌΠ°Π½

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Ρ‚ΡƒΠΌΠ°Π½Π° Π² сцСнС ΠΎΡ‡Π΅Π½ΡŒ просто:

Scene:TSceneGL; ... scene.fogEnabled:=True;

ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это установка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚ΡƒΠΌΠ°Π½Π°:

Π’ΠΈΠΏ Ρ‚ΡƒΠΌΠ°Π½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ:

FogType:=Gl_Linear; fogType:=GL_exp; fogType:=GL_exp2;

Минимальная ΠΈ максимальная дистанция:

  • fogMaxDist
  • fogMinDist

Π˜Π½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ:

  • fogDensity

Π¦Π²Π΅Ρ‚ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ RGB:

  • scene.fogcolor; R
  • scene.fogcolor; G
  • scene.fogcolor; B

ПослС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ измСнСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Redraw. Для Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ эффСкта Ρ‚ΡƒΠΌΠ°Π½Π° ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° ΠΈ самого Ρ‚ΡƒΠΌΠ°Π½Π°. Они Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ /см ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ /.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ находятся Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Demo4-XXX.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
По ΠΌΠ΅Ρ€Π΅ знакомства с использованиСм OpenGL Π² Delphi Ρƒ мСня появился ряд ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ аспСкты этого вопроса. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с самых ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… просто ΠΎΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ ΠΎΠΊΠ½ΠΎ ΠΈΠ»ΠΈ выводится ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ OpenGL ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈΠ· тысяч строк ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΌΠΎΠΉ ΠΏΡƒΡ‚ΡŒ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΌΠΎΠ³ΠΎΠΉ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² этих вопросах.
Когда я Π½Π°Ρ‡ΠΈΠ½Π°Π» ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ этого, Ρƒ мСня Π½Π΅ Π±Ρ‹Π»ΠΎ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° использования OpenGL Π² Delphi, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎΡ€ΠΎΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° C ΠΈ C++, поэтому ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ с Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ эти ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Delphi. Π—Π°Ρ‚Π΅ΠΌ появились ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ собствСнныС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹. Моя основная Ρ€Π°Π±ΠΎΡ‚Π° связана с ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Π½ΠΈΠ΅ΠΌ Π² Π²ΡƒΠ·Π΅, послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ я Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ» Π² ΡƒΡ‡Π΅Π±Π½Ρ‹Π΅ курсы ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ основ OpenGL, студСнты с ΠΌΠΎΠ΅ΠΉ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ смогли ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ряд интСрСсных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ².
Π― Ρ€Π΅ΡˆΠΈΠ» ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠ΅ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΎΠ·Π°Π³Π»Π°Π²ΠΈΠ» Π½Π°Π±ΠΎΡ€ "ЖиЛистая Delphi" ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» сайту "ΠšΠΎΡ€ΠΎΠ»Π΅Π²ΡΡ‚Π²ΠΎ Delphi". На сайтС ΠΌΠ½Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ эти ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ сСриСй статСй ΠΏΠΎ вопросам использования OpenGL Π² Delphi. Данная ΡΡ‚Π°Ρ‚ΡŒΡ являСтся ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ΠΉ этого Ρ†ΠΈΠΊΠ»Π°.
Π‘Ρ‚Π°Ρ‚ΡŒΠΈ я ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅, доступном для самой ΡˆΠΈΡ€ΠΎΠΊΠΎΠΉ Π°ΡƒΠ΄ΠΈΡ‚ΠΎΡ€ΠΈΠΈ - ΠΎΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ для Windows Π΄ΠΎ ΡƒΠΌΡƒΠ΄Ρ€Π΅Π½Π½Ρ‹Ρ… профСссионалов. Π― ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ краткости Π² своих рассуТдСниях, освСщая Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΡƒΡ‚ΡŒ рассматриваСмых вопросов. МногиС вопросы, освСщаСмыС здСсь, ясно ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… "ЖиЛистой Delphi".
OpenGL - стандартный для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм Π½Π°Π±ΠΎΡ€ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΉ ΠΈ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π² ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹Ρ… CAD-систСмах ΠΈ ΠΈΠ³Ρ€Π°Ρ….
ΠŸΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ΡΡ Π² составС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Windows, начиная с вСрсии OSR2 Π² Π²ΠΈΠ΄Π΅ Π΄Π²ΡƒΡ… DLL-Ρ„Π°ΠΉΠ»ΠΎΠ² - opengl32.dll ΠΈ glu32.dll. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΈΠ· этих Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ Π΅ΡΡ‚ΡŒ собствСнно Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ OpenGL, вторая содСрТит Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π½ΠΎ построСнных ΠΈ выполняСмых с ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ opengl32.dll ΠΈ ΡΠ²Π»ΡΡŽΡ‰Π°ΡΡΡ надстройкой.
Π’ΠΎ, Ρ‡Ρ‚ΠΎ эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² составС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ распространСниС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’ΠΎ, Ρ‡Ρ‚ΠΎ OpenGL распространяСтся Π² Π²ΠΈΠ΄Π΅ динамичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ доступ ΠΊ Π΅Π³ΠΎ функциям.
ΠŸΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ Π±Π°Π·Ρ‹ для построСния ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ нСсомнСнными достоинствами OpenGL ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΅Π³ΠΎ простота ΠΈ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΡΡ‚ΡŒ - ΠΊΠΎΠ΄ Π² случаС нСобходимости ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ пСрСнСсти Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму.
Для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ OpenGL Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Π½Π° сайт http://www.opengl.org
ВмСстС с Delphi, начиная с Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ вСрсии, поставляСтся Ρ„Π°ΠΉΠ» ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΠΎ OpenGL Ρ„ΠΈΡ€ΠΌΡ‹ MicroSoft ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» opengl.pas, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Π³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π² прилоТСниях, написанных Π½Π° Delphi.
Π•ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ вСрсии Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² нСзависимых Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ OpenGL, ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΠ΅ доступ ΠΊ Π΅Π³ΠΎ функциям ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ ООП ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. НСкоторыС ΠΈΠ· этих Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ OpenGL для Windows Ρ„ΠΈΡ€ΠΌΡ‹ SGI, ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽ собствСнноС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽ Π±ΠΎΠ»Π΅Π΅ высокиС скоростныС ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. Одна ΠΈΠ· самых ΠΏΠΎΠ»Π½Ρ‹Ρ… систСм, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π°Ρ Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ всСх вСрсий OpenGL - это Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° MGL Ρ„ΠΈΡ€ΠΌΡ‹ SciTechSoft.
ΠœΡ‹ Π² своих ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠΏΠΈΡ€Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° стандартныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Delphi, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π’Π°ΠΌ Π½Π΅ придСтся ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. УмСя ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ OpenGL, Π’Ρ‹ Π»Π΅Π³ΠΊΠΎ смоТСтС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Ρ‡Π΅Ρ€Π½ΠΎΠ²ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ OpenGL. Π’Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· этих ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ нСустойчивой Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ.
Π˜Ρ‚Π°ΠΊ, Delphi Π² стандартной поставкС позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ OpenGL Π² Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… прилоТСниях, Π½ΠΎ ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΏΠ»ΠΎΡ…ΠΎ понятно ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠΌΠΎΡ‰ΠΈ, Π° Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ использования OpenGL Delphi Π½Π΅ сопровоТдаСтся (ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π½Π° сСгодня). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ часто тяТСло ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊ ΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с OpenGL Π² Delphi. Π Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ вопросов использования OpenGL Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈ использованию Π² Delphi ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ посвящСн Π΄Π°Π½Π½Ρ‹ΠΉ курс статСй.
К соТалСнию, эта Ρ‚Π΅ΠΌΠ° ослоТнСна Ρ‚Π΅ΠΌ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎΠΌ, Ρ‡Ρ‚ΠΎ для построСния самой минимальной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ OpenGL трСбуСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ряд ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… дСйствий, ΠΊΠΎΠ΄ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΡƒΠ³Π°Ρ‚ΡŒ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… своСй ΠΎΠ±ΡˆΠΈΡ€Π½ΠΎΡΡ‚ΡŒΡŽ.
Для понимания смысла этих дСйствий ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ смысл основных понятий ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Windows - ссылка, контСкст, сообщСниС, Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Delphi Π½Π΅ всСгда Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… программистами. Π–Π΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ хотя Π±Ρ‹ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ знания ΠΎ Ρ€ΠΎΠ»ΠΈ динамичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π² этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС. Π₯отя, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ OpenGL ΠΈ Π±Π΅Π· Π³Π»ΡƒΠ±ΠΎΠΊΠΈΡ… Π·Π½Π°Π½ΠΈΠΉ Π² этой области, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΠ²ΡˆΠΈΡΡŒ собствСнно Π½Π° функциях OpenGL.
Π’Π°ΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‡Π°Ρ‰Π΅ всСго прилоТСния, Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ, Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ Delphi Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² создании ΠΎΠΊΠ½Π° прилоТСния, Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π΅ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ манипуляций с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ ΠΈ ΠΌΡ‹ΡˆΡŒΡŽ. Для Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ‡Π°Ρ‰Π΅ всСго ΠΈ Π½Π΅ трСбуСтся богатство Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ VCL. ΠΈ ΠΊΡ€Π°ΠΉΠ½Π΅ Π²Π°ΠΆΠ½Ρ‹ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ "ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ" ΠΌΠΈΠ½ΠΈΠ°Ρ‚ΡŽΡ€Π½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ модуля. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ с самого Π½Π°Ρ‡Π°Π»Π° Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒ Ρ‚Π΅ΠΌΡ‹ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ Π½ΠΈΠΆΠ΅ RAD-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, Ρ‚ΠΎ Π½Π°ΠΌ становится ΠΏΠΎ силам ΠΈ написаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π±Π΅Π· Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… срСдств Π²ΠΎΠΎΠ±Ρ‰Π΅, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Windows API, ΡΡ‚Ρ€Π΅ΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ… послС компиляции ΠΌΠΈΠ½ΠΈΠ°Ρ‚ΡŽΡ€Π½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ (порядка Π΄Π²ΡƒΡ… дСсятков ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚).
Π˜Ρ‚Π°ΠΊ, наш Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ приходится Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ с вопросов, Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ Π½Π΅ связанных с OpenGL.
ΠŸΠΎΡΡ‚Π°Ρ€Π°Π΅ΠΌΡΡ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ рассмотрСниС этих Ρ‚Π΅ΠΌ самым ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ объСмом, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π’Ρ‹ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, Π±ΠΎΠ»Π΅Π΅ Π±ΠΎΠ³Π°Ρ‚Ρ‹Π΅ источники ΠΏΠΎ этим вопросам.
Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅. Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚.
НачнСм наш Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ с понятий "событиС" ΠΈ "сообщСниС".
ΠžΡ‡Π΅Π½ΡŒ часто это синонимы ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, ΠΎΠ±Ρ‰Π°ΡŽΡ‰Π΅ΠΉΡΡ с прилоТСниями посрСдством посылки сообщСний. Код, написанный Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Delphi ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события OnCreate, выполняСтся ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ сообщСния WM_CREATE, ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡŽ WM_PAINT соотвСтствуСт событиС OnPaint, ΠΈ Ρ‚.Π΄..Π’Π°ΠΊΠΈΠ΅ события ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΡƒ, ΡΡ…ΠΎΠ΄Π½ΡƒΡŽ с ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠΎΠΉ сообщСний.
Как опСрационная систСма Ρ€Π°Π·Π»ΠΈΡ‡Π°Π΅Ρ‚ ΠΎΠΊΠ½Π° для осущСствлСния Π΄ΠΈΠ°Π»ΠΎΠ³Π° с Π½ΠΈΠΌΠΈ? ВсС ΠΎΠΊΠ½Π° ΠΏΡ€ΠΈ своСм создании Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ "ссылка Π½Π° ΠΎΠΊΠ½ΠΎ". Π’ΠΈΠΏ этой Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ Π² Delphi - HWND (WiNDow Handle, ссылка Π½Π° ΠΎΠΊΠ½ΠΎ).
Бсылка Π½Π° ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой, Π½ΠΎ ΠΈ прилоТСниями для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΠΊΠ½Π°, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ манипуляции.
ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ смысл ссылки Π½Π° ΠΎΠΊΠ½ΠΎ Π½Π° нСслоТном ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.
ΠžΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ минимальноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Delphi ΠΈ Π½Π°Ρ‡Π½ΠΈΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Π€ΠΎΡ€ΠΌΡƒ Π½Π°Π·ΠΎΠ²ΠΈΡ‚Π΅ Form2, размСститС Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события OnClick ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄ΠΈΡ‚Π΅ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π²ΠΈΠ΄Ρƒ:

begin

if H <> 0 then

ShowMessage ("Π•ΡΡ‚ΡŒ Form1!" )

else

ShowMessage ("НСт Form1!" )

end ;


Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈ Ρ‰Π΅Π»Ρ‡ΠΊΠ΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅ выдаСтся сообщСниС, Π΅ΡΡ‚ΡŒ Π»ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, класс ΠΎΠΊΠ½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ зарСгистрирован Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС ΠΊΠ°ΠΊ "TForm1", Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ записано "Form1". Π’ΠΎ Π΅ΡΡ‚ΡŒ Ссли ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Π΅ наши ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ выдаСтся ΠΎΠ΄Π½ΠΎ сообщСниС, Ссли ΠΎΠΊΠ½ΠΎ с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ "Form1" Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ, ΠΏΡ€ΠΈ Ρ‰Π΅Π»Ρ‡ΠΊΠ΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ выдаСтся Π΄Ρ€ΡƒΠ³ΠΎΠ΅ сообщСниС.
Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ API FindWindow, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ Ρ‚ΠΈΠΏΠ° HWND - ссылку Π½Π° Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π»ΠΈΠ±ΠΎ ноль, Ссли Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ.
Π˜Ρ‚Π°ΠΊ, ссылка Π½Π° ΠΎΠΊΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ опрСдСляСт ΠΎΠΊΠ½ΠΎ. Бвойство Handle Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ Π΅ΡΡ‚ΡŒ эта ссылка, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ API CreateWindow - создании ΠΎΠΊΠ½Π°. ИмСя ссылку Π½Π° ΠΎΠΊΠ½ΠΎ, опСрационная систСма общаСтся с ΠΎΠΊΠ½ΠΎΠΌ ΠΏΡƒΡ‚Π΅ΠΌ посылки сообщСний-сигналов ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ событиС, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊ этому ΠΎΠΊΠ½Ρƒ. Если ΠΎΠΊΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° это событиС, опСрационная систСма ΠΈΠΌΠ΅Π΅Ρ‚ это Π² Π²ΠΈΠ΄Ρƒ ΠΈ вмСстС с ΠΎΠΊΠ½ΠΎΠΌ осущСствляСт эту Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ. Окно ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π½Π΅ имСя фокус ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ сообщСния ΠΈ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π½ΠΈΡ….
ΠŸΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ это Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.
ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события OnMouseMove Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄ΠΈΡ‚Π΅ ΠΊ Π²ΠΈΠ΄Ρƒ:

procedure TForm2.FormMouseMove (Sender: TObject ;

Shift: TShiftState; X, Y: Integer ) ;

begin

Caption:= "x=" + IntToStr (X) + ", y=" + IntToStr (Y) ;

end ;

Π’ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ„ΠΎΡ€ΠΌΡ‹ выводятся ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ указатСля ΠΌΡ‹ΡˆΠΈ.
ЗапуститС Π΄Π²Π° экзСмпляра ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ фокус ("Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅"), Ρ‚ΠΎΠΆΠ΅ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ указатСля ΠΏΠΎ Π΅Π³ΠΎ повСрхности.
ИмСя ссылку Π½Π° ΠΎΠΊΠ½ΠΎ, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ с Π½ΠΈΠΌ Π»ΡŽΠ±Ρ‹Π΅ дСйствия, ΠΏΡƒΡ‚Π΅ΠΌ посылки Π΅ΠΌΡƒ сообщСний.
ИзмСним ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‰Π΅Π»Ρ‡ΠΊΠ° ΠΊΠ½ΠΎΠΏΠΊΠΈ:

procedure TForm2.Button1Click (Sender: TObject ) ;

begin

H:= FindWindow ("TForm1" , "Form1" ) ;

if H <> 0 then

SendMessage(H, WM_CLOSE, 0 , 0 ) ;

end ;

Если имССтся ΠΎΠΊΠ½ΠΎ класса "TForm1" с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ "Form1", нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ посылаСт Π΅ΠΌΡƒ сообщСниС WM_CLOSE - пытаСтся Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ.
Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅, Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π½Π° повСрхности Ρ‡ΡƒΠΆΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ссылку Π½Π° это ΠΎΠΊΠ½ΠΎ.
Для Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π½Π° повСрхности Ρ€ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.
РазмСститС Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΠΊΠ½ΠΎΠΏΠΊΡƒ, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Ρ‰Π΅Π»Ρ‡ΠΊΠ° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠ²Π΅Π΄ΠΈΡ‚Π΅ ΠΊ Π²ΠΈΠ΄Ρƒ:

begin

Dc:= GetDC (Handle) ;

ReleaseDC (Handle, dc) ;

end ;

ЗапуститС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ Ρ‰Π΅Π»Ρ‡ΠΊΠ΅ Π½Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π½Π° повСрхности ΠΎΠΊΠ½Π° рисуСтся ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚. Для рисования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Windows.
ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π½Π° повСрхности Ρ‡ΡƒΠΆΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, для Ρ‡Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ написанный ΠΊΠΎΠ΄:

procedure TForm2.Button2Click (Sender: TObject ) ;

begin

Window:= FindWindow ("TForm1" , "Form1" ) ;

if Window <> 0 then

begin

Dc:= GetDC (Window) ;

Rectangle (dc, 10 , 10 , 110 , 110 ) ;

ReleaseDC (Handle, dc) ;

end ;

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния, Ссли Π² систСмС зарСгистрировано ΠΎΠΊΠ½ΠΎ класса "TForm1" с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ "Form1", Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Π½Π° Π½Π΅Π³ΠΎ. ЗапуститС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ минимального ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ созданного ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠŸΡ€ΠΈ Ρ‰Π΅Π»Ρ‡ΠΊΠ΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ рисуСтся Π½Π° повСрхности Ρ‡ΡƒΠΆΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.
Π—Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ Ссли Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Project1.exe ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π² Delphi ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΅ΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΏΡ€ΠΈ Ρ‰Π΅Π»Ρ‡ΠΊΠ΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° повСрхности ΠΎΠΊΠ½Π° Ρ„ΠΎΡ€ΠΌΡ‹, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ.
Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Windows для воспроизвСдСния Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π΅ Ρ‚ΠΈΠΏΠ° HDC (Handle Device Context, ссылка Π½Π° контСкст воспроизвСдСния), для задания значСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ Ρ‚ΠΈΠΏΠ° HWND - ссылка Π½Π° ΠΎΠΊΠ½ΠΎ, ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ всСх зарСгистрированных Π² систСмС ΠΎΠΊΠΎΠ½. Π’ зависимости ΠΎΡ‚ вСрсии Delphi ссылки ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ Π»ΠΈΠ±ΠΎ Integer, Π»ΠΈΠ±ΠΎ LongWord.
ГрафичСская систСма OpenGL, ΠΊΠ°ΠΊ ΠΈ любоС Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Windows, Ρ‚Π°ΠΊΠΆΠ΅ нуТдаСтся Π² ссылкС Π½Π° ΠΎΠΊΠ½ΠΎ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ воспроизвСдСниС - ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ссылкС Π½Π° контСкст воспроизвСдСния - Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° Ρ‚ΠΈΠΏΠ° HGLRC (Handle openGL Rendering Context, ссылка Π½Π° контСкст воспроизвСдСния OpenGL). Для получСния этого контСкста OpenGL нуТдаСтся Π² Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π΅ Ρ‚ΠΈΠΏΠ° HDC (контСкст воспроизвСдСния) ΠΎΠΊΠ½Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Π²Ρ‹Π²ΠΎΠ΄.
ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ наши ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ private описания Ρ„ΠΎΡ€ΠΌΡ‹:


А ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события OnCreate Ρ„ΠΎΡ€ΠΌΡ‹ начинаСтся со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… строк:

DC:= GetDC(Handle) ;

SetDCPixelFormat;

Hrc:= wglCreateContext(DC) ;

WglMakeCurrent(DC, hrc) ;

Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ контСкст воспроизвСдСния Windows, Π·Π°Π΄Π°Π΅ΠΌ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ пиксСлСй, создаСм контСкст воспроизвСдСния OpenGL ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ Π΅Π³ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ OpenGL ΠΌΠΎΠ³Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с этим ΠΎΠΊΠ½ΠΎΠΌ.
По ΠΏΠΎΠ²ΠΎΠ΄Ρƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° пиксСлСй ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅, Π° сСйчас я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΄Π²Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°.
Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ Ρ‚ΠΈΠΏΠ° HDC ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΡ€ΠΈ создании ΠΎΠΊΠ½Π°, Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ события OnCreate, ΠΈΠ»ΠΈ, Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ сообщСния WM_CREATE. Π­Ρ‚ΠΎ являСтся ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΈ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΌ для Windows-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.
НСкоторыС программисты сдСлали ΠΌΠ½Π΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ контСкста воспроизвСдСния ΠΏΡ€ΠΈ создании ΠΎΠΊΠ½Π° являСтся нСсколько Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ для Windows 9X ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ контСкста Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ событий OnShow ΠΈΠ»ΠΈ OnPaint. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, это Ρ‚Π°ΠΊ ΠΈ Π΅ΡΡ‚ΡŒ, ΠΈ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ситуациях ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π° коррСктности Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ это ΠΏΡ€ΠΈ написании отвСтствСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, контСкст воспроизвСдСния Windows ΠΈ контСкст воспроизвСдСния OpenGL ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹Π²ΠΎΠ΄Π° OpenGL ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ±Ρ€Π°ΠΌΠ»ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ строками:

dc:= BeginPaint(Window, ps) ;
wglMakeCurrent(DC, hrc) ;
wglMakeCurrent(0 , 0 ) ;
EndPaint (Window,ps) ;
ReleaseDC (Window, dc) ;

ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽ, это ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ дСйствий для Windows-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, контСкст воспроизвСдСния Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ доступСн систСмС ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ прилоТСниям. Π― ΠΆΠ΅ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Π³Π°ΡŽ этим ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΠΌ для сокращСния ΠΊΠΎΠ΄Π°. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, хотя ΠΌΡ‹ ΠΎΡ‚Π΄Π°Π΅ΠΌ сСбС ΠΎΡ‚Ρ‡Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ситуациях Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ "Π³Π»ΡŽΠΊΠΎΠ²Π°Ρ‚ΠΎΡΡ‚ΠΈ" Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π΄ΠΎ ΡƒΡ‡Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈ написании отвСтствСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
Π’ Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… контСкст воспроизвСдСния OpenGL ΠΌΡ‹ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌ сразу ΠΆΠ΅ ΠΏΡ€ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ, Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ события OnCreate, Π° освобоТдаСм Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния, Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ события OnDestroy.
Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ - ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ OpenGL ΠΈΠΌΠ΅ΡŽΡ‚ прСфикс gl для Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Ρ… Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ opengl32.dll ΠΈ glu для Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Ρ… Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ glu32.dll. ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ находятся Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ opengl.pas. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ OpenGL, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ OpenGL ΠΏΠΎΠ΄ Windows, ΠΈΠΌΠ΅ΡŽΡ‚ прСфикс wgl, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, wglCreateContext, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ прСфикса, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, SwapBuffers. Π˜Ρ… ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ описаны Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ windows.pas.
Если понятия "сообщСниС" ΠΈ "контСкст" Π’Π°ΠΌΠΈ поняты, сСйчас Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ WinMin.dpr ΠΈ Paint.dpr Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Beginer/0. Π’ спискС uses Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² пСрСчислСны всСго Π΄Π²Π° модуля - Windows ΠΈ Messages (SysUtils Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Paint Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ VCL Delphi. ПослС компиляции этих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ 16-Ρ‚ΠΈ ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚Π½Ρ‹Π΅ прилоТСния. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ эти ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅, ΡƒΠΌΠ΅ΡŽΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎΠ΅, Π½ΠΎ для нас Π²Π°ΠΆΠ΅Π½ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π° старого Π΄ΠΎΠ±Ρ€ΠΎΠ³ΠΎ Borland Pascal-я, Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΉ, ΠΏΠ»ΠΎΡ…ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ, Π½ΠΎ эффСктивный для Π½Π°ΡˆΠΈΡ… Π·Π°Π΄Π°Ρ‡. Π­Ρ‚ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°ΠΌ, ΠΊΠ°ΠΊΡƒΡŽ ΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΆΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ выполняСт Π·Π° нас Delphi, ΠΈ ΠΊΠ°ΠΊ Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Windows-прилоТСния. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ я постарался Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΡ‚ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π’Π°ΠΌ Π±Ρ‹Π»ΠΎ Π»Π΅Π³Ρ‡Π΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ.
Если Π’Ρ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ΡΡŒ, ΠΊΠ°ΠΊ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ функциями GDI Π½Π° повСрхности своСго ΠΎΠΊΠ½Π°, Π’Ρ‹ яснСС смоТСтС ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ машина OpenGL рисуСт Π½Π° повСрхности Ρ‡ΡƒΠΆΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.

OpenGL ΠΈ Delphi. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ЗдравствуйтС, это пСрвая ΡΡ‚Π°Ρ‚ΡŒΡ посвящСнная OpenGL Π² Delphi. Она Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ Вас ΠΊ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΡŽ графичСскому ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ с OpenGL ΠΈ Delphi. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ даСтся основной смысл, ΠΊΠ°ΠΊ OpenGL ΠΈ Delphi Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ вмСстС.

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с OpenGL Π² Delphi, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» OpenGL ΠΈ собствСнно Delphi.

Π’ стандартной поставкС Delphi ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ OpenGL, Π½ΠΎ ΠΌΡ‹ сСйчас ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, Ρ‡Π΅ΠΌ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ, стандартныС постанавливаСмыС с Delphi Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡƒΡ‰Π΅Ρ€Π±Π½Ρ‹ΠΌΠΈ, Π½Π΅ придСрТиваСтся стандарта OpenGL, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌΠΈ. Для эффСктивного использования OpenGL Π² Delphi Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» DGLOpenGL.pas с этого сайта ΠΈΠ»ΠΈ сайта Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² (ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ DGL) www.delphigl.com .

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» dglOpenGL.pas Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Π½ΡƒΠΆΠ½ΠΎΠΌ мСстС, Π»ΡƒΡ‡ΡˆΠ΅ всСго Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΏΠ°ΠΏΠΊΠ΅ β€œ\lib” Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Delphi.
Π’Π΅ΠΏΠ΅Ρ€ΡŒ запуститС Delphi, ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒΡΡ пустой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.
ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ссли Ρƒ вас установлСна опСрационная систСма Windows 7. Π’Π°ΠΌ Ρ‚Π°ΠΊ ΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ произвСсти Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ дСйствия, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ всС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ. Для Π½Π°Ρ‡Π°Π»Π° Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΏΠΊΡƒ β€œ\lib” ΠΊΠ»ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π½Π° Π½Π΅ΠΉ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ. Π’ контСкстном мСню Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ «свойства» ΡΠ½ΡΡ‚ΡŒ Π³Π°Π»ΠΎΡ‡ΠΊΡƒ Β«Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния». ΠŸΠΎΡ‚ΠΎΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π·Π°ΠΊΠ»Π°Π΄ΠΊΡƒ Β«Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΒ» Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΒ». ΠŸΠΎΡΠ²ΠΈΡ‚ΡΡ ΠΎΠΊΠ½ΠΎ Β«Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для Π³Ρ€ΡƒΠΏΠΏΡ‹ Β«lib»». Π’ этом ΠΎΠΊΠ½Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ доступ ΠΈ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ (смотритС рисунок Π½ΠΈΠΆΠ΅).

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ OpenGL, Ρ‡Π°ΡΡ‚ΡŒ, которая, Ρ€Π°Π½ΡŒΡˆΠ΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π»Π° волосы Π½Π° Π΄Ρ‹Π±Ρ‹, ΠΎΠ΄Π½Π°ΠΊΠΎ, благодаря, dglOpenGL.pas это стало ΠΏΡ€ΠΎΡ‰Π΅. ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ dglOpenGL Π² Ρ€Π°Π·Π΄Π΅Π» Uses интСрфСйсной части unit1.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π΄Π²Π° свойства Ρ„ΠΎΡ€ΠΌΡ‹ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ public (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ общСдоступны):

dc: HDC – контСкст устройств
hrc: HGLRC – контСкст Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°, ΠΎΠ½ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для OpenGL, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ нСпосрСдствСнно ΠΏΡ€ΠΈ создании Ρ„ΠΎΡ€ΠΌΡ‹. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² событии OnCreate Ρ„ΠΎΡ€ΠΌΡ‹:

Π‘Ρ‚Ρ€ΠΎΡ‡ΠΊΠ° Application.OnIdle:= IdleHandler; ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Π½ΠΈΠΆΠ΅.
ПослС этой ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ простой ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π΄Π΅Π»Π°Ρ‚ΡŒ всС Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стандартных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Delphi,ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ пиксСля, Π½ΠΎ это дСлаСтся дольшС, Π° с InitOpenGL всС это дСлаСтся ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ быстрСй), Π²Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ сразу Π² распоряТСнии всС особСнности OpenGL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ Π² Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… значСниях. Но часто, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² OpenGL Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ ΠΈΡ…
Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ напишСм Π΅Ρ‰Π΅ ΠΌΠ°Π»Π΅Π½ΡŒΠΊΡƒΡŽ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ: SetupGL.

Π’ΠΎ, Ρ‡Ρ‚ΠΎ здСсь происходит, ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Π² коммСнтариях.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° ΠΏΠΎ своСму ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ с glClearColor. Π’ OpenGL Ρ†Π²Π΅Ρ‚Π° всСгда ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ смСсь красного, Π·Π΅Π»Π΅Π½ΠΎΠ³ΠΎ ΠΈ синСго.

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° SetupGL Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ½Ρ†Π΅ FormCreate:

[…]
ActivateRenderingContext(dc,hrc); //Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅ΠΌ контСкст Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°
end; Π’Π°ΠΊ ΠΊΠ°ΠΊ OpenGL выводится Π½Π° Ρ„ΠΎΡ€ΠΌΡƒ, Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΅Ρ‘ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ², измСняСтся ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ изобраТСния OpenGL, ΠΈ Π½Π΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ части ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΊΡ€Ρ‹Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ этого Π½Π΅ происходило, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΡ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° событиС OnResize ΠΈ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ.

Π‘Ρ‚Ρ€ΠΎΠΊΠ° 2: Π­Ρ‚ΠΎ Π±ΡƒΠ»Π΅Π²Π° пСрСмСнная ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ ΠΌΠ°Π½Π΅ΠΊΠ΅Π½.
Π‘Ρ‚Ρ€ΠΎΠΊΠ° 4: Π—Π°Π΄Π°Π΅Ρ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄Π° ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π»Π΅Π²ΠΎΠ³ΠΎ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΈ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΡƒΠ³Π»ΠΎΠ² (Π² пиксСлях, Π² ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ…).
Π‘Ρ‚Ρ€ΠΎΠΊΠ° 5: Π—Π°Π΄Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ проСкционная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°
Π‘Ρ‚Ρ€ΠΎΠΊΠ° 6 ΠΈ 9: УстанавливаСм Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Ρ€Π°Π²Π½ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠΉ.
Π‘Ρ‚Ρ€ΠΎΠΊΠ° 7: Π—Π΄Π΅ΡΡŒ устанавливаСтся, ΠΊΠ°ΠΊ Π·Ρ€ΠΈΡ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ сцСну.
Π‘Ρ‚Ρ€ΠΎΠΊΠ° 8: Π—Π°Π΄Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ модСльная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°
Π‘Ρ‚Ρ€ΠΎΠΊΠ° 11: Π’ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ IdleHandler, описываСтся ΠΏΠΎΠ·ΠΆΠ΅.
ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Π²Π΅ константы NearClipping ΠΈ FarClipping Π² части Const. Они ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ расстояниС Π΄ΠΎ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ отсСчСния (ограничСния сцСн) ΠΈ ΠΈΠ³Ρ€Π°ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² тСстС Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹.

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ создавали контСксты ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ, Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π±Ρ‹ послС закрытия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ½ΠΈ Π² памяти Π½Π΅ оставляли мусор Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π›ΡƒΡ‡ΡˆΠ΅ всСго это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² событии OnDestroy.

Π”ΠΎ сих ΠΏΠΎΡ€ ядро нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ отсутствовало. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², графичСская ΠΊΠ°Ρ€Ρ‚Π°, Π΄ΠΎΠ»ΠΆΠ½Π° Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ. Π­Ρ‚ΠΎ происходит Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ Render:

Π‘Ρ‚Ρ€ΠΎΠΊΠ° 3: Π­Ρ‚ΠΎΡ‚ Π²Ρ‹Π·ΠΎΠ² Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±ΡƒΡ„Π΅Ρ€ Ρ†Π²Π΅Ρ‚Π° ΠΈ Π±ΡƒΡ„Π΅Ρ€ Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ ΡƒΠ΄Π°Π»ΡΠ»ΠΈΡΡŒ. Если это Π½Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π²Ρ‹ ΡƒΠ²Π΅Π΄ΠΈΡ‚Π΅ всС Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅, Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ. Π¦Π²Π΅Ρ‚ Π±ΡƒΡ„Π΅Ρ€Π° Π½Π΅ удаляСтся, Π° просто пСрСзаписываСтся glClearColor, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π² создании Ρ„ΠΎΡ€ΠΌΡ‹
Π‘Ρ‚Ρ€ΠΎΠΊΠ° 7: здСсь снова ΡΡ‚Π°Π²ΠΈΡ‚ΡŒΡΡ пСрспСктива. Π­Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π²Ρ‹Π·ΠΎΠ² ΠΈ ΠΏΡ€ΠΈ FormResize, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ ΠΏΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ. Π˜Π½Π°Ρ‡Π΅ послС Resize Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠΌ. Если пСрспСктива Π½Π΅ измСняСтся ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ΠΎΠΌ, Ρ‚ΠΎ эта ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ.
Π‘Ρ‚Ρ€ΠΎΠΊΠ° 12: Π­Ρ‚ΠΎΡ‚ Π²Ρ‹Π·ΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Β«ΠΊΠ°ΠΌΠ΅Ρ€ΡƒΒ» (собствСнно Π² Π΄Π°Π½Π½ΠΎΠΌ случаС это Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π°Π΅Ρ‚), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ. ВсС Ρ‡Ρ‚ΠΎ находится слишком Π±Π»ΠΈΠ·ΠΊΠΎ, отрСзаСтся ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒΡŽ отсСчСния.
Π‘Ρ‚Ρ€ΠΎΠΊΠ° 14: glBegin/glEnd инкапсулируСт ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Ими строятся красочный Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ. Π”ΡƒΠΌΠ°ΡŽ для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ€Π°Π·Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ. ΠžΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ Π² этом контСкстС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: OpenGl Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, Π³Π΄Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° вызываСтся. ВсС Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π² Π±ΡƒΡ„Π΅Ρ€Π΅ ΠΊΠ°Π΄Ρ€Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ содСрТатся ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ OpenGL.
Π‘Ρ‚Ρ€ΠΎΠΊΠ° 21: SwapBuffers Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ содСрТимоС Π±ΡƒΡ„Π΅Ρ€Π° ΠΊΠ°Π΄Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π½Π° экранС. Π‘Π΅Π· этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π²Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ OpenGL.

Π’Π°ΠΊβ€¦ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ вас Π΅ΡΡ‚ΡŒ функция рисования, Π½ΠΎ Ρ‚Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΅Ρ‘. Но Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ просто ΠΏΡ€ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΈ это ΠΎΡ‡Π΅Π½ΡŒ просто. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ Π² ΠΈΠ³Ρ€Π°Ρ…, Ρ‡Ρ‚ΠΎΠ± функция Π²Ρ‹Π·Ρ‹Π²Π°Π»Π°ΡΡŒ снова ΠΈ снова. Π•ΡΡ‚ΡŒ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°, ΠΎΠ±Π° ΠΈΠΌΠ΅ΡŽΡ‚ свои прСимущСства ΠΈ нСдостатки. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ

АргумСнт

Π’Π°ΠΉΠΌΠ΅Ρ€

Максимальная частота ΠΊΠ°Π΄Ρ€ΠΎΠ² достиТима

Число ΠΊΠ°Π΄Ρ€ΠΎΠ² Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎ

Условно (Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ)

Доступна плавная анимация (для ΡˆΡƒΡ‚Π΅Ρ€ΠΎΠ²)

Условно (ΠΏΠ»ΠΎΡ…ΠΎ)

Доступно для мСню

Доступно для простой Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ (стратСгий)

НС Ρ€Π°Π·Ρ€Π΅ΠΆΠ°Π΅Ρ‚ аккумулятор Ρ€ΠΎΡ‚Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ²

ΠšΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ простыС прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ с 25 ΠΊΠ°Π΄Ρ€ΠΎΠ² Π² сСкунду ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π±Π°Ρ‚Π°Ρ€Π΅ΡŽ Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠΎΠ² программисты Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠΌ. ΠšΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π» Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ OnIdle.
ΠŸΡ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ с Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠΌ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ Π½Π° Ρ„ΠΎΡ€ΠΌΡƒ. Π’Π°ΠΉΠΌΠ΅Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ свойств Β«Π˜Π½Ρ‚Π΅Ρ€Π²Π°Π»Β». Π‘ этим свойством ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π·, сколько миллисСкунд событиС OnTimer Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ функция Render. НСльзя ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½ΠΈΠΆΠ΅ 25 Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ стандартным Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Windows.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с событиСм OnIdle, это событиС Ρ‚ΠΈΠΏΠ° TIdleEvent Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ простоС прилоТСния. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΌΠΎΡ‡ΡŒ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° «событиС IdleΒ», Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ лишь эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с событиСм. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π² Ρ‚ΠΎ врСмя ΠΊΠΎΠ³Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅ событиС Ρ„ΠΎΡ€ΠΌΡ‹ OnCreate Π² послСднСй строчкС:

[…]
SetupGL; //установка Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² OpenGL
Application.OnIdle:= IdleHandler;
end; Как Π²Ρ‹ ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅ сами, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ процСссор Π½Π° 100% (это ΠΏΠ»ΠΎΡ…ΠΎ для Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ°), Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ это, малСньким Ρ‚Ρ€ΡŽΠΊΠΎΠΌ:
Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ β€œDone:= false” строку Sleep(1) ΠΈΠ»ΠΈ Sleep(5). ВслСдствиС этого опускаСтся Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° процСссора Π΄ΠΎ 80%. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ IdleHandler Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:

Π’ΠΎΡ‚ ΠΈ всС собствСнно, Π²Ρ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ вас ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ.

Если Ρƒ вас Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Π΅Π΅, ΠΈΠ»ΠΈ скачайтС Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с этого сайта.