fMeshExplosionD.pas 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. unit fMeshExplosionD;
  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.ComCtrls,
  13. Vcl.ExtCtrls,
  14. GLS.Scene,
  15. GLS.VectorFileObjects,
  16. GLS.SceneViewer,
  17. GLS.Cadencer,
  18. GLS.ExplosionFx,
  19. GLS.File3DS,
  20. GLS.Coordinates,
  21. Stage.Utils,
  22. GLS.BaseClasses;
  23. type
  24. TFormMeshExplosion = class(TForm)
  25. Viewer: TGLSceneViewer;
  26. GLScene1: TGLScene;
  27. Camera1: TGLCamera;
  28. GLLightSource1: TGLLightSource;
  29. mesh: TGLFreeForm;
  30. GLCadencer1: TGLCadencer;
  31. Panel1: TPanel;
  32. CheckOn: TCheckBox;
  33. Button1: TButton;
  34. StepBar: TProgressBar;
  35. Label2: TLabel;
  36. MaxStepsBar: TTrackBar;
  37. Label1: TLabel;
  38. Label3: TLabel;
  39. SpeedBar: TTrackBar;
  40. procedure FormCreate(Sender: TObject);
  41. procedure CheckOnClick(Sender: TObject);
  42. procedure Button1Click(Sender: TObject);
  43. procedure ViewerMouseMove(Sender: TObject; Shift: TShiftState;
  44. X, Y: Integer);
  45. procedure ViewerMouseDown(Sender: TObject; Button: TMouseButton;
  46. Shift: TShiftState; X, Y: Integer);
  47. procedure GLCadencer1Progress(Sender: TObject;
  48. const deltaTime, newTime: Double);
  49. procedure SpeedBarChange(Sender: TObject);
  50. procedure MaxStepsBarChange(Sender: TObject);
  51. private
  52. public
  53. end;
  54. var
  55. FormMeshExplosion: TFormMeshExplosion;
  56. vx, vy: Integer;
  57. Cache: TGLMeshObjectList;
  58. implementation
  59. {$R *.DFM}
  60. procedure TFormMeshExplosion.FormCreate(Sender: TObject);
  61. var
  62. expl: TGLBExplosionFx;
  63. begin
  64. var Path: TFileName := GetCurrentAssetPath();
  65. SetCurrentDir(Path + '\model');
  66. // load mesh
  67. mesh.LoadFromFile('mushroom.3ds');
  68. // cache information
  69. Cache := TGLMeshObjectList.Create;
  70. Cache.Assign(mesh.MeshObjects);
  71. // default settings
  72. expl := TGLBExplosionFx(mesh.Effects.Items[0]);
  73. expl.MaxSteps := 0;
  74. expl.Speed := 0.1;
  75. end;
  76. procedure TFormMeshExplosion.CheckOnClick(Sender: TObject);
  77. begin
  78. // turn on/off
  79. TGLBExplosionFx(mesh.Effects.Items[0]).Enabled := CheckOn.checked;
  80. end;
  81. procedure TFormMeshExplosion.Button1Click(Sender: TObject);
  82. begin
  83. // reset simulation
  84. TGLBExplosionFx(mesh.Effects.Items[0]).Reset;
  85. CheckOn.checked := false;
  86. // restore the mesh
  87. mesh.MeshObjects.Assign(Cache);
  88. mesh.StructureChanged;
  89. end;
  90. procedure TFormMeshExplosion.ViewerMouseMove(Sender: TObject;
  91. Shift: TShiftState; X, Y: Integer);
  92. begin
  93. if Shift <> [ssLeft] then
  94. exit;
  95. Camera1.MoveAroundTarget(Y - vy, X - vx);
  96. vx := X;
  97. vy := Y;
  98. end;
  99. procedure TFormMeshExplosion.ViewerMouseDown(Sender: TObject;
  100. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  101. begin
  102. vx := X;
  103. vy := Y;
  104. end;
  105. procedure TFormMeshExplosion.GLCadencer1Progress(Sender: TObject;
  106. const deltaTime, newTime: Double);
  107. begin
  108. Viewer.Invalidate;
  109. StepBar.Position := TGLBExplosionFx(mesh.Effects.Items[0]).Step;
  110. end;
  111. procedure TFormMeshExplosion.SpeedBarChange(Sender: TObject);
  112. begin
  113. TGLBExplosionFx(mesh.Effects.Items[0]).Speed := SpeedBar.Position / 10;
  114. end;
  115. procedure TFormMeshExplosion.MaxStepsBarChange(Sender: TObject);
  116. begin
  117. TGLBExplosionFx(mesh.Effects.Items[0]).MaxSteps := MaxStepsBar.Position;
  118. StepBar.Max := MaxStepsBar.Position;
  119. end;
  120. end.