fPfxCursorD.pas 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. unit fPfxCursorD;
  2. interface
  3. uses
  4. Winapi.Windows,
  5. Winapi.Messages,
  6. System.SysUtils,
  7. System.Variants,
  8. System.Classes,
  9. Vcl.Graphics,
  10. Vcl.Controls,
  11. Vcl.Forms,
  12. Vcl.Dialogs,
  13. Vcl.StdCtrls,
  14. Vcl.ExtCtrls,
  15. Stage.Keyboard,
  16. Stage.VectorTypes,
  17. Stage.VectorGeometry,
  18. GLS.XCollection,
  19. GLS.Coordinates,
  20. GLS.BaseClasses,
  21. GLS.Cadencer,
  22. GLS.Texture,
  23. GLS.SceneViewer,
  24. GLS.Scene,
  25. GLS.Graphics,
  26. GLS.ParticleFX,
  27. GLS.Objects,
  28. GLS.HUDObjects,
  29. GLS.AsyncTimer,
  30. GLS.PerlinPFX,
  31. GLS.Material,
  32. GLS.FireFX,
  33. GLS.GeomObjects,
  34. Stage.Utils;
  35. type
  36. TForm1 = class(TForm)
  37. GLScene1: TGLScene;
  38. GLMaterialLibrary1: TGLMaterialLibrary;
  39. GLCadencer1: TGLCadencer;
  40. pfx1: TGLPointLightPFXManager;
  41. cur: TGLHUDSprite;
  42. dc_cur: TGLDummyCube;
  43. GLAsyncTimer1: TGLAsyncTimer;
  44. rend: TGLParticleFXRenderer;
  45. dc1: TGLDummyCube;
  46. dc2: TGLDummyCube;
  47. GLPointLightPFXManager2: TGLPointLightPFXManager;
  48. GLPointLightPFXManager3: TGLPointLightPFXManager;
  49. pfx2: TGLCustomSpritePFXManager;
  50. vp: TGLSceneViewer;
  51. dc3: TGLDummyCube;
  52. pfx3: TGLCustomSpritePFXManager;
  53. GLDummyCube3: TGLDummyCube;
  54. GLCone1: TGLCone;
  55. GLDummyCube1: TGLDummyCube;
  56. GLCone2: TGLCone;
  57. GLDummyCube2: TGLDummyCube;
  58. Light1: TGLLightSource;
  59. Panel1: TPanel;
  60. RadioGroup1: TRadioGroup;
  61. RadioGroup2: TRadioGroup;
  62. GLCamera1: TGLCamera;
  63. GLPerlinPFXManager1: TGLPerlinPFXManager;
  64. GLFireFXManager1: TGLFireFXManager;
  65. GLParticleFXRenderer1: TGLParticleFXRenderer;
  66. stPerlin: TStaticText;
  67. stFire: TStaticText;
  68. procedure GLCadencer1Progress(Sender: TObject; const deltaTime, newTime: Double);
  69. procedure pfx2PrepareTextureImage(Sender: TObject; destBmp32: TGLImage; var texFormat: Integer);
  70. procedure pfx3PrepareTextureImage(Sender: TObject; destBmp32: TGLImage; var texFormat: Integer);
  71. procedure GLAsyncTimer1Timer(Sender: TObject);
  72. procedure FormShow(Sender: TObject);
  73. procedure RadioGroup1Click(Sender: TObject);
  74. procedure RadioGroup2Click(Sender: TObject);
  75. procedure FormCreate(Sender: TObject);
  76. procedure stPerlinClick(Sender: TObject);
  77. public
  78. Path: TFileName;
  79. end;
  80. var
  81. Form1: TForm1;
  82. implementation
  83. {$R *.dfm}
  84. procedure TForm1.FormCreate(Sender: TObject);
  85. begin
  86. Path := GetCurrentAssetPath() + '\texture';
  87. SetCurrentDir(Path);
  88. cur.Material.Texture.Image.LoadFromFile('cur.bmp');
  89. end;
  90. procedure TForm1.GLCadencer1Progress;
  91. var
  92. m: TPoint;
  93. v: TGLVector;
  94. begin
  95. cur.Position.SetPoint(Mouse.CursorPos.X - left, Mouse.CursorPos.Y - top, 0);
  96. cur.Rotation := cur.Rotation - deltaTime * 50;
  97. v := cur.AbsolutePosition;
  98. v.y := vp.Height - v.y;
  99. vp.Buffer.ScreenVectorIntersectWithPlaneXY(v, 0, v);
  100. dc_cur.AbsolutePosition := v;
  101. dc1.Visible := IsKeyDown(VK_LBUTTON);
  102. dc2.Visible := IsKeyDown(VK_RBUTTON);
  103. dc3.Visible := IsKeyDown(VK_MBUTTON);
  104. GLDummyCube3.Turn(1.5 * deltaTime * 60);
  105. end;
  106. //
  107. // skull
  108. //
  109. procedure TForm1.pfx2PrepareTextureImage;
  110. var
  111. bmp: TBitmap;
  112. begin
  113. bmp := TBitmap.Create;
  114. bmp.LoadFromFile('skull.bmp');
  115. destBmp32.Assign(bmp);
  116. bmp.Free;
  117. end;
  118. //
  119. // rose
  120. //
  121. procedure TForm1.pfx3PrepareTextureImage;
  122. var
  123. bmp: TBitmap;
  124. begin
  125. bmp := TBitmap.Create;
  126. bmp.LoadFromFile('rose.bmp');
  127. destBmp32.Assign(bmp);
  128. bmp.Free;
  129. end;
  130. procedure TForm1.RadioGroup1Click(Sender: TObject);
  131. begin
  132. if RadioGroup1.ItemIndex = 0 then
  133. GLFireFXManager1.Disabled := False
  134. else
  135. GLFireFXManager1.Disabled := True;
  136. end;
  137. procedure TForm1.RadioGroup2Click(Sender: TObject);
  138. begin
  139. if RadioGroup2.ItemIndex = 0 then
  140. GLPerlinPFXManager1.Renderer.Visible := True
  141. else
  142. GLPerlinPFXManager1.Renderer.Visible := False;
  143. end;
  144. procedure TForm1.stPerlinClick(Sender: TObject);
  145. begin
  146. //
  147. end;
  148. //
  149. // fps
  150. //
  151. procedure TForm1.GLAsyncTimer1Timer(Sender: TObject);
  152. begin
  153. Caption := 'PFX Cursor Demo: ' + vp.FramesPerSecondText(2) +
  154. ' / use the mouse left and right buttons';
  155. vp.ResetPerformanceMonitor;
  156. end;
  157. procedure TForm1.FormShow(Sender: TObject);
  158. begin
  159. GLCadencer1.Enabled := True;
  160. end;
  161. end.