Luxophia

Форк
0
/
LUX.GPU.OpenGL.Shaper.Voxels.pas 
371 строка · 11.6 Кб
1
unit LUX.GPU.OpenGL.Shaper.Voxels;
2

3
interface //#################################################################### ■
4

5
uses System.SysUtils, System.UITypes,
6
     LUX, LUX.D1, LUX.D2, LUX.D3, LUX.D4x4,
7
     LUX.Geometry.D3,
8
     LUX.GPU.OpenGL,
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;
15

16
type //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【型】
17

18
     //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
19

20
     //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
21

22
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLMateryVoxels
23

24
     TGLMateryVoxels = class( TGLMateryG )
25
     private
26
     protected
27
       ///// アクセス
28
     public
29
       constructor Create;
30
       destructor Destroy; override;
31
     end;
32

33
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLShaperVoxels
34

35
     TGLShaperVoxels = class( TGLShaperPoin )
36
     private
37
     protected
38
       _Size :TGLUniBuf<Single>;
39
       _Color :TGLUniBuf<TAlphaColorF>;
40
       ///// アクセス
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 );
50
     public
51
       constructor Create; override;
52
       destructor Destroy; override;
53
       ///// プロパティ
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;
59
       ///// メソッド
60
       procedure BeginDraw; override;
61
       procedure EndDraw; override;
62
     end;
63

64
//const //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【定数】
65

66
//var //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【変数】
67

68
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
69

70
implementation //############################################################### ■
71

72
uses System.Math,
73
     Winapi.OpenGL, Winapi.OpenGLext,
74
     LUX.GPU.OpenGL.Matery.Preset;
75

76
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
77

78
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
79

80
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLMateryVoxels
81

82
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
83

84
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
85

86
/////////////////////////////////////////////////////////////////////// アクセス
87

88
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
89

90
constructor TGLMateryVoxels.Create;
91
begin
92
     inherited;
93

94
     with _ShaderV do
95
     begin
96
          with Source do
97
          begin
98
               BeginUpdate;
99
                 Clear;
100

101
                 Add( '#version 430' );
102

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; };' );
107

108
                 Add( 'in vec4 _SenderPos;' );
109

110
                 Add( 'out TSenderVG' );
111
                 Add( '{' );
112
                 Add( '  vec4 Pos;' );
113
                 Add( '}' );
114
                 Add( '_Result;' );
115

116
                 Add( 'void main()' );
117
                 Add( '{' );
118
                 Add( '  _Result.Pos = _SenderPos;' );
119
                 Add( '}' );
120

121
               EndUpdate;
122
          end;
123

124
          Assert( Status, Errors.Text );
125
     end;
126

127
     with _ShaderG do
128
     begin
129
          with Source do
130
          begin
131
               BeginUpdate;
132
                 Clear;
133

134
                 Add( '#version 430' );
135

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; };' );
140

141
                 Add( 'layout( std140 ) uniform TSize{ vec3 _Size; };' );
142

143
                 Add( 'layout( points ) in;' );
144
                 Add( 'in TSenderVG' );
145
                 Add( '{' );
146
                 Add( '  vec4 Pos;' );
147
                 Add( '}' );
148
                 Add( '_Sender[ 1 ];' );
149

150
                 Add( 'layout( line_strip, max_vertices = 24 ) out;' );
151
                 Add( 'out TSenderGF' );
152
                 Add( '{' );
153
                 Add( '  vec4 Pos;' );
154
                 Add( '}' );
155
                 Add( '_Result;' );
156

157
                 Add( 'void AddPoin( vec4 Poin_ )' );
158
                 Add( '{' );
159
                 Add( '  _Result.Pos = Poin_;' );
160
                 Add( '  gl_Position = _ViewerScal * _CameraProj * inverse( _CameraPose ) * _Result.Pos;' );
161
                 Add( '  EmitVertex();' );
162
                 Add( '}' );
163

164
                 Add( 'void AddLine( vec4 Pos1_, vec4 Pos2_ )' );
165
                 Add( '{' );
166
                 Add( '  AddPoin( Pos1_ );' );
167
                 Add( '  AddPoin( Pos2_ );' );
168
                 Add( '  EndPrimitive();' );
169
                 Add( '}' );
170

171
                 Add( 'void main()' );
172
                 Add( '{' );
173
                 Add( '  vec4 C = _Sender[ 0 ].Pos * vec4( _Size, 1 );' );
174

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 ) );' );
183

184
                 Add( '  AddLine( P000, P001 );' );
185
                 Add( '  AddLine( P010, P011 );' );
186
                 Add( '  AddLine( P100, P101 );' );
187
                 Add( '  AddLine( P110, P111 );' );
188

189
                 Add( '  AddLine( P000, P010 );' );
190
                 Add( '  AddLine( P100, P110 );' );
191
                 Add( '  AddLine( P001, P011 );' );
192
                 Add( '  AddLine( P101, P111 );' );
193

194
                 Add( '  AddLine( P000, P100 );' );
195
                 Add( '  AddLine( P001, P101 );' );
196
                 Add( '  AddLine( P010, P110 );' );
197
                 Add( '  AddLine( P011, P111 );' );
198

199
                 Add( '}' );
200

201
               EndUpdate;
202
          end;
203

204
          Assert( Status, Errors.Text );
205
     end;
206

207
     with _ShaderF do
208
     begin
209
          with Source do
210
          begin
211
               BeginUpdate;
212
                 Clear;
213

214
                 Add( '#version 430' );
215

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; };' );
220

221
                 Add( 'layout( std140 ) uniform TColor{ vec4 _Color; };' );
222

223
                 Add( 'in TSenderGF' );
224
                 Add( '{' );
225
                 Add( '  vec4 Pos;' );
226
                 Add( '}' );
227
                 Add( '_Sender;' );
228

229
                 Add( 'out vec4 _ResultCol;' );
230

231
                 Add( 'void main()' );
232
                 Add( '{' );
233
                 Add( '  _ResultCol = _Color;' );
234
                 Add( '}' );
235

236
               EndUpdate;
237
          end;
238

239
          Assert( Status, Errors.Text );
240
     end;
241

242
     with _Engine do
243
     begin
244
          with UniBufs do
245
          begin
246
               Add( 4, 'TSize' );
247
               Add( 5, 'TColor' );
248
          end;
249

250
          Assert( Status, Errors.Text );
251
     end;
252
end;
253

254
destructor TGLMateryVoxels.Destroy;
255
begin
256

257
     inherited;
258
end;
259

260
/////////////////////////////////////////////////////////////////////// メソッド
261

262
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLShaperVoxels
263

264
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
265

266
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
267

268
function TGLShaperVoxels.GetCount :Integer;
269
begin
270
     Result := PosBuf.Count;
271
end;
272

273
//------------------------------------------------------------------------------
274

275
function TGLShaperVoxels.GetSizeX :Single;
276
begin
277
     Result := _Size[ 0 ];
278
end;
279

280
procedure TGLShaperVoxels.SetSizeX( const SizeX_:Single );
281
begin
282
     _Size[ 0 ] := SizeX_;
283
end;
284

285
function TGLShaperVoxels.GetSizeY :Single;
286
begin
287
     Result := _Size[ 1 ];
288
end;
289

290
procedure TGLShaperVoxels.SetSizeY( const SizeY_:Single );
291
begin
292
     _Size[ 1 ] := SizeY_;
293
end;
294

295
function TGLShaperVoxels.GetSizeZ :Single;
296
begin
297
     Result := _Size[ 2 ];
298
end;
299

300
procedure TGLShaperVoxels.SetSizeZ( const SizeZ_:Single );
301
begin
302
     _Size[ 2 ] := SizeZ_;
303
end;
304

305
//------------------------------------------------------------------------------
306

307
function TGLShaperVoxels.GetColor :TAlphaColorF;
308
begin
309
     Result := _Color[ 0 ];
310
end;
311

312
procedure TGLShaperVoxels.SetColor( const Color_:TAlphaColorF );
313
begin
314
     _Color[ 0 ] := Color_;
315
end;
316

317
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
318

319
constructor TGLShaperVoxels.Create;
320
begin
321
     inherited;
322

323
     _Matery := TGLMateryVoxels.Create;
324

325
     _Size := TGLUniBuf<Single>.Create( GL_STATIC_DRAW );
326
     _Size.Count := 3;
327

328
     _Color := TGLUniBuf<TAlphaColorF>.Create( GL_STATIC_DRAW );
329

330
     SizeX := 0.05;
331
     SizeY := 0.05;
332
     SizeZ := 0.05;
333

334
     Color := TAlphaColorF.Create( 1, 1, 1, 0.5 );
335
end;
336

337
destructor TGLShaperVoxels.Destroy;
338
begin
339
     _Size .Free;
340
     _Color.Free;
341

342
     inherited;
343
end;
344

345
/////////////////////////////////////////////////////////////////////// メソッド
346

347
procedure TGLShaperVoxels.BeginDraw;
348
begin
349
     inherited;
350

351
     _Size .Use( 4 );
352
     _Color.Use( 5 );
353
end;
354

355
procedure TGLShaperVoxels.EndDraw;
356
begin
357
     _Size .Unuse( 4 );
358
     _Color.Unuse( 5 );
359

360
     inherited;
361
end;
362

363
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
364

365
//############################################################################## □
366

367
initialization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 初期化
368

369
finalization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 最終化
370

371
end. //######################################################################### ■

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.