fShadowsC.cpp 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include "fShadowsC.h"
  5. //---------------------------------------------------------------------------
  6. #pragma package(smart_init)
  7. #pragma link "GLS.AsyncTimer"
  8. #pragma link "GLS.BaseClasses"
  9. #pragma link "GLS.Behaviours"
  10. #pragma link "GLS.Cadencer"
  11. #pragma link "GLS.Coordinates"
  12. #pragma link "GLS.GeomObjects"
  13. #pragma link "GLS.Graph"
  14. #pragma link "GLS.Material"
  15. #pragma link "GLS.Objects"
  16. #pragma link "GLS.Scene"
  17. #pragma link "GLS.SceneViewer"
  18. #pragma link "GLS.zBuffer"
  19. #pragma resource "*.dfm"
  20. TForm1 *Form1;
  21. //---------------------------------------------------------------------------
  22. __fastcall TForm1::TForm1(TComponent* Owner)
  23. : TForm(Owner)
  24. {
  25. }
  26. //---------------------------------------------------------------------------
  27. void __fastcall TForm1::FormCreate(TObject *Sender)
  28. {
  29. TFileName Path = GetCurrentAssetPath();
  30. SetCurrentDir(Path + "\\texture");
  31. GLMaterialLibrary1->Materials->Items[2]->Material->Texture->Image->LoadFromFile("marbletiles.jpg");
  32. GLMaterialLibrary1->Materials->Items[2]->Material->Texture->Disabled = false;
  33. GLMaterialLibrary1->Materials->Items[3]->Material->Texture->Image->LoadFromFile("beigemarble.jpg");
  34. GLMaterialLibrary1->Materials->Items[3]->Material->Texture->Disabled = false;
  35. RotateBoxClick(Sender);
  36. }
  37. //---------------------------------------------------------------------------
  38. void __fastcall TForm1::ViewerMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
  39. int X, int Y)
  40. {
  41. mx = X; my = Y;
  42. ActiveControl = DistanceBar;
  43. }
  44. //---------------------------------------------------------------------------
  45. void __fastcall TForm1::ViewerMouseMove(TObject *Sender, TShiftState Shift, int X,
  46. int Y)
  47. {
  48. if (Shift.Contains(ssLeft) || Shift.Contains(ssRight))
  49. GLCamera1->MoveAroundTarget(my-Y, mx-X);
  50. mx = X; my = Y;
  51. GLCadencer1->Progress();
  52. Viewer->Refresh();
  53. Caster->Refresh();
  54. }
  55. //---------------------------------------------------------------------------
  56. void __fastcall TForm1::CasterMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
  57. int X, int Y)
  58. {
  59. mx2 = X; my2 = Y;
  60. ActiveControl = DistanceBar2;
  61. }
  62. //---------------------------------------------------------------------------
  63. void __fastcall TForm1::CasterMouseMove(TObject *Sender, TShiftState Shift, int X,
  64. int Y)
  65. {
  66. if (Shift.Contains(ssLeft) || Shift.Contains(ssRight))
  67. GLCamera2->MoveAroundTarget(my2-Y, mx2-X);
  68. mx2 = X; my2 = Y;
  69. if (Shift.Contains(ssLeft) || Shift.Contains(ssRight))
  70. {
  71. Shadows1->CastShadow();
  72. GLCadencer1->Progress();
  73. Viewer->Refresh();
  74. Caster->Refresh();
  75. }
  76. }
  77. //---------------------------------------------------------------------------
  78. void __fastcall TForm1::DistanceBarChange(TObject *Sender)
  79. {
  80. float Dist = GLCamera1->DistanceToTarget();
  81. float NewDist = ((float)DistanceBar->Position/4)*((float)DistanceBar->Position/4)+1;
  82. GLCamera1->Position->AsAffineVector = VectorScale(GLCamera1->Position->AsAffineVector, (float)NewDist/Dist);
  83. }
  84. //---------------------------------------------------------------------------
  85. void __fastcall TForm1::DistanceBar2Change(TObject *Sender)
  86. {
  87. float Dist = GLCamera2->DistanceToTarget();
  88. float NewDist = ((float)DistanceBar2->Position/4)*((float)DistanceBar2->Position/4)+1;
  89. GLCamera2->Position->AsAffineVector = VectorScale(GLCamera2->Position->AsAffineVector, (float)NewDist/Dist);
  90. Shadows1->CastShadow();
  91. Caster->Refresh();
  92. }
  93. //---------------------------------------------------------------------------
  94. void __fastcall TForm1::CastBtnClick(TObject *Sender)
  95. {
  96. double RefTime = GLCadencer1->GetCurrenttime();
  97. Shadows1->CastShadow();
  98. Viewer->Refresh();
  99. /// TimeLbl->Caption = IntToStr(Int((GLCadencer1->GetCurrenttime()-(int)RefTime)*100));
  100. }
  101. //---------------------------------------------------------------------------
  102. void __fastcall TForm1::ViewerMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
  103. int X, int Y)
  104. {
  105. Viewer->Visible = true;
  106. }
  107. //---------------------------------------------------------------------------
  108. void __fastcall TForm1::CasterMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
  109. int X, int Y)
  110. {
  111. Shadows1->CastShadow();
  112. }
  113. //---------------------------------------------------------------------------
  114. void __fastcall TForm1::FadeBoxClick(TObject *Sender)
  115. {
  116. Shadows1->DepthFade = FadeBox->Checked;
  117. }
  118. //---------------------------------------------------------------------------
  119. void __fastcall TForm1::HeightField1GetHeight(const float x, const float y, float &z,
  120. TVector4f &Color, TTexPoint &TexPoint)
  121. {
  122. z = 0;
  123. }
  124. //---------------------------------------------------------------------------
  125. void __fastcall TForm1::FrustBoxClick(TObject *Sender)
  126. {
  127. Shadows1->FrustShadow = FrustBox->Checked;
  128. }
  129. //---------------------------------------------------------------------------
  130. void __fastcall TForm1::AsyncTimer1Timer(TObject *Sender)
  131. {
  132. Caption = "Shadows " + Format("%.2f FPS",
  133. ARRAYOFCONST ((Viewer->FramesPerSecond())));
  134. Viewer->ResetPerformanceMonitor();
  135. }
  136. //---------------------------------------------------------------------------
  137. void __fastcall TForm1::RotateBoxClick(TObject *Sender)
  138. {
  139. //GLAsyncTimer1->Enabled =RotateBox->Checked;
  140. GLCadencer1->Enabled = RotateBox->Checked;
  141. }
  142. //---------------------------------------------------------------------------
  143. void __fastcall TForm1::ShadowOnBoxClick(TObject *Sender)
  144. {
  145. Shadows1->Visible = ShadowOnBox->Checked;
  146. }
  147. //---------------------------------------------------------------------------
  148. void __fastcall TForm1::SoftBoxClick(TObject *Sender)
  149. {
  150. Shadows1->Soft = SoftBox->Checked;
  151. }
  152. //---------------------------------------------------------------------------
  153. void __fastcall TForm1::SkyShadBoxClick(TObject *Sender)
  154. {
  155. Shadows1->SkyShadow = SkyShadBox->Checked;
  156. }
  157. //---------------------------------------------------------------------------
  158. void __fastcall TForm1::FocalChange(TObject *Sender)
  159. {
  160. GLCamera2->FocalLength = Focal->Position;
  161. MemView->Render();
  162. Caster->Refresh();
  163. Shadows1->CastShadow();
  164. Viewer->Refresh();
  165. }
  166. //---------------------------------------------------------------------------
  167. void __fastcall TForm1::dovBarChange(TObject *Sender)
  168. {
  169. GLCamera2->DepthOfView = dovBar->Position;
  170. MemView->Render();
  171. Caster->Refresh();
  172. Shadows1->CastShadow();
  173. Viewer->Refresh();
  174. }
  175. //---------------------------------------------------------------------------
  176. void __fastcall TForm1::AlphaBarChange(TObject *Sender)
  177. {
  178. Shadows1->Color->Alpha = (float)AlphaBar->Position/256;
  179. }
  180. //---------------------------------------------------------------------------
  181. void __fastcall TForm1::GLCadencer1Progress(TObject *Sender, const double deltaTime,
  182. const double newTime)
  183. {
  184. Shadows1->CastShadow();
  185. }
  186. //---------------------------------------------------------------------------