Unit1.cpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include <math.h>
  4. #pragma hdrstop
  5. #include "Unit1.h"
  6. //---------------------------------------------------------------------------
  7. #pragma package(smart_init)
  8. #pragma link "GLBaseClasses"
  9. #pragma link "GLCadencer"
  10. #pragma link "GLCoordinates"
  11. #pragma link "GLCrossPlatform"
  12. #pragma link "GLCustomShader"
  13. #pragma link "GLGeomObjects"
  14. #pragma link "GLGraph"
  15. #pragma link "GLMaterial"
  16. #pragma link "GLObjects"
  17. #pragma link "GLScene"
  18. #pragma link "GLSimpleNavigation"
  19. #pragma link "GLSLDiffuseSpecularShader"
  20. #pragma link "GLSLShader"
  21. #pragma link "GLVectorFileObjects"
  22. #pragma link "GLWin32Viewer"
  23. #pragma link "GLFileSMD"
  24. #pragma link "GLFileMD2"
  25. #pragma link "GLFile3DS"
  26. #pragma link "DDSImage"
  27. #pragma link "GLFileMS3D"
  28. #pragma resource "*.dfm"
  29. TForm1 *Form1;
  30. //---------------------------------------------------------------------------
  31. __fastcall TForm1::TForm1(TComponent* Owner)
  32. : TForm(Owner)
  33. {
  34. }
  35. //---------------------------------------------------------------------------
  36. void __fastcall TForm1::FormCreate(TObject *Sender)
  37. {
  38. // First load models.
  39. SetGLSceneMediaDir();
  40. Fighter->LoadFromFile("waste.md2"); //Fighter
  41. Fighter->SwitchToAnimation(0, True);
  42. Fighter->AnimationMode = aamLoop;
  43. Fighter->Scale->Scale(3);
  44. Teapot->LoadFromFile("Teapot.3ds"); //Teapot
  45. Teapot->Scale->Scale(0.8);
  46. Sphere_big->LoadFromFile("Sphere_big.3DS"); //Sphere_big
  47. Sphere_big->Scale->Scale(70);
  48. Sphere_little->LoadFromFile("Sphere_little.3ds"); //Sphere_little
  49. Sphere_little->Scale->Scale(4);
  50. MaterialLibrary->LibMaterialByName("Earth")->Material->Texture->Image->LoadFromFile("Earth.jpg");
  51. MaterialLibrary->LibMaterialByName("Fighter")->Material->Texture->Image->LoadFromFile("Waste.jpg");
  52. MaterialLibrary->LibMaterialByName("Earth")->Shader = DiffuseSpecularShader;
  53. MaterialLibrary->LibMaterialByName("Fighter")->Shader = DiffuseSpecularShader;
  54. // This is how a shader is created in runtime.
  55. MultiLightShader = new TGLSLMLDiffuseSpecularShader(this);
  56. // Disable fog.
  57. EnableFogCheckBoxClick(NULL);
  58. }
  59. //---------------------------------------------------------------------------
  60. void __fastcall TForm1::EnableFogCheckBoxClick(TObject *Sender)
  61. {
  62. if (EnableFogCheckBox->Checked) {
  63. Viewer->Buffer->FogEnable = true;
  64. DiffuseSpecularShader->NotifyChange(Sender);
  65. MultiLightShader->NotifyChange(Sender);
  66. }
  67. else {
  68. Viewer->Buffer->FogEnable = false;
  69. DiffuseSpecularShader->NotifyChange(Sender);
  70. MultiLightShader->NotifyChange(Sender);
  71. }
  72. }
  73. //---------------------------------------------------------------------------
  74. void __fastcall TForm1::CadencerProgress(TObject *Sender, const double deltaTime,
  75. const double newTime)
  76. {
  77. Viewer->Invalidate();
  78. if (PitchRollTurnCheckBox->Checked)
  79. {
  80. Sphere_big->Pitch(deltaTime * 40);
  81. Sphere_little->Roll(deltaTime * 20);
  82. Fighter->Roll(deltaTime * 40);
  83. Teapot->Roll(-deltaTime * 10);
  84. }
  85. }
  86. //---------------------------------------------------------------------------
  87. void __fastcall TForm1::MultiLightShaderCheckBoxClick(TObject *Sender)
  88. {
  89. if (MultiLightShaderCheckBox->Checked)
  90. {
  91. MaterialLibrary->LibMaterialByName("Earth")->Shader = MultiLightShader;
  92. MaterialLibrary->LibMaterialByName("Fighter")->Shader = MultiLightShader;
  93. }
  94. else {
  95. MaterialLibrary->LibMaterialByName("Earth")->Shader = DiffuseSpecularShader;
  96. MaterialLibrary->LibMaterialByName("Fighter")->Shader = DiffuseSpecularShader;
  97. }
  98. Light2->Shining = MultiLightShaderCheckBox->Checked;
  99. LightCube2->Visible = MultiLightShaderCheckBox->Checked;
  100. }
  101. //---------------------------------------------------------------------------
  102. void __fastcall TForm1::RealisticSpecularCheckBoxClick(TObject *Sender)
  103. {
  104. DiffuseSpecularShader->RealisticSpecular = RealisticSpecularCheckBox->Checked;
  105. MultiLightShader->RealisticSpecular = RealisticSpecularCheckBox->Checked;
  106. if (DiffuseSpecularShader->RealisticSpecular) {
  107. MaterialLibrary->Materials->Items[0]->Material->FrontProperties->Shininess = 20;
  108. MaterialLibrary->Materials->Items[1]->Material->FrontProperties->Shininess = 20;
  109. }
  110. else {
  111. MaterialLibrary->Materials->Items[0]->Material->FrontProperties->Shininess = 8;
  112. MaterialLibrary->Materials->Items[1]->Material->FrontProperties->Shininess = 8;
  113. }
  114. }
  115. //---------------------------------------------------------------------------
  116. void __fastcall TForm1::LightCubeProgress(TObject *Sender, const double deltaTime,
  117. const double newTime)
  118. {
  119. if (LightMovingCheckBox->Checked)
  120. LightCube->MoveObjectAround(Camera->TargetObject, sin(newTime) * deltaTime * 10, deltaTime * 20);
  121. }
  122. //---------------------------------------------------------------------------