fMultiProxy.pas 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. unit fMultiProxy;
  2. interface
  3. uses
  4. Winapi.OpenGL,
  5. System.SysUtils,
  6. System.Classes,
  7. System.Math,
  8. Vcl.Graphics,
  9. Vcl.Controls,
  10. Vcl.Forms,
  11. Vcl.Dialogs,
  12. Vcl.ExtCtrls,
  13. Vcl.StdCtrls,
  14. GLS.Cadencer,
  15. GLS.Scene,
  16. GLS.VectorTypes,
  17. GLS.Objects,
  18. GLS.Particles,
  19. GLS.SceneViewer,
  20. GLS.Color,
  21. GLS.MultiProxy,
  22. GLS.Texture,
  23. GLS.Coordinates,
  24. GLS.BaseClasses,
  25. GLS.VectorGeometry;
  26. type
  27. TFormMultiProxy = class(TForm)
  28. GLScene: TGLScene;
  29. GLSceneViewer1: TGLSceneViewer;
  30. GLCamera: TGLCamera;
  31. DCTarget: TGLDummyCube;
  32. DCReferences: TGLDummyCube;
  33. GLLightSource1: TGLLightSource;
  34. GLParticles: TGLParticles;
  35. SPHighRes: TGLSphere;
  36. SPMedRes: TGLSphere;
  37. SPLowRes: TGLSphere;
  38. GLCadencer: TGLCadencer;
  39. Timer1: TTimer;
  40. MPSphere: TGLMultiProxy;
  41. Panel1: TPanel;
  42. RBUseLODs: TRadioButton;
  43. RBHighRes: TRadioButton;
  44. CBColorize: TCheckBox;
  45. RBLowRes: TRadioButton;
  46. LabelFPS: TLabel;
  47. procedure FormCreate(Sender: TObject);
  48. procedure Timer1Timer(Sender: TObject);
  49. procedure MPSphereProgress(Sender: TObject; const deltaTime,
  50. newTime: Double);
  51. procedure RBUseLODsClick(Sender: TObject);
  52. private
  53. public
  54. end;
  55. var
  56. FormMultiProxy: TFormMultiProxy;
  57. implementation
  58. {$R *.dfm}
  59. procedure TFormMultiProxy.FormCreate(Sender: TObject);
  60. var
  61. i : Integer;
  62. begin
  63. // adjust settings to their default
  64. RBUseLODsClick(Self);
  65. // replicate the multiproxy via a TGLParticles object
  66. for i:=0 to 35 do
  67. GLParticles.CreateParticle.TagFloat:=DegToRad(i*10);
  68. end;
  69. procedure TFormMultiProxy.MPSphereProgress(Sender: TObject; const deltaTime,
  70. newTime: Double);
  71. begin
  72. // this is invoked for each of our MultiProxys, it makes them loop an ellipse
  73. with (Sender as TGLBaseSceneObject) do begin
  74. Position.X:=Sin(newTime+TagFloat)*80-60;
  75. Position.Z:=Cos(newTime+TagFloat)*7;
  76. end;
  77. end;
  78. procedure TFormMultiProxy.RBUseLODsClick(Sender: TObject);
  79. begin
  80. // adjust LOD on/off (by adjusting base sphere's detail)
  81. if RBUseLODs.Checked then begin
  82. SPHighRes.Slices:=32;
  83. SPHighRes.Stacks:=32;
  84. SPMedRes.Slices:=16;
  85. SPMedRes.Stacks:=16;
  86. SPLowRes.Slices:=8;
  87. SPLowRes.Stacks:=8;
  88. end else if RBHighRes.Checked then begin
  89. SPHighRes.Slices:=32;
  90. SPHighRes.Stacks:=32;
  91. SPMedRes.Slices:=32;
  92. SPMedRes.Stacks:=32;
  93. SPLowRes.Slices:=32;
  94. SPLowRes.Stacks:=32;
  95. end else if RBLowRes.Checked then begin
  96. SPHighRes.Slices:=8;
  97. SPHighRes.Stacks:=8;
  98. SPMedRes.Slices:=8;
  99. SPMedRes.Stacks:=8;
  100. SPLowRes.Slices:=8;
  101. SPLowRes.Stacks:=8;
  102. end;
  103. // colorize the LODs, to make them clearly visible
  104. CBColorize.Enabled:=RBUseLODs.Checked;
  105. if CBColorize.Checked and RBUseLODs.Checked then begin
  106. SPHighRes.Material.FrontProperties.Diffuse.Color:=clrRed;
  107. SPMedRes.Material.FrontProperties.Diffuse.Color:=clrBlue;
  108. SPLowRes.Material.FrontProperties.Diffuse.Color:=clrYellow;
  109. end else begin
  110. SPHighRes.Material.FrontProperties.Diffuse.Color:=clrGray80;
  111. SPMedRes.Material.FrontProperties.Diffuse.Color:=clrGray80;
  112. SPLowRes.Material.FrontProperties.Diffuse.Color:=clrGray80;
  113. end;
  114. end;
  115. procedure TFormMultiProxy.Timer1Timer(Sender: TObject);
  116. begin
  117. LabelFPS.Caption:=Format('%.1f FPS', [GLSceneViewer1.FramesPerSecond]);
  118. GLSceneViewer1.ResetPerformanceMonitor;
  119. end;
  120. end.