fDiffuseShaderC.cpp 4.8 KB

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