Unit1.cpp 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include "Unit1.h"
  5. //---------------------------------------------------------------------------
  6. #pragma package(smart_init)
  7. #pragma link "GLBaseClasses"
  8. #pragma link "GLCadencer"
  9. #pragma link "GLCoordinates"
  10. #pragma link "GLCrossPlatform"
  11. #pragma link "GLMultiProxy"
  12. #pragma link "GLObjects"
  13. #pragma link "GLParticles"
  14. #pragma link "GLScene"
  15. #pragma link "GLWin32Viewer"
  16. #pragma resource "*.dfm"
  17. TForm1 *Form1;
  18. //---------------------------------------------------------------------------
  19. __fastcall TForm1::TForm1(TComponent* Owner)
  20. : TForm(Owner)
  21. {
  22. }
  23. //---------------------------------------------------------------------------
  24. void __fastcall TForm1::FormCreate(TObject *Sender)
  25. {
  26. int i;
  27. // adjust settings to their default
  28. RBUseLODsClick(Sender); //MPSphere
  29. // replicate the multiproxy via a TGLParticles object
  30. for (i = 0; i < 35; i++) {
  31. GLParticles->CreateParticle()->TagFloat = DegToRad((float)i*10);
  32. }
  33. }
  34. //---------------------------------------------------------------------------
  35. void __fastcall TForm1::Timer1Timer(TObject *Sender)
  36. {
  37. LabelFPS->Caption = Format("%.1f FPS", ARRAYOFCONST((GLSceneViewer1->FramesPerSecond())));
  38. GLSceneViewer1->ResetPerformanceMonitor();
  39. }
  40. //---------------------------------------------------------------------------
  41. void __fastcall TForm1::RBUseLODsClick(TObject *Sender)
  42. {
  43. // adjust LOD on/off (by adjusting base sphere's detail)
  44. if (RBUseLODs->Checked) {
  45. SPHighRes->Slices = 32;
  46. SPHighRes->Stacks = 32;
  47. SPMedRes->Slices = 16;
  48. SPMedRes->Stacks = 16;
  49. SPLowRes->Slices = 8;
  50. SPLowRes->Stacks = 8;
  51. }
  52. else
  53. if (RBHighRes->Checked)
  54. {
  55. SPHighRes->Slices = 32;
  56. SPHighRes->Stacks = 32;
  57. SPMedRes->Slices = 32;
  58. SPMedRes->Stacks = 32;
  59. SPLowRes->Slices = 32;
  60. SPLowRes->Stacks = 32;
  61. }
  62. else
  63. if (RBLowRes->Checked)
  64. {
  65. SPHighRes->Slices = 8;
  66. SPHighRes->Stacks = 8;
  67. SPMedRes->Slices = 8;
  68. SPMedRes->Stacks = 8;
  69. SPLowRes->Slices = 8;
  70. SPLowRes->Stacks = 8;
  71. }
  72. // colorize the LODs, to make them clearly visible
  73. CBColorize->Enabled = RBUseLODs->Checked;
  74. if (CBColorize->Checked && RBUseLODs->Checked)
  75. {
  76. SPHighRes->Material->FrontProperties->Diffuse->Color = clrRed;
  77. SPMedRes->Material->FrontProperties->Diffuse->Color = clrBlue;
  78. SPLowRes->Material->FrontProperties->Diffuse->Color = clrYellow;
  79. }
  80. else
  81. {
  82. SPHighRes->Material->FrontProperties->Diffuse->Color = clrGray80;
  83. SPMedRes->Material->FrontProperties->Diffuse->Color = clrGray80;
  84. SPLowRes->Material->FrontProperties->Diffuse->Color = clrGray80;
  85. }
  86. }
  87. //---------------------------------------------------------------------------
  88. void __fastcall TForm1::MPSphereProgress(TObject *Sender, const double deltaTime,
  89. const double newTime)
  90. {
  91. // this is invoked for each of our MultiProxys, it makes them loop an ellipse
  92. GLParticles->Position->X = Sin(newTime+GLParticles->TagFloat)*80-60;
  93. GLParticles->Position->Z = Cos(newTime+GLParticles->TagFloat)*7;
  94. }
  95. //---------------------------------------------------------------------------