Luxophia
134 строки · 3.2 Кб
1unit Main;
2
3interface
4
5uses
6System.SysUtils,
7System.Types,
8System.UITypes,
9System.Classes,
10System.Variants,
11FMX.Types, FMX.Controls,
12FMX.Forms,
13FMX.Graphics, FMX.Dialogs,
14System.Math.Vectors,
15FMX.Types3D,
16FMX.MaterialSources,
17FMX.StdCtrls, FMX.Edit,
18FMX.EditBox,
19FMX.SpinBox,
20FMX.Objects,
21FMX.Controls.Presentation,
22FMX.Objects3D,
23FMX.Controls3D,
24FMX.Viewport3D,
25LUX.FMX,
26Core;
27
28type
29TForm1 = class(TForm)
30Viewport3D1: TViewport3D;
31Dummy1: TDummy;
32Dummy2: TDummy;
33Camera1: TCamera;
34Light1: TLight;
35Grid3D1: TGrid3D;
36StrokeCube1: TStrokeCube;
37LightMaterialSource1: TLightMaterialSource;
38Panel1: TPanel;
39Image1: TImage;
40SpinBox1: TSpinBox;
41Label1: TLabel;
42procedure FormCreate(Sender: TObject);
43procedure FormDestroy(Sender: TObject);
44procedure Viewport3D1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
45procedure Viewport3D1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single);
46procedure Viewport3D1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
47procedure SpinBox1Change(Sender: TObject);
48private
49{ private �錾 }
50_MouseS :TShiftState;
51_MouseP :TPointF;
52public
53{ public �錾 }
54_TeapotShape :TTeapotShape;
55_TensorShape :TTensorShape;
56end;
57
58var
59Form1: TForm1;
60
61implementation //############################################################### �¡
62
63{$R *.fmx}
64
65procedure TForm1.FormCreate(Sender: TObject);
66begin
67_TeapotShape := TTeapotShape.Create( Self );
68_TensorShape := TTensorShape.Create( Self );
69
70with _TeapotShape do
71begin
72Parent := Grid3D1;
73Material := LightMaterialSource1;
74end;
75
76with _TensorShape do
77begin
78Parent := _TeapotShape;
79MeshData := _TeapotShape.Geometry;
80AxisLeng := 0.1;
81end;
82
83Image1.Bitmap.LoadFromFile( '..\..\_DATA\Texture.png' );
84
85LightMaterialSource1.Texture.Assign( Image1.Bitmap );
86
87SpinBox1Change( Self );
88end;
89
90procedure TForm1.FormDestroy(Sender: TObject);
91begin
92/////
93end;
94
95//------------------------------------------------------------------------------
96
97procedure TForm1.Viewport3D1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
98begin
99_MouseS := Shift;
100_MouseP := TPointF.Create( X, Y );
101end;
102
103procedure TForm1.Viewport3D1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single);
104var
105P :TPointF;
106begin
107if ssLeft in _MouseS then
108begin
109P := TPointF.Create( X, Y );
110
111with Dummy1.RotationAngle do Y := Y + ( P.X - _MouseP.X );
112with Dummy2.RotationAngle do X := X - ( P.Y - _MouseP.Y );
113
114_MouseP := P;
115end;
116end;
117
118procedure TForm1.Viewport3D1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
119begin
120Viewport3D1MouseMove( Sender, Shift, X, Y );
121
122_MouseS := [];
123end;
124
125//------------------------------------------------------------------------------
126
127procedure TForm1.SpinBox1Change(Sender: TObject);
128begin
129_TeapotShape.DivN := Round( SpinBox1.Value );
130
131_TensorShape.MakeShape;
132end;
133
134end. //######################################################################### �¡
135