1
unit LUX.GPU.OpenGL.Shaper.Voxels;
3
interface //#################################################################### ■
5
uses System.SysUtils, System.UITypes,
6
LUX, LUX.D1, LUX.D2, LUX.D3, LUX.D4x4,
9
LUX.GPU.OpenGL.Atom.Buffer.UniBuf,
10
LUX.GPU.OpenGL.Scener,
11
LUX.GPU.OpenGL.Camera,
12
LUX.GPU.OpenGL.Matery,
13
LUX.GPU.OpenGL.Shaper,
14
LUX.GPU.OpenGL.Shaper.Preset;
16
type //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【型】
18
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
20
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
22
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLMateryVoxels
24
TGLMateryVoxels = class( TGLMateryG )
30
destructor Destroy; override;
33
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLShaperVoxels
35
TGLShaperVoxels = class( TGLShaperPoin )
38
_Size :TGLUniBuf<Single>;
39
_Color :TGLUniBuf<TAlphaColorF>;
41
function GetCount :Integer;
42
function GetSizeX :Single;
43
procedure SetSizeX( const SizeX_:Single );
44
function GetSizeY :Single;
45
procedure SetSizeY( const SizeY_:Single );
46
function GetSizeZ :Single;
47
procedure SetSizeZ( const SizeZ_:Single );
48
function GetColor :TAlphaColorF;
49
procedure SetColor( const Color_:TAlphaColorF );
51
constructor Create; override;
52
destructor Destroy; override;
54
property Count :Integer read GetCount ;
55
property SizeX :Single read GetSizeX write SetSizeX;
56
property SizeY :Single read GetSizeY write SetSizeY;
57
property SizeZ :Single read GetSizeZ write SetSizeZ;
58
property Color :TAlphaColorF read GetColor write SetColor;
60
procedure BeginDraw; override;
61
procedure EndDraw; override;
64
//const //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【定数】
66
//var //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【変数】
68
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
70
implementation //############################################################### ■
73
Winapi.OpenGL, Winapi.OpenGLext,
74
LUX.GPU.OpenGL.Matery.Preset;
76
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
78
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
80
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLMateryVoxels
82
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
84
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
86
/////////////////////////////////////////////////////////////////////// アクセス
88
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
90
constructor TGLMateryVoxels.Create;
101
Add( '#version 430' );
103
Add( 'layout( std140 ) uniform TViewerScal{ layout( row_major ) mat4 _ViewerScal; };' );
104
Add( 'layout( std140 ) uniform TCameraProj{ layout( row_major ) mat4 _CameraProj; };' );
105
Add( 'layout( std140 ) uniform TCameraPose{ layout( row_major ) mat4 _CameraPose; };' );
106
Add( 'layout( std140 ) uniform TShaperPose{ layout( row_major ) mat4 _ShaperPose; };' );
108
Add( 'in vec4 _SenderPos;' );
110
Add( 'out TSenderVG' );
116
Add( 'void main()' );
118
Add( ' _Result.Pos = _SenderPos;' );
124
Assert( Status, Errors.Text );
134
Add( '#version 430' );
136
Add( 'layout( std140 ) uniform TViewerScal{ layout( row_major ) mat4 _ViewerScal; };' );
137
Add( 'layout( std140 ) uniform TCameraProj{ layout( row_major ) mat4 _CameraProj; };' );
138
Add( 'layout( std140 ) uniform TCameraPose{ layout( row_major ) mat4 _CameraPose; };' );
139
Add( 'layout( std140 ) uniform TShaperPose{ layout( row_major ) mat4 _ShaperPose; };' );
141
Add( 'layout( std140 ) uniform TSize{ vec3 _Size; };' );
143
Add( 'layout( points ) in;' );
144
Add( 'in TSenderVG' );
148
Add( '_Sender[ 1 ];' );
150
Add( 'layout( line_strip, max_vertices = 24 ) out;' );
151
Add( 'out TSenderGF' );
157
Add( 'void AddPoin( vec4 Poin_ )' );
159
Add( ' _Result.Pos = Poin_;' );
160
Add( ' gl_Position = _ViewerScal * _CameraProj * inverse( _CameraPose ) * _Result.Pos;' );
161
Add( ' EmitVertex();' );
164
Add( 'void AddLine( vec4 Pos1_, vec4 Pos2_ )' );
166
Add( ' AddPoin( Pos1_ );' );
167
Add( ' AddPoin( Pos2_ );' );
168
Add( ' EndPrimitive();' );
171
Add( 'void main()' );
173
Add( ' vec4 C = _Sender[ 0 ].Pos * vec4( _Size, 1 );' );
175
Add( ' vec4 P000 = _ShaperPose * ( C + vec4( 0, 0, 0, 0 ) );' );
176
Add( ' vec4 P001 = _ShaperPose * ( C + vec4( _Size.x, 0, 0, 0 ) );' );
177
Add( ' vec4 P010 = _ShaperPose * ( C + vec4( 0, _Size.y, 0, 0 ) );' );
178
Add( ' vec4 P011 = _ShaperPose * ( C + vec4( _Size.x, _Size.y, 0, 0 ) );' );
179
Add( ' vec4 P100 = _ShaperPose * ( C + vec4( 0, 0, _Size.z, 0 ) );' );
180
Add( ' vec4 P101 = _ShaperPose * ( C + vec4( _Size.x, 0, _Size.z, 0 ) );' );
181
Add( ' vec4 P110 = _ShaperPose * ( C + vec4( 0, _Size.y, _Size.z, 0 ) );' );
182
Add( ' vec4 P111 = _ShaperPose * ( C + vec4( _Size.x, _Size.y, _Size.z, 0 ) );' );
184
Add( ' AddLine( P000, P001 );' );
185
Add( ' AddLine( P010, P011 );' );
186
Add( ' AddLine( P100, P101 );' );
187
Add( ' AddLine( P110, P111 );' );
189
Add( ' AddLine( P000, P010 );' );
190
Add( ' AddLine( P100, P110 );' );
191
Add( ' AddLine( P001, P011 );' );
192
Add( ' AddLine( P101, P111 );' );
194
Add( ' AddLine( P000, P100 );' );
195
Add( ' AddLine( P001, P101 );' );
196
Add( ' AddLine( P010, P110 );' );
197
Add( ' AddLine( P011, P111 );' );
204
Assert( Status, Errors.Text );
214
Add( '#version 430' );
216
Add( 'layout( std140 ) uniform TViewerScal{ layout( row_major ) mat4 _ViewerScal; };' );
217
Add( 'layout( std140 ) uniform TCameraProj{ layout( row_major ) mat4 _CameraProj; };' );
218
Add( 'layout( std140 ) uniform TCameraPose{ layout( row_major ) mat4 _CameraPose; };' );
219
Add( 'layout( std140 ) uniform TShaperPose{ layout( row_major ) mat4 _ShaperPose; };' );
221
Add( 'layout( std140 ) uniform TColor{ vec4 _Color; };' );
223
Add( 'in TSenderGF' );
229
Add( 'out vec4 _ResultCol;' );
231
Add( 'void main()' );
233
Add( ' _ResultCol = _Color;' );
239
Assert( Status, Errors.Text );
250
Assert( Status, Errors.Text );
254
destructor TGLMateryVoxels.Destroy;
260
/////////////////////////////////////////////////////////////////////// メソッド
262
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLShaperVoxels
264
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
266
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
268
function TGLShaperVoxels.GetCount :Integer;
270
Result := PosBuf.Count;
273
//------------------------------------------------------------------------------
275
function TGLShaperVoxels.GetSizeX :Single;
277
Result := _Size[ 0 ];
280
procedure TGLShaperVoxels.SetSizeX( const SizeX_:Single );
282
_Size[ 0 ] := SizeX_;
285
function TGLShaperVoxels.GetSizeY :Single;
287
Result := _Size[ 1 ];
290
procedure TGLShaperVoxels.SetSizeY( const SizeY_:Single );
292
_Size[ 1 ] := SizeY_;
295
function TGLShaperVoxels.GetSizeZ :Single;
297
Result := _Size[ 2 ];
300
procedure TGLShaperVoxels.SetSizeZ( const SizeZ_:Single );
302
_Size[ 2 ] := SizeZ_;
305
//------------------------------------------------------------------------------
307
function TGLShaperVoxels.GetColor :TAlphaColorF;
309
Result := _Color[ 0 ];
312
procedure TGLShaperVoxels.SetColor( const Color_:TAlphaColorF );
314
_Color[ 0 ] := Color_;
317
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
319
constructor TGLShaperVoxels.Create;
323
_Matery := TGLMateryVoxels.Create;
325
_Size := TGLUniBuf<Single>.Create( GL_STATIC_DRAW );
328
_Color := TGLUniBuf<TAlphaColorF>.Create( GL_STATIC_DRAW );
334
Color := TAlphaColorF.Create( 1, 1, 1, 0.5 );
337
destructor TGLShaperVoxels.Destroy;
345
/////////////////////////////////////////////////////////////////////// メソッド
347
procedure TGLShaperVoxels.BeginDraw;
355
procedure TGLShaperVoxels.EndDraw;
363
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
365
//############################################################################## □
367
initialization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 初期化
369
finalization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 最終化
371
end. //######################################################################### ■