2
0

fBlurAdvanced.pas 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. unit fBlurAdvanced;
  2. interface
  3. uses
  4. Winapi.OpenGL,
  5. System.SysUtils,
  6. System.Variants,
  7. System.Classes,
  8. Vcl.Graphics,
  9. Vcl.Controls,
  10. Vcl.Forms,
  11. Vcl.Dialogs,
  12. Vcl.Imaging.Jpeg,
  13. Vcl.ComCtrls,
  14. Vcl.StdCtrls,
  15. Vcl.ExtCtrls,
  16. GLS.SceneViewer,
  17. GLS.Scene,
  18. GLS.Objects,
  19. GLS.HUDObjects,
  20. GLS.GeomObjects,
  21. GLS.Cadencer,
  22. GLS.Blur,
  23. GLS.Texture,
  24. GLS.Material,
  25. GLS.Coordinates,
  26. GLS.BaseClasses,
  27. GLS.Utils;
  28. type
  29. TFormBlurAdvanced = class(TForm)
  30. GLScene1: TGLScene;
  31. GLSceneViewer1: TGLSceneViewer;
  32. GLCadencer1: TGLCadencer;
  33. GLCamera1: TGLCamera;
  34. GLCube1: TGLCube;
  35. GLLightSource1: TGLLightSource;
  36. GLDummyCube1: TGLDummyCube;
  37. GLAnnulus1: TGLAnnulus;
  38. GLBlur1: TGLBlur;
  39. Timer1: TTimer;
  40. GLMaterialLibrary1: TGLMaterialLibrary;
  41. Panel1: TPanel;
  42. edtAdvancedBlurAmp: TEdit;
  43. Label1: TLabel;
  44. Label2: TLabel;
  45. edtAdvancedBlurPasses: TEdit;
  46. trkAdvancedBlurHiClamp: TTrackBar;
  47. Label3: TLabel;
  48. Label4: TLabel;
  49. trkAdvancedBlurLoClamp: TTrackBar;
  50. Label5: TLabel;
  51. Bevel1: TBevel;
  52. GLSphere1: TGLSphere;
  53. TorusImpostor: TGLTorus;
  54. Memo1: TMemo;
  55. GLTorus2: TGLTorus;
  56. LabelFPS: TLabel;
  57. procedure Timer1Timer(Sender: TObject);
  58. procedure GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState;
  59. X, Y: Integer);
  60. procedure FormCreate(Sender: TObject);
  61. procedure GLCadencer1Progress(Sender: TObject;
  62. const deltaTime, newTime: Double);
  63. procedure edtAdvancedBlurAmpChange(Sender: TObject);
  64. procedure trkAdvancedBlurHiClampChange(Sender: TObject);
  65. procedure trkAdvancedBlurLoClampChange(Sender: TObject);
  66. procedure edtAdvancedBlurPassesChange(Sender: TObject);
  67. procedure GLBlur1BeforeTargetRender(Sender: TObject);
  68. procedure GLBlur1AfterTargetRender(Sender: TObject);
  69. private
  70. mx, my: Integer;
  71. public
  72. end;
  73. var
  74. FormBlurAdvanced: TFormBlurAdvanced;
  75. implementation
  76. {$R *.dfm}
  77. procedure TFormBlurAdvanced.FormCreate(Sender: TObject);
  78. begin
  79. SetGLSceneMediaDir();
  80. // Blur GLDummyCube1and it's children
  81. GLBlur1.TargetObject := GLDummyCube1;
  82. // point to GLDummyCube1
  83. GLCamera1.TargetObject := GLDummyCube1;
  84. // load materials
  85. GLMaterialLibrary1.Materials[0].Material.Texture.Image.LoadFromFile
  86. ('beigemarble.jpg');
  87. GLMaterialLibrary1.Materials[1].Material.Texture.Image.LoadFromFile
  88. ('moon.bmp');
  89. end;
  90. procedure TFormBlurAdvanced.GLBlur1BeforeTargetRender(Sender: TObject);
  91. begin
  92. TorusImpostor.Visible := true; // GLBlur1 must render the Torusimpostor
  93. end;
  94. procedure TFormBlurAdvanced.GLBlur1AfterTargetRender(Sender: TObject);
  95. begin
  96. TorusImpostor.Visible := false;
  97. // GLSCeneViewer1 must NOT render the Torusimpostor
  98. end;
  99. procedure TFormBlurAdvanced.GLCadencer1Progress(Sender: TObject;
  100. const deltaTime, newTime: Double);
  101. begin
  102. GLSceneViewer1.Invalidate;
  103. end;
  104. procedure TFormBlurAdvanced.GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState;
  105. X, Y: Integer);
  106. begin
  107. if (ssRight in Shift) and (Y > 10) then
  108. GLCamera1.AdjustDistanceToTarget(my / Y);
  109. if ssLeft in Shift then
  110. GLCamera1.MoveAroundTarget(my - Y, mx - X);
  111. mx := X;
  112. my := Y;
  113. end;
  114. procedure TFormBlurAdvanced.Timer1Timer(Sender: TObject);
  115. begin
  116. LabelFPS.Caption := GLSceneViewer1.FramesPerSecondText(0);
  117. GLSceneViewer1.ResetPerformanceMonitor;
  118. end;
  119. procedure TFormBlurAdvanced.trkAdvancedBlurHiClampChange(Sender: TObject);
  120. begin
  121. GLBlur1.AdvancedBlurHiClamp := trkAdvancedBlurHiClamp.Position;
  122. end;
  123. procedure TFormBlurAdvanced.trkAdvancedBlurLoClampChange(Sender: TObject);
  124. begin
  125. GLBlur1.AdvancedBlurLowClamp := trkAdvancedBlurLoClamp.Position;
  126. end;
  127. procedure TFormBlurAdvanced.edtAdvancedBlurAmpChange(Sender: TObject);
  128. begin
  129. GLBlur1.AdvancedBlurAmp := StrToFloat(edtAdvancedBlurAmp.Text);
  130. end;
  131. procedure TFormBlurAdvanced.edtAdvancedBlurPassesChange(Sender: TObject);
  132. begin
  133. GLBlur1.AdvancedBlurPasses := StrToInt(edtAdvancedBlurPasses.Text);
  134. end;
  135. end.