fPostEffectD.pas 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. unit fPostEffectD;
  2. interface
  3. uses
  4. Winapi.OpenGL,
  5. System.SysUtils,
  6. System.Classes,
  7. Vcl.Graphics,
  8. Vcl.Controls,
  9. Vcl.Forms,
  10. Vcl.Dialogs,
  11. Vcl.StdCtrls,
  12. Vcl.ExtCtrls,
  13. Vcl.ComCtrls,
  14. Vcl.Imaging.Jpeg,
  15. GLS.Scene,
  16. GLS.PersistentClasses,
  17. GLS.VectorFileObjects,
  18. GLS.Objects,
  19. GLS.Texture,
  20. GLS.VectorLists,
  21. GLS.Cadencer,
  22. GLS.SceneViewer,
  23. GLS.SimpleNavigation,
  24. GLSL.PostEffects,
  25. GLS.MeshUtils,
  26. Stage.VectorGeometry,
  27. GLS.Material,
  28. GLS.Coordinates,
  29. GLS.BaseClasses,
  30. GLS.RenderContextInfo,
  31. Stage.Utils,
  32. GLS.FileMD2,
  33. GLS.FileTGA,
  34. GLS.FileOBJ,
  35. GLS.File3DS,
  36. GLS.FileSMD;
  37. type
  38. TFormPostEffect = class(TForm)
  39. GLScene1: TGLScene;
  40. GLCamera1: TGLCamera;
  41. GLMaterialLibrary1: TGLMaterialLibrary;
  42. GLCadencer1: TGLCadencer;
  43. GLActor1: TGLActor;
  44. Label1: TLabel;
  45. GLLightSource1: TGLLightSource;
  46. Panel1: TPanel;
  47. GLSceneViewer1: TGLSceneViewer;
  48. ComboBox1: TComboBox;
  49. GLPostEffect1: TGLPostEffect;
  50. Label2: TLabel;
  51. GLSimpleNavigation1: TGLSimpleNavigation;
  52. procedure GLCadencer1Progress(Sender: TObject; const DeltaTime, newTime: Double);
  53. procedure FormCreate(Sender: TObject);
  54. procedure ComboBox1Change(Sender: TObject);
  55. procedure GLPostEffect1CustomEffect(Sender: TObject;
  56. var rci: TGLRenderContextInfo; var Buffer: TGLPostEffectBuffer);
  57. private
  58. end;
  59. var
  60. FormPostEffect: TFormPostEffect;
  61. implementation
  62. {$R *.dfm}
  63. procedure TFormPostEffect.GLCadencer1Progress(Sender: TObject; const DeltaTime, newTime: Double);
  64. begin
  65. GLSceneViewer1.Invalidate;
  66. end;
  67. procedure TFormPostEffect.FormCreate(Sender: TObject);
  68. begin
  69. var Path: TFileName := GetCurrentAssetPath();
  70. SetCurrentDir(Path + '\modelext');
  71. GLActor1.LoadFromFile('waste.md2');
  72. GLMaterialLibrary1.TexturePaths := GetCurrentDir();
  73. GLActor1.Material.Texture.Image.LoadFromFile('waste.jpg');
  74. GLActor1.Material.Texture.Enabled := True;
  75. GLActor1.SwitchToAnimation(GLActor1.Animations[0]);
  76. GLActor1.AnimationMode := aamLoop;
  77. GLActor1.ObjectStyle := GLActor1.ObjectStyle + [osDirectDraw];
  78. GLActor1.Reference := aarMorph;
  79. end;
  80. procedure TFormPostEffect.ComboBox1Change(Sender: TObject);
  81. begin
  82. case ComboBox1.ItemIndex of
  83. 0: GLPostEffect1.Preset := pepNone;
  84. 1: GLPostEffect1.Preset := pepGray;
  85. 2: GLPostEffect1.Preset := pepNegative;
  86. 3: GLPostEffect1.Preset := pepDistort;
  87. 4: GLPostEffect1.Preset := pepNoise;
  88. 5: GLPostEffect1.Preset := pepNightVision;
  89. 6: GLPostEffect1.Preset := pepBlur;
  90. 7: GLPostEffect1.Preset := pepCustom;
  91. end;
  92. end;
  93. {$R-} // Turn off range checking.
  94. procedure TFormPostEffect.GLPostEffect1CustomEffect(Sender: TObject;
  95. var rci: TGLRenderContextInfo; var Buffer: TGLPostEffectBuffer);
  96. var
  97. I: Longword;
  98. begin
  99. for I := 0 to High(Buffer) do
  100. begin
  101. Buffer[I].r := Round(Buffer[I + 5].r * 2);
  102. Buffer[I].g := Round(Buffer[I].g * 1.5);
  103. Buffer[I].b := Round(Buffer[I + 5].b * 1.5);
  104. end;
  105. end;
  106. {$R+}
  107. end.