fDiffuseSpecularShaderC.cpp 4.7 KB

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