28
GLCrossPlatform, GLLCLViewer,
37
GLSceneViewer1: TGLSceneViewer;
39
GLDummyCube1: TGLDummyCube;
40
GLFreeForm1: TGLFreeForm;
41
GLLightSource1: TGLLightSource;
42
GLCadencer1: TGLCadencer;
44
GLTerrainRenderer1: TGLTerrainRenderer;
45
GLBitmapHDS1: TGLBitmapHDS;
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);
60
mx, my, mx2, my2: integer;
66
Fig: TAffineVectorList;
72
procedure TForm1.FormCreate(Sender: TObject);
76
procedure TForm1.FormShow(Sender: TObject);
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;
91
GLSceneViewer1.Buffer.BackgroundColor := rgb(0, 0, 160);
92
with GLSceneViewer1.Buffer.FogEnvironment do
94
FogColor.AsWinColor := rgb(0, 0, 110 { 160 });
95
FogStart := -FogStart;
101
procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer);
109
procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: integer);
111
if ssLeft in Shift then
118
procedure TForm1.GLCadencer1Progress(Sender: TObject; const deltaTime, newTime: double);
120
AMPLITUD_ALETAZO = 20;
121
FRECUENCIA_DE_PATADA = 15;
127
// Permission to move around target...
128
if ((mx <> mx2) or (my <> my2)) then
130
GLCamera1.MoveAroundTarget(my - my2, mx - mx2);
135
if CheckBox1.Checked then
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
142
f := sin(angulo * FRECUENCIA_DE_PATADA) * (sqr(Items[j].X) / AMPLITUD_ALETAZO);
148
GLFreeForm1.StructureChanged;
152
procedure TForm1.GLSceneViewer1AfterRender(Sender: TObject);
158
// Despues de Presentar un cuadro regresamos al delfín
159
// a su estado inicial...
160
GLFreeForm1.MeshObjects.Items[0].Vertices.Assign(Fig);
163
procedure TForm1.FormDestroy(Sender: TObject);
168
procedure TForm1.Timer1Timer(Sender: TObject);
170
Caption := Format('%.2f FPS Dolphin animation', [GLSceneViewer1.FramesPerSecond]);
171
GLSceneViewer1.ResetPerformanceMonitor;
174
procedure TForm1.GLDummyCube1Progress(Sender: TObject; const deltaTime, newTime: double);
176
GLDummyCube1.Move(3);