Unit1.cpp 6.9 KB

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