2
0

fPostShaderC.cpp 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include <tchar.h>
  4. #pragma hdrstop
  5. #include "fPostShaderC.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 "GLS.GeomObjects"
  12. #pragma link "GLS.Graph"
  13. #pragma link "GLS.Material"
  14. #pragma link "GLS.Objects"
  15. #pragma link "GLS.Scene"
  16. #pragma link "GLS.SimpleNavigation"
  17. #pragma link "GLS.VectorFileObjects"
  18. #pragma link "GLS.SceneViewer"
  19. #pragma link "GLS.FileMD2"
  20. #pragma link "GLS.FileMS3D"
  21. #pragma link "GLS.File3DS"
  22. #pragma link "GLSL.PostEffects"
  23. #pragma resource "*.dfm"
  24. TForm1 *Form1;
  25. //---------------------------------------------------------------------------
  26. __fastcall TForm1::TForm1(TComponent* Owner)
  27. : TForm(Owner)
  28. {
  29. }
  30. //---------------------------------------------------------------------------
  31. void __fastcall TForm1::FormCreate(TObject *Sender)
  32. {
  33. // First load models.
  34. SetGLSceneMediaDir();
  35. Fighter->LoadFromFile("waste.md2"); //Fighter
  36. Fighter->SwitchToAnimation(0, true);
  37. Fighter->AnimationMode = aamLoop;
  38. Fighter->Scale->Scale(2);
  39. Teapot->LoadFromFile("Teapot.3ds"); //Teapot (no texture coordinates)
  40. Teapot->Scale->Scale(0.8);
  41. Sphere_big->LoadFromFile("Sphere_big.3DS");
  42. Sphere_big->Scale->Scale(70);
  43. Sphere_little->LoadFromFile("Sphere_little.3ds");
  44. Sphere_little->Scale->Scale(4);
  45. // Then load textures.
  46. MaterialLibrary->LibMaterialByName("Earth")->Material->Texture->Image->LoadFromFile("Earth.jpg");
  47. MaterialLibrary->LibMaterialByName("Fighter")->Material->Texture->Image->LoadFromFile("Waste.jpg");
  48. MaterialLibrary->LibMaterialByName("Noise")->Material->Texture->Image->LoadFromFile("Flare1.bmp");
  49. // MaterialLibrary->LibMaterialByName('Noise')->Material->Texture->Image->LoadFromFile("wikiNoise.jpg");
  50. MaterialLibrary->LibMaterialByName('Mask')->Material->Texture->Image->LoadFromFile("wikiMask.jpg");
  51. // Blur Shader
  52. BlurShader = new TGLSLPostBlurShader(this);
  53. BlurShader->Enabled = false;
  54. BlurShader->Threshold = 0.001;
  55. PostShaderHolder->Shaders->Add()->Shader = BlurShader;
  56. ShaderCheckListBox->Items->AddObject("Blur Shader", BlurShader);
  57. ShaderCheckListBox->Checked[0] = false;
  58. // ThermalVision Shader
  59. ThermalVisionShader = new TGLSLPostThermalVisionShader(this);
  60. ThermalVisionShader->Enabled = false;
  61. PostShaderHolder->Shaders->Add->Shader = ThermalVisionShader;
  62. ShaderCheckListBox->Items->AddObject('Thermal Vision Shader',
  63. ThermalVisionShader);
  64. ShaderCheckListBox->Checked[1] = false;
  65. // DreamVision Shader
  66. DreamVisionShader = new TGLSLPostDreamVisionShader(this);
  67. DreamVisionShader->Enabled = false;
  68. PostShaderHolder->Shaders->Add->Shader = DreamVisionShader;
  69. ShaderCheckListBox->Items.AddObject('Dream Vision Shader', DreamVisionShader);
  70. ShaderCheckListBox->Checked[2] = false;
  71. // NightVision Shader
  72. NightVisionShader = new TGLSLPostNightVisionShader(this);
  73. NightVisionShader->Enabled = false;
  74. NightVisionShader->MaterialLibrary = MaterialLibrary;
  75. NightVisionShader->NoiseTexName = 'Noise';
  76. NightVisionShader->MaskTexName = 'Mask';
  77. NightVisionShader->UseMask = 1;
  78. PostShaderHolder->Shaders->Add.Shader = NightVisionShader;
  79. ShaderCheckListBox->Items->AddObject('Night Vision Shader', NightVisionShader);
  80. ShaderCheckListBox->Checked[3] = false;
  81. // Pixelate Shader
  82. PixelateShader = new TGLSLPostPixelateShader(this);
  83. PixelateShader->Enabled = false;
  84. PostShaderHolder->Shaders->Add->Shader = PixelateShader;
  85. ShaderCheckListBox->Items->AddObject('Pixelate Shader', PixelateShader);
  86. ShaderCheckListBox->Checked[4] = false;
  87. // Posterize Shader
  88. PosterizeShader = new TGLSLPostPosterizeShader(this);
  89. PosterizeShader->Enabled = false;
  90. PostShaderHolder->Shaders->Add->Shader = PosterizeShader;
  91. ShaderCheckListBox->Items->AddObject('Posterize Shader', PosterizeShader);
  92. ShaderCheckListBox->Checked[5] = false;
  93. // Frost Shader
  94. FrostShader = new TGLSLPostFrostShader(this);
  95. FrostShader->Enabled = false;
  96. PostShaderHolder->Shaders->Add->Shader = FrostShader;
  97. ShaderCheckListBox->Items->AddObject('Frost Shader', FrostShader);
  98. ShaderCheckListBox->Checked[6] = false;
  99. // Trouble Shader
  100. TroubleShader = new TGLSLPostTroubleShader(this);
  101. TroubleShader->Enabled = false;
  102. TroubleShader->MaterialLibrary = MaterialLibrary;
  103. TroubleShader->NoiseTexName = 'Noise';
  104. PostShaderHolder->Shaders->Add->Shader = TroubleShader;
  105. ShaderCheckListBox->Items->AddObject('Trouble Shader', TroubleShader);
  106. ShaderCheckListBox->Checked[7] = false;
  107. // Transformation Shader
  108. TransformationShader = new TGLCGPostTransformationShader(this);
  109. TransformationShader->TransformationTexture = MaterialLibrary->LibMaterialByName("Noise")->Material->Texture;
  110. PostShaderHolder->Shaders->Add()->Shader = TransformationShader;
  111. ShaderCheckListBox->Items->AddObject("Transformation Shader", TransformationShader);
  112. ShaderCheckListBox->Checked[1] = true;
  113. }
  114. //---------------------------------------------------------------------------
  115. void __fastcall TForm1::CadencerProgress(TObject *Sender, const double deltaTime,
  116. const double newTime)
  117. {
  118. Viewer->Invalidate();
  119. if (TurnPitchrollCheckBox->Checked) {
  120. Fighter->Roll(20 * deltaTime);
  121. Sphere_big->Pitch(40 * deltaTime);
  122. Sphere_big->Turn(40 * deltaTime);
  123. Sphere_little->Roll(40 * deltaTime);
  124. Teapot->Roll(-20 * deltaTime);
  125. }
  126. if NightVisionShader->Enabled
  127. NightVisionShader->ElapsedTime = newTime; // 20*deltaTime;
  128. }
  129. //---------------------------------------------------------------------------
  130. void __fastcall TForm1::LightCubeProgress(TObject *Sender, const double deltaTime,
  131. const double newTime)
  132. {
  133. if (LightMovingCheckBox->Checked)
  134. LightCube->MoveObjectAround(Camera->TargetObject, sin(newTime) * deltaTime * 10, deltaTime * 20);
  135. }
  136. //---------------------------------------------------------------------------
  137. void __fastcall TForm1::ShaderCheckListBoxClick(TObject *Sender)
  138. {
  139. int I;
  140. if (ShaderCheckListBox->Items->Count != 0)
  141. for (I = 0; I < ShaderCheckListBox->Items->Count - 1; I++) {
  142. /// TGLShader(ShaderCheckListBox->Items->Objects[I])->Enabled = ShaderCheckListBox->Checked[I];
  143. }
  144. }
  145. //---------------------------------------------------------------------------
  146. void __fastcall TForm1::tbBlurValueChange(TObject *Sender)
  147. {
  148. if (BigBlurThicknessCheckbox->Checked)
  149. BlurShader->Threshold = 0.005;
  150. else
  151. BlurShader->Threshold = 0.2;
  152. //---------------------------------------------------------------------------
  153. void __fastcall TForm1::tbDreamThresholdChange(TObject *Sender)
  154. {
  155. //
  156. }
  157. //---------------------------------------------------------------------------
  158. void __fastcall TForm1::tbThermalThresholdChange(TObject *Sender)
  159. {
  160. //
  161. }
  162. //---------------------------------------------------------------------------
  163. void __fastcall TForm1::tbThermalIntensityChange(TObject *Sender)
  164. {
  165. //
  166. }
  167. //---------------------------------------------------------------------------
  168. void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
  169. {
  170. Cadencer->Enabled = false;
  171. }
  172. }
  173. //---------------------------------------------------------------------------