ArenaZ
198 строк · 4.6 Кб
1unit Unit1;
2
3{$MODE Delphi}
4
5interface
6
7uses
8
9SysUtils,
10
11Classes,
12DateUtils,
13Graphics,
14Controls,
15Forms,
16Dialogs,
17ExtCtrls,
18
19GLLCLViewer,
20GLAsyncTimer,
21GLCrossPlatform,
22GLBaseClasses,
23GLScene,
24GLObjects,
25GLCoordinates,
26GLGeomObjects,
27GLState,
28GLGraph,
29GLCadencer;
30
31type
32
33{ TForm1 }
34
35TForm1 = class(TForm)
36Panel1: TPanel;
37AsyncTimer1: TGLAsyncTimer;
38GLScene1: TGLScene;
39cam: TGLCamera;
40dc_cam: TGLDummyCube;
41GLCube1: TGLCube;
42light1: TGLLightSource;
43dc_light: TGLDummyCube;
44dc_world: TGLDummyCube;
45GLCylinder1: TGLCylinder;
46dc_views: TGLDummyCube;
47cam1: TGLCamera;
48cam2: TGLCamera;
49cam3: TGLCamera;
50GLSphere1: TGLSphere;
51Panel2: TPanel;
52pos_r: TImage;
53pos_t: TImage;
54pos_c: TImage;
55dc_helpers: TGLDummyCube;
56xyz_grid: TGLXYZGrid;
57vp: TGLSceneViewer;
58Shape1: TShape;
59xy_grid: TGLXYZGrid;
60vp2: TGLSceneViewer;
61vp1: TGLSceneViewer;
62vp3: TGLSceneViewer;
63yz_grid: TGLXYZGrid;
64xz_grid: TGLXYZGrid;
65procedure FormResize(Sender: TObject);
66procedure AsyncTimer1Timer(Sender: TObject);
67procedure vp1BeforeRender(Sender: TObject);
68procedure vp1AfterRender(Sender: TObject);
69procedure vp2BeforeRender(Sender: TObject);
70procedure vp2AfterRender(Sender: TObject);
71procedure vp3BeforeRender(Sender: TObject);
72procedure vp3AfterRender(Sender: TObject);
73procedure vpMouseDown(Sender: TObject; Button: TMouseButton;
74Shift: TShiftState; X, Y: Integer);
75procedure vpMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
76public
77procedure showScn(mv, v1, v2, v3: boolean);
78private
79mx, my : Integer;
80end;
81
82type
83TScnMod = (scnTurn, scnMove);
84
85var
86Form1: TForm1;
87xAlign: single = 0.5;
88yAlign: single = 0.5;
89scnMod: set of TScnMod;
90
91//==================================================================
92implementation
93//==================================================================
94
95{$R *.lfm}
96
97procedure TForm1.FormResize(Sender: TObject);
98var
99w, w2, h2: integer;
100begin
101w := clientWidth - Panel1.width;
102w2 := round((clientWidth - Panel1.width) * xAlign);
103h2 := round(clientHeight * yAlign);
104vp1.BoundsRect := rect(3, 3, w2 - 4, h2 - 4);
105vp2.BoundsRect := rect(w2 + 3, 3, w - 4, h2 - 4);
106vp3.BoundsRect := rect(3, h2 + 3, w2 - 4, clientHeight - 4);
107vp.BoundsRect := rect(w2 + 3, h2 + 3, w - 4, clientHeight - 4);
108Shape1.BoundsRect := rect(w2, h2, w - 1, clientHeight - 1);
109
110pos_r.BoundsRect := rect(w2 - 4, 3, w2 + 3, clientHeight - 4);
111pos_t.BoundsRect := rect(3, h2 - 4, w - 4, h2 + 3);
112pos_c.BoundsRect := rect(w2 - 4, h2 - 4, w2 + 3, h2 + 3);
113end;
114
115procedure TForm1.AsyncTimer1Timer(Sender: TObject);
116begin
117if scnMod <> [] then
118begin
119if scnTurn in scnMod then
120begin
121end;
122end;
123GLCube1.Position.Y := sin(GetTickCount / 1000);
124GLSphere1.Position.Z := cos(GetTickCount / 600);
125vp.Refresh;
126vp1.Refresh;
127vp2.Refresh;
128vp3.Refresh;
129end;
130
131procedure TForm1.showScn(mv, v1, v2, v3: boolean);
132begin
133if not mv then
134begin
135GLCube1.Material.PolygonMode := pmLines;
136GLCylinder1.Material.PolygonMode := pmLines;
137GLSphere1.Material.PolygonMode := pmLines;
138light1.Shining := false;
139xyz_grid.visible := false;
140end
141else
142begin
143GLCube1.Material.PolygonMode := pmFill;
144GLCylinder1.Material.PolygonMode := pmFill;
145GLSphere1.Material.PolygonMode := pmFill;
146light1.Shining := true;
147xyz_grid.visible := true;
148end;
149xz_grid.visible := v1;
150xy_grid.visible := v2;
151yz_grid.visible := v3;
152end;
153
154procedure TForm1.vp1BeforeRender(Sender: TObject);
155begin
156showScn(false, true, false, false);
157end;
158
159procedure TForm1.vp1AfterRender(Sender: TObject);
160begin
161showScn(true, false, false, false);
162end;
163
164procedure TForm1.vp2BeforeRender(Sender: TObject);
165begin
166showScn(false, false, true, false);
167end;
168
169procedure TForm1.vp2AfterRender(Sender: TObject);
170begin
171showScn(true, false, false, false);
172end;
173
174procedure TForm1.vp3BeforeRender(Sender: TObject);
175begin
176showScn(false, false, false, true);
177end;
178
179procedure TForm1.vpMouseDown(Sender: TObject; Button: TMouseButton;
180Shift: TShiftState; X, Y: Integer);
181begin
182mx:=x; my:=y;
183end;
184
185procedure TForm1.vpMouseMove(Sender: TObject; Shift: TShiftState; X,
186Y: Integer);
187begin
188if Shift<>[] then
189Cam.MoveAroundTarget(my-y, mx-x);
190mx:=x; my:=y;
191end;
192
193procedure TForm1.vp3AfterRender(Sender: TObject);
194begin
195showScn(true, false, false, false);
196end;
197
198end.
199