1
unit LUX.GPU.OpenGL.Shaper.Preset;
3
interface //#################################################################### ■
6
Winapi.OpenGL, Winapi.OpenGLext,
7
LUX, LUX.D2, LUX.D3, LUX.D4x4,
9
LUX.GPU.OpenGL.Atom.Buffer,
10
LUX.GPU.OpenGL.Atom.Buffer.VerBuf,
11
LUX.GPU.OpenGL.Atom.Buffer.EleBuf,
12
LUX.GPU.OpenGL.Scener,
13
LUX.GPU.OpenGL.Matery,
14
LUX.GPU.OpenGL.Matery.Preset,
15
LUX.GPU.OpenGL.Shaper;
17
type //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【型】
19
TGLShaperCopy = class;
20
TGLShaperLineCube = class;
23
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
25
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
27
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLShaperCopy
29
TGLShaperCopy = class( TGLShaper )
32
_Shaper :TGLShaperPoin;
34
function GetShaper :TGLShaperPoin;
35
procedure SetShaper( const Shaper_:TGLShaperPoin );
37
constructor Create; override;
38
destructor Destroy; override;
40
property Shaper :TGLShaperPoin read GetShaper write SetShaper;
42
procedure BeginDraw; override;
43
procedure DrawMain; override;
44
procedure EndDraw; override;
45
procedure CalcBouBox; override;
48
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLShaperLineCube
50
TGLShaperLineCube = class( TGLShaperLine )
59
function GetSizeX :Single;
60
procedure SetSizeX( const SizeX_:Single );
61
function GetSizeY :Single;
62
procedure SetSizeY( const SizeY_:Single );
63
function GetSizeZ :Single;
64
procedure SetSizeZ( const SizeZ_:Single );
65
function GetColor :TAlphaColorF;
66
procedure SetColor( const Color_:TAlphaColorF );
68
constructor Create; override;
69
destructor Destroy; override;
71
property SizeX :Single read GetSizeX write SetSizeX;
72
property SizeY :Single read GetSizeY write SetSizeY;
73
property SizeZ :Single read GetSizeZ write SetSizeZ;
74
property Color :TAlphaColorF read GetColor write SetColor;
77
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLDotCube
79
TGLDotCube = class( TGLShaperPoin )
91
function GetSizeX :Single;
92
procedure SetSizeX( const SizeX_:Single );
93
function GetSizeY :Single;
94
procedure SetSizeY( const SizeY_:Single );
95
function GetSizeZ :Single;
96
procedure SetSizeZ( const SizeZ_:Single );
97
function GetDivNX :Integer;
98
procedure SetDivNX( const DivNX_:Integer );
99
function GetDivNY :Integer;
100
procedure SetDivNY( const DivNY_:Integer );
101
function GetDivNZ :Integer;
102
procedure SetDivNZ( const DivNZ_:Integer );
104
constructor Create; override;
105
destructor Destroy; override;
107
property SizeX :Single read GetSizeX write SetSizeX;
108
property SizeY :Single read GetSizeY write SetSizeY;
109
property SizeZ :Single read GetSizeZ write SetSizeZ;
110
property DivNX :Integer read GetDivNX write SetDivNX;
111
property DivNY :Integer read GetDivNY write SetDivNY;
112
property DivNZ :Integer read GetDivNZ write SetDivNZ;
115
//const //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【定数】
117
//var //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【変数】
119
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
121
implementation //############################################################### ■
123
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
125
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
127
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLShaperCopy
129
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
131
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
133
/////////////////////////////////////////////////////////////////////// アクセス
135
function TGLShaperCopy.GetShaper :TGLShaperPoin;
140
procedure TGLShaperCopy.SetShaper( const Shaper_:TGLShaperPoin );
147
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
149
constructor TGLShaperCopy.Create;
155
destructor TGLShaperCopy.Destroy;
161
/////////////////////////////////////////////////////////////////////// メソッド
163
procedure TGLShaperCopy.BeginDraw;
169
if not Assigned( Self._Matery ) then Matery.Use;
171
PosBuf.Use( 0{BinP} );
172
NorBuf.Use( 1{BinP} );
173
TexBuf.Use( 2{BinP} );
177
procedure TGLShaperCopy.DrawMain;
182
procedure TGLShaperCopy.EndDraw;
186
PosBuf.Unuse( 0{BinP} );
187
NorBuf.Unuse( 1{BinP} );
188
TexBuf.Unuse( 2{BinP} );
190
if not Assigned( Self._Matery ) then Matery.Use;
196
//------------------------------------------------------------------------------
198
procedure TGLShaperCopy.CalcBouBox;
200
BouBox := _Shaper.BouBox;
203
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLShaperLineCube
205
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
207
/////////////////////////////////////////////////////////////////////// メソッド
209
procedure TGLShaperLineCube.MakeModel;
217
with _PosBuf.Map( GL_WRITE_ONLY ) do
219
Items[ 0 ] := TSingle3D.Create( -SX, -SY, -SZ );
220
Items[ 1 ] := TSingle3D.Create( +SX, -SY, -SZ );
221
Items[ 2 ] := TSingle3D.Create( -SX, +SY, -SZ );
222
Items[ 3 ] := TSingle3D.Create( +SX, +SY, -SZ );
223
Items[ 4 ] := TSingle3D.Create( -SX, -SY, +SZ );
224
Items[ 5 ] := TSingle3D.Create( +SX, -SY, +SZ );
225
Items[ 6 ] := TSingle3D.Create( -SX, +SY, +SZ );
226
Items[ 7 ] := TSingle3D.Create( +SX, +SY, +SZ );
234
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
236
/////////////////////////////////////////////////////////////////////// アクセス
238
function TGLShaperLineCube.GetSizeX :Single;
243
procedure TGLShaperLineCube.SetSizeX( const SizeX_:Single );
245
_SizeX := SizeX_; MakeModel;
248
function TGLShaperLineCube.GetSizeY :Single;
253
procedure TGLShaperLineCube.SetSizeY( const SizeY_:Single );
255
_SizeY := SizeY_; MakeModel;
258
function TGLShaperLineCube.GetSizeZ :Single;
263
procedure TGLShaperLineCube.SetSizeZ( const SizeZ_:Single );
265
_SizeZ := SizeZ_; MakeModel;
268
//------------------------------------------------------------------------------
270
function TGLShaperLineCube.GetColor :TAlphaColorF;
272
Result := TGLMateryColor( _Matery ).Color;
275
procedure TGLShaperLineCube.SetColor( const Color_:TAlphaColorF );
277
TGLMateryColor( _Matery ).Color := Color_;
280
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
282
constructor TGLShaperLineCube.Create;
290
_Matery := TGLMateryColor.Create;
292
with _NorBuf.Map( GL_WRITE_ONLY ) do
294
Items[ 0 ] := TSingle3D.Create( -1, -1, -1 ).Unitor;
295
Items[ 1 ] := TSingle3D.Create( +1, -1, -1 ).Unitor;
296
Items[ 2 ] := TSingle3D.Create( -1, +1, -1 ).Unitor;
297
Items[ 3 ] := TSingle3D.Create( +1, +1, -1 ).Unitor;
298
Items[ 4 ] := TSingle3D.Create( -1, -1, +1 ).Unitor;
299
Items[ 5 ] := TSingle3D.Create( +1, -1, +1 ).Unitor;
300
Items[ 6 ] := TSingle3D.Create( -1, +1, +1 ).Unitor;
301
Items[ 7 ] := TSingle3D.Create( +1, +1, +1 ).Unitor;
306
with _EleBuf.Map( GL_WRITE_ONLY ) do
308
Items[ 00 ] := TCardinal2D.Create( 0, 1 );
309
Items[ 01 ] := TCardinal2D.Create( 0, 2 );
310
Items[ 02 ] := TCardinal2D.Create( 0, 4 );
312
Items[ 03 ] := TCardinal2D.Create( 1, 3 );
313
Items[ 04 ] := TCardinal2D.Create( 2, 6 );
314
Items[ 05 ] := TCardinal2D.Create( 4, 5 );
316
Items[ 06 ] := TCardinal2D.Create( 7, 6 );
317
Items[ 07 ] := TCardinal2D.Create( 7, 5 );
318
Items[ 08 ] := TCardinal2D.Create( 7, 3 );
320
Items[ 09 ] := TCardinal2D.Create( 6, 4 );
321
Items[ 10 ] := TCardinal2D.Create( 5, 1 );
322
Items[ 11 ] := TCardinal2D.Create( 3, 2 );
334
destructor TGLShaperLineCube.Destroy;
340
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLDotCube
342
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
344
/////////////////////////////////////////////////////////////////////// メソッド
346
procedure TGLDotCube.MakeModel;
348
Ps :TGLBufferData<TSingle3D>;
352
PosBuf.Count := ( _DivNZ + 1 ) * ( _DivNY + 1 ) * ( _DivNX + 1 );
354
Ps := PosBuf.Map( GL_WRITE_ONLY );
357
for Z := 0 to _DivNZ do
359
P.Z := _SizeZ / _DivNZ * Z - _SizeZ / 2;
361
for Y := 0 to _DivNY do
363
P.Y := _SizeY / _DivNY * Y - _SizeY / 2;
365
for X := 0 to _DivNX do
367
P.X := _SizeX / _DivNX * X - _SizeX / 2;
369
Ps[ I ] := P; Inc( I );
377
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
379
/////////////////////////////////////////////////////////////////////// アクセス
381
function TGLDotCube.GetSizeX :Single;
386
procedure TGLDotCube.SetSizeX( const SizeX_:Single );
388
_SizeX := SizeX_; MakeModel;
391
function TGLDotCube.GetSizeY :Single;
396
procedure TGLDotCube.SetSizeY( const SizeY_:Single );
398
_SizeY := SizeY_; MakeModel;
401
function TGLDotCube.GetSizeZ :Single;
406
procedure TGLDotCube.SetSizeZ( const SizeZ_:Single );
408
_SizeZ := SizeZ_; MakeModel;
411
//------------------------------------------------------------------------------
413
function TGLDotCube.GetDivNX :Integer;
418
procedure TGLDotCube.SetDivNX( const DivNX_:Integer );
420
_DivNX := DivNX_; MakeModel;
423
function TGLDotCube.GetDivNY :Integer;
428
procedure TGLDotCube.SetDivNY( const DivNY_:Integer );
430
_DivNY := DivNY_; MakeModel;
433
function TGLDotCube.GetDivNZ :Integer;
438
procedure TGLDotCube.SetDivNZ( const DivNZ_:Integer );
440
_DivNZ := DivNZ_; MakeModel;
443
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
445
constructor TGLDotCube.Create;
449
_Matery := TGLMateryColor.Create;
459
destructor TGLDotCube.Destroy;
465
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
467
//############################################################################## □
469
initialization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 初期化
471
finalization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 最終化
473
end. //######################################################################### ■