2
0

fCgBombShaderD.pas 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. unit fCgBombShaderD;
  2. interface
  3. uses
  4. Winapi.OpenGL,
  5. System.SysUtils,
  6. System.Classes,
  7. Vcl.Graphics,
  8. Vcl.Controls,
  9. Vcl.Forms,
  10. Vcl.StdCtrls,
  11. Vcl.ComCtrls,
  12. Vcl.ExtCtrls,
  13. Vcl.Imaging.Jpeg,
  14. GLS.Scene,
  15. GLS.Objects,
  16. GLS.SceneViewer,
  17. GLS.Texture,
  18. GLS.Cadencer,
  19. GLS.SimpleNavigation,
  20. GLS.VectorFileObjects,
  21. GLS.File3DS,
  22. GLS.Graph,
  23. GLS.Material,
  24. GLScene.VectorGeometry,
  25. GLS.Coordinates,
  26. GLS.BaseClasses,
  27. GLScene.Utils,
  28. GLS.FileMD2,
  29. GLS.CgBombShader;
  30. type
  31. TFormCgBombShader = class(TForm)
  32. GLScene1: TGLScene;
  33. GLCamera1: TGLCamera;
  34. GLLightSource1: TGLLightSource;
  35. GLMaterialLibrary1: TGLMaterialLibrary;
  36. GLCadencer1: TGLCadencer;
  37. Panel1: TPanel;
  38. Splitter1: TSplitter;
  39. Panel9: TPanel;
  40. GLSceneViewer1: TGLSceneViewer;
  41. Timer1: TTimer;
  42. GLXYZGrid1: TGLXYZGrid;
  43. GLDummyCube1: TGLDummyCube;
  44. ffTeapot: TGLFreeForm;
  45. ffSphere1: TGLFreeForm;
  46. ComboBox1: TComboBox;
  47. GroupBox1: TGroupBox;
  48. CheckBox1: TCheckBox;
  49. CheckBox2: TCheckBox;
  50. CheckBox3: TCheckBox;
  51. ffSphere2: TGLFreeForm;
  52. CheckBox4: TCheckBox;
  53. JustATestCube: TGLCube;
  54. ShaderEnabledCheckBox: TCheckBox;
  55. GLSimpleNavigation1: TGLSimpleNavigation;
  56. TrackBar1: TTrackBar;
  57. TrackBar2: TTrackBar;
  58. TrackBar3: TTrackBar;
  59. TrackBar4: TTrackBar;
  60. TrackBar5: TTrackBar;
  61. TrackBar6: TTrackBar;
  62. TrackBar7: TTrackBar;
  63. TrackBar8: TTrackBar;
  64. TrackBar9: TTrackBar;
  65. GLActor1: TGLActor;
  66. procedure FormCreate(Sender: TObject);
  67. procedure ComboBox1Change(Sender: TObject);
  68. procedure GLCadencer1Progress(Sender: TObject;
  69. const DeltaTime, newTime: Double);
  70. procedure CheckBox1Click(Sender: TObject);
  71. procedure ShaderEnabledCheckBoxClick(Sender: TObject);
  72. procedure TrackBar2Change(Sender: TObject);
  73. procedure TrackBar3Change(Sender: TObject);
  74. procedure TrackBar4Change(Sender: TObject);
  75. procedure TrackBar5Change(Sender: TObject);
  76. procedure TrackBar6Change(Sender: TObject);
  77. procedure TrackBar7Change(Sender: TObject);
  78. procedure TrackBar8Change(Sender: TObject);
  79. procedure TrackBar9Change(Sender: TObject);
  80. procedure TrackBar1Change(Sender: TObject);
  81. private
  82. public
  83. mx, my: Integer;
  84. procedure ResetPositions;
  85. end;
  86. var
  87. FormCgBombShader: TFormCgBombShader;
  88. MyShader: TCgBombShader;
  89. implementation
  90. {$R *.dfm}
  91. procedure TFormCgBombShader.FormCreate(Sender: TObject);
  92. begin
  93. var Path: TFileName := GetCurrentAssetPath();
  94. // First load static models from asset directory
  95. SetCurrentDir(Path + '\model');
  96. ffTeapot.LoadFromFile('Teapot.3ds');
  97. ffSphere1.LoadFromFile('Sphere.3DS');
  98. ffSphere2.LoadFromFile('Sphere_big.3DS');
  99. ffSphere2.Scale.Scale(20);
  100. // Second loading dynamic models with texture and animation
  101. SetCurrentDir(Path + '\modelext');
  102. GLActor1.LoadFromFile('waste.md2'); // Fighter
  103. GLActor1.SwitchToAnimation(0, True);
  104. GLActor1.AnimationMode := aamLoop;
  105. GLActor1.Scale.Scale(0.05);
  106. GLMaterialLibrary1.LibMaterialByName('FighterTexture').
  107. Material.Texture.Image.LoadFromFile('waste.jpg');
  108. // Next loading other textures
  109. SetCurrentDir(Path + '\texture');
  110. GLMaterialLibrary1.LibMaterialByName('marbles1')
  111. .Material.Texture.Image.LoadFromFile('beigemarble.jpg');
  112. GLMaterialLibrary1.LibMaterialByName('marbles2')
  113. .Material.Texture.Image.LoadFromFile('marbletiles.jpg');
  114. GLMaterialLibrary1.LibMaterialByName('snow')
  115. .Material.Texture.Image.LoadFromFile('snow512.jpg');
  116. GLMaterialLibrary1.LibMaterialByName('Fire')
  117. .Material.Texture.Image.LoadFromFile('FireGrade.png');
  118. MyShader := TCgBombShader.Create(Self);
  119. MyShader.MainTexture := GLMaterialLibrary1.LibMaterialByName('FighterTexture')
  120. .Material.Texture;
  121. MyShader.Cadencer := GLCadencer1;
  122. // All models are linked with this material
  123. GLMaterialLibrary1.LibMaterialByName('LibMaterial').Shader := MyShader;
  124. ResetPositions;
  125. ComboBox1Change(Self);
  126. end;
  127. procedure TFormCgBombShader.ComboBox1Change(Sender: TObject);
  128. begin
  129. MyShader.GradientTexture := GLMaterialLibrary1.LibMaterialByName
  130. (ComboBox1.Text).Material.Texture;
  131. end;
  132. procedure TFormCgBombShader.GLCadencer1Progress(Sender: TObject;
  133. const DeltaTime, newTime: Double);
  134. begin
  135. GLSceneViewer1.Invalidate();
  136. end;
  137. procedure TFormCgBombShader.ResetPositions;
  138. begin
  139. TrackBar1.Position := Round(InterpolateCombinedSafe(0.01, 10,
  140. MyShader.Displacement, 0, 100, 1, itLinear));
  141. TrackBar2.Position := Round(InterpolateCombinedSafe(-0.13, 10,
  142. MyShader.Sharpness, 0, 100, 1, itLinear));
  143. TrackBar3.Position := Round(InterpolateCombinedSafe(0.01, 6,
  144. MyShader.ColorSharpness, 0, 100, 1, itLinear));
  145. TrackBar4.Position := Round(InterpolateCombinedSafe(0.1, 1, MyShader.Speed, 0,
  146. 100, 1, itLinear));
  147. TrackBar5.Position := Round(InterpolateCombinedSafe(0.01, 8,
  148. MyShader.TurbDensity, 0, 100, 1, itLinear));
  149. TrackBar6.Position := Round(InterpolateCombinedSafe(-0.5, 0.5,
  150. MyShader.ColorRange, 0, 100, 1, itLinear));
  151. TrackBar7.Position := Round(InterpolateCombinedSafe(0, 1, MyShader.Alpha, 0,
  152. 100, 1, itLinear));
  153. TrackBar8.Position := Round(InterpolateCombinedSafe(0, 2,
  154. MyShader.MainTextureShare, 0, 100, 1, itLinear));
  155. TrackBar9.Position := Round(InterpolateCombinedSafe(0, 2,
  156. MyShader.GradientTextureShare, 0, 100, 1, itLinear));
  157. end;
  158. procedure TFormCgBombShader.CheckBox1Click(Sender: TObject);
  159. begin
  160. GLActor1.Visible := CheckBox1.Checked;
  161. ffTeapot.Visible := CheckBox2.Checked;
  162. ffSphere1.Visible := CheckBox3.Checked;
  163. ffSphere2.Visible := CheckBox4.Checked;
  164. end;
  165. procedure TFormCgBombShader.ShaderEnabledCheckBoxClick(Sender: TObject);
  166. begin
  167. MyShader.Enabled := ShaderEnabledCheckBox.Checked;
  168. end;
  169. procedure TFormCgBombShader.TrackBar1Change(Sender: TObject);
  170. begin
  171. if MyShader = nil then
  172. Exit;
  173. MyShader.Displacement := InterpolateCombinedSafe(0, 100, TrackBar1.Position,
  174. 0.01, 10, 1, itLinear);
  175. end;
  176. procedure TFormCgBombShader.TrackBar2Change(Sender: TObject);
  177. begin
  178. MyShader.Sharpness := InterpolateCombinedSafe(0, 100, TrackBar2.Position,
  179. -0.13, 10, 1, itLinear);
  180. end;
  181. procedure TFormCgBombShader.TrackBar3Change(Sender: TObject);
  182. begin
  183. MyShader.ColorSharpness := InterpolateCombinedSafe(0, 100, TrackBar3.Position,
  184. 0.01, 6, 1, itLinear);
  185. end;
  186. procedure TFormCgBombShader.TrackBar4Change(Sender: TObject);
  187. begin
  188. MyShader.Speed := InterpolateCombinedSafe(0, 100, TrackBar4.Position, 0.1, 1,
  189. 1, itLinear);
  190. end;
  191. procedure TFormCgBombShader.TrackBar5Change(Sender: TObject);
  192. begin
  193. MyShader.TurbDensity := InterpolateCombinedSafe(0, 100, TrackBar5.Position,
  194. 0.1, 8, 1, itLinear);
  195. end;
  196. procedure TFormCgBombShader.TrackBar6Change(Sender: TObject);
  197. begin
  198. MyShader.ColorRange := InterpolateCombinedSafe(0, 100, TrackBar6.Position,
  199. -0.5, 0.5, 1, itLinear);
  200. end;
  201. procedure TFormCgBombShader.TrackBar7Change(Sender: TObject);
  202. begin
  203. MyShader.Alpha := InterpolateCombinedSafe(0, 100, TrackBar7.Position, 0, 1, 1,
  204. itLinear);
  205. end;
  206. procedure TFormCgBombShader.TrackBar8Change(Sender: TObject);
  207. begin
  208. MyShader.MainTextureShare := InterpolateCombinedSafe(0, 100,
  209. TrackBar8.Position, 0, 2, 1, itLinear);
  210. end;
  211. procedure TFormCgBombShader.TrackBar9Change(Sender: TObject);
  212. begin
  213. MyShader.GradientTextureShare := InterpolateCombinedSafe(0, 100,
  214. TrackBar9.Position, 0, 2, 1, itLinear);
  215. end;
  216. end.