ArenaZ

Форк
0
/
Unit1.pas 
179 строк · 4.3 Кб
1
unit Unit1;
2

3

4
interface
5

6
uses
7
  LCLType,
8
  SysUtils,
9
  Variants,
10
  Classes,
11
  Graphics,
12
  Controls,
13
  Forms,
14
  ExtCtrls,
15
  StdCtrls,
16
  Dialogs,
17
  GLScene,
18
  GLVectorFileObjects,
19
  GLObjects,
20
  GLCadencer,
21
  GLTexture,
22
  GLVectorLists,
23
  GLVectorGeometry,
24
  GLTerrainRenderer,
25
  GLHeightData,
26
  GLFireFX,
27
  GLCoordinates,
28
  GLCrossPlatform, GLLCLViewer,
29
  GLFile3ds;
30

31
type
32

33
  { TForm1 }
34

35
  TForm1 = class(TForm)
36
    GLScene1: TGLScene;
37
    GLSceneViewer1: TGLSceneViewer;
38
    GLCamera1: TGLCamera;
39
    GLDummyCube1: TGLDummyCube;
40
    GLFreeForm1: TGLFreeForm;
41
    GLLightSource1: TGLLightSource;
42
    GLCadencer1: TGLCadencer;
43
    Timer1: TTimer;
44
    GLTerrainRenderer1: TGLTerrainRenderer;
45
    GLBitmapHDS1: TGLBitmapHDS;
46
    CheckBox1: TCheckBox;
47
    procedure FormCreate(Sender: TObject);
48
    procedure FormShow(Sender: TObject);
49
    procedure GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer);
50
    procedure GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: integer);
51
    procedure GLCadencer1Progress(Sender: TObject; const deltaTime, newTime: double);
52
    procedure GLSceneViewer1AfterRender(Sender: TObject);
53
    procedure FormDestroy(Sender: TObject);
54
    procedure Timer1Timer(Sender: TObject);
55
    procedure GLDummyCube1Progress(Sender: TObject; const deltaTime, newTime: double);
56
  private
57

58
  public
59

60
    mx, my, mx2, my2: integer;
61
  end;
62

63
var
64
  Form1: TForm1;
65
  angulo: single;
66
  Fig: TAffineVectorList;
67

68
implementation
69

70
{$R *.lfm}
71

72
procedure TForm1.FormCreate(Sender: TObject);
73
Begin
74
end;
75

76
procedure TForm1.FormShow(Sender: TObject);
77
  var
78
  i: integer;
79
begin
80
  GLFreeForm1.LoadFromFile('media\dolphin.3ds');
81
  // Guardamos el estado inicial del delfin
82
  Fig := TAffineVectorList.Create;
83
  Fig.Assign(GLFreeForm1.MeshObjects.Items[0].Vertices);
84
  // cargamos el fondo marino...
85
  GLBitmapHDS1.MaxPoolSize := 8 * 1024 * 1024;
86
  GLBitmapHDS1.Picture.LoadFromFile('media\terrain.bmp');
87
  GLTerrainRenderer1.TilesPerTexture := 256 / GLTerrainRenderer1.TileSize;
88
  GLTerrainRenderer1.Material.Texture.Image.LoadFromFile('media\tex.jpg');
89
  GLTerrainRenderer1.Material.Texture.Disabled := False;
90

91
  GLSceneViewer1.Buffer.BackgroundColor := rgb(0, 0, 160);
92
  with GLSceneViewer1.Buffer.FogEnvironment do
93
  begin
94
    FogColor.AsWinColor := rgb(0, 0, 110 { 160 });
95
    FogStart := -FogStart;
96
  end;
97
  Timer1.Enabled:=true;
98

99
end;
100

101
procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer);
102
begin
103
  mx := X;
104
  my := Y;
105
  mx2 := X;
106
  my2 := Y;
107
end;
108

109
procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: integer);
110
begin
111
  if ssLeft in Shift then
112
  begin
113
    mx2 := X;
114
    my2 := Y;
115
  end;
116
end;
117

118
procedure TForm1.GLCadencer1Progress(Sender: TObject; const deltaTime, newTime: double);
119
const
120
  AMPLITUD_ALETAZO = 20;
121
  FRECUENCIA_DE_PATADA = 15;
122
var
123
  j: integer;
124
  v: TAffineVector;
125
  f: single;
126
begin
127
  // Permission to move around target...
128
  if ((mx <> mx2) or (my <> my2)) then
129
  begin
130
    GLCamera1.MoveAroundTarget(my - my2, mx - mx2);
131
    mx := mx2;
132
    my := my2;
133
  end;
134

135
  if CheckBox1.Checked then
136
  begin
137
    angulo := newTime;
138
    // Application of animation for Dolfin...
139
    for j := 0 to GLFreeForm1.MeshObjects.Items[0].Vertices.Count - 1 do
140
      with GLFreeForm1.MeshObjects.Items[0].Vertices do
141
      begin
142
        f := sin(angulo * FRECUENCIA_DE_PATADA) * (sqr(Items[j].X) / AMPLITUD_ALETAZO);
143
        v.X := 0;
144
        v.Y := 0;
145
        v.Z := f;
146
        TranslateItem(j, v);
147
      end;
148
    GLFreeForm1.StructureChanged;
149
  end;
150
end;
151

152
procedure TForm1.GLSceneViewer1AfterRender(Sender: TObject);
153
var
154
  j: integer;
155
  v: TAffineVector;
156
  f: single;
157
begin
158
  // Despues de Presentar un cuadro regresamos al delfín
159
  // a su estado inicial...
160
  GLFreeForm1.MeshObjects.Items[0].Vertices.Assign(Fig);
161
end;
162

163
procedure TForm1.FormDestroy(Sender: TObject);
164
begin
165
  Fig.Free;
166
end;
167

168
procedure TForm1.Timer1Timer(Sender: TObject);
169
begin
170
  Caption := Format('%.2f FPS  Dolphin animation', [GLSceneViewer1.FramesPerSecond]);
171
  GLSceneViewer1.ResetPerformanceMonitor;
172
end;
173

174
procedure TForm1.GLDummyCube1Progress(Sender: TObject; const deltaTime, newTime: double);
175
begin
176
  GLDummyCube1.Move(3);
177
end;
178

179
end.
180

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.