fBlurAdvancedD.pas 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. unit fBlurAdvancedD;
  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. Stage.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. var Path: TFileName := GetCurrentAssetPath();
  80. SetCurrentDir(Path + '\texture');
  81. // Blur GLDummyCube1and it's children
  82. GLBlur1.TargetObject := GLDummyCube1;
  83. // point to GLDummyCube1
  84. GLCamera1.TargetObject := GLDummyCube1;
  85. // load materials
  86. GLMaterialLibrary1.Materials[0].Material.Texture.Image.LoadFromFile
  87. ('beigemarble.jpg');
  88. GLMaterialLibrary1.Materials[1].Material.Texture.Image.LoadFromFile
  89. ('moon.bmp');
  90. end;
  91. procedure TFormBlurAdvanced.GLBlur1BeforeTargetRender(Sender: TObject);
  92. begin
  93. TorusImpostor.Visible := true; // GLBlur1 must render the Torusimpostor
  94. end;
  95. procedure TFormBlurAdvanced.GLBlur1AfterTargetRender(Sender: TObject);
  96. begin
  97. TorusImpostor.Visible := false;
  98. // GLSCeneViewer1 must NOT render the Torusimpostor
  99. end;
  100. procedure TFormBlurAdvanced.GLCadencer1Progress(Sender: TObject;
  101. const deltaTime, newTime: Double);
  102. begin
  103. GLSceneViewer1.Invalidate;
  104. end;
  105. procedure TFormBlurAdvanced.GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState;
  106. X, Y: Integer);
  107. begin
  108. if (ssRight in Shift) and (Y > 10) then
  109. GLCamera1.AdjustDistanceToTarget(my / Y);
  110. if ssLeft in Shift then
  111. GLCamera1.MoveAroundTarget(my - Y, mx - X);
  112. mx := X;
  113. my := Y;
  114. end;
  115. procedure TFormBlurAdvanced.Timer1Timer(Sender: TObject);
  116. begin
  117. LabelFPS.Caption := GLSceneViewer1.FramesPerSecondText(0);
  118. GLSceneViewer1.ResetPerformanceMonitor;
  119. end;
  120. procedure TFormBlurAdvanced.trkAdvancedBlurHiClampChange(Sender: TObject);
  121. begin
  122. GLBlur1.AdvancedBlurHiClamp := trkAdvancedBlurHiClamp.Position;
  123. end;
  124. procedure TFormBlurAdvanced.trkAdvancedBlurLoClampChange(Sender: TObject);
  125. begin
  126. GLBlur1.AdvancedBlurLowClamp := trkAdvancedBlurLoClamp.Position;
  127. end;
  128. procedure TFormBlurAdvanced.edtAdvancedBlurAmpChange(Sender: TObject);
  129. begin
  130. GLBlur1.AdvancedBlurAmp := StrToFloat(edtAdvancedBlurAmp.Text);
  131. end;
  132. procedure TFormBlurAdvanced.edtAdvancedBlurPassesChange(Sender: TObject);
  133. begin
  134. GLBlur1.AdvancedBlurPasses := StrToInt(edtAdvancedBlurPasses.Text);
  135. end;
  136. end.