fdShaderLab.pas 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515
  1. unit fdShaderLab;
  2. interface
  3. uses
  4. Winapi.Windows,
  5. Winapi.Messages,
  6. Winapi.OpenGL,
  7. System.SysUtils,
  8. System.Variants,
  9. System.Classes,
  10. System.Math,
  11. Vcl.Graphics,
  12. Vcl.Controls,
  13. Vcl.Forms,
  14. Vcl.Dialogs,
  15. Vcl.StdCtrls,
  16. Vcl.ExtCtrls,
  17. Vcl.ComCtrls,
  18. Vcl.ExtDlgs,
  19. // Picture FileFormats
  20. Vcl.Imaging.Jpeg,
  21. Vcl.Imaging.PngImage,
  22. Stage.VectorTypes,
  23. GLS.VectorLists,
  24. Stage.VectorGeometry,
  25. GLS.BaseClasses,
  26. GLS.PersistentClasses,
  27. GLS.XCollection,
  28. GLS.Material,
  29. GLS.Scene,
  30. GLS.SceneViewer,
  31. GLS.VectorFileObjects,
  32. GLS.Objects,
  33. GLS.Texture,
  34. GLS.Context,
  35. GLS.Cadencer,
  36. GLS.Coordinates,
  37. GLS.State,
  38. GLS.RenderContextInfo,
  39. Stage.TextureFormat,
  40. GLS.Color,
  41. GLS.Graphics,
  42. GLS.MeshUtils,
  43. Stage.Utils,
  44. GLS.GeomObjects,
  45. GLS.SimpleNavigation,
  46. GLS.HUDObjects,
  47. GLSL.CustomShader,
  48. GLSL.ShapeShaders;
  49. type
  50. TFormShaderLab = class(TForm)
  51. Panel1: TPanel;
  52. Viewer: TGLSceneViewer;
  53. MaterialLibrary: TGLMaterialLibrary;
  54. GLScene1: TGLScene;
  55. Cadencer: TGLCadencer;
  56. World: TGLDummyCube;
  57. Camera: TGLCamera;
  58. LightSource1: TGLLightSource;
  59. Sphere: TGLSphere;
  60. PageControl: TPageControl;
  61. TabSheet1: TTabSheet;
  62. chkAnimScene: TCheckBox;
  63. chkLightmoving: TCheckBox;
  64. chkFurShader: TCheckBox;
  65. LightCube1: TGLDummyCube;
  66. lblFurDistance: TLabel;
  67. tbFurLength: TTrackBar;
  68. TabSheet2: TTabSheet;
  69. lblLatticeScaleX: TLabel;
  70. tbLatticeScaleX: TTrackBar;
  71. lblLatticeThresholdX: TLabel;
  72. tbLatticeThresholdX: TTrackBar;
  73. chkLatticeShader: TCheckBox;
  74. lblLatticeScaleY: TLabel;
  75. tbLatticeScaleY: TTrackBar;
  76. tbLatticeThresholdY: TTrackBar;
  77. TabSheet3: TTabSheet;
  78. chkErosionShader: TCheckBox;
  79. FreeForm: TGLFreeForm;
  80. TabSheet4: TTabSheet;
  81. chkIvoryShader: TCheckBox;
  82. LightCube2: TGLDummyCube;
  83. LightSource2: TGLLightSource;
  84. Label10: TLabel;
  85. Label11: TLabel;
  86. cbxFurBlendSrc: TComboBox;
  87. cbxFurBlendDest: TComboBox;
  88. Objects: TGLDummyCube;
  89. lblFurPassCount1: TLabel;
  90. tbFurPassCount: TTrackBar;
  91. Label4: TLabel;
  92. tbLatticeSpecularPower: TTrackBar;
  93. Label5: TLabel;
  94. tbLatticeLightPower: TTrackBar;
  95. TabSheet5: TTabSheet;
  96. chkGoochShader: TCheckBox;
  97. Torus: TGLTorus;
  98. lblFurLength: TLabel;
  99. Label7: TLabel;
  100. tbFurMaxLength: TTrackBar;
  101. lblFurMaxLength: TLabel;
  102. lblFurPassCount: TLabel;
  103. chkFurRandomLength: TCheckBox;
  104. Label12: TLabel;
  105. tbFurDensity: TTrackBar;
  106. lblFurDensity: TLabel;
  107. Label6: TLabel;
  108. tbFurLightPower: TTrackBar;
  109. lblFurLightPower: TLabel;
  110. Label8: TLabel;
  111. Label9: TLabel;
  112. Shape1: TShape;
  113. Shape2: TShape;
  114. ColorDialog: TColorDialog;
  115. Label13: TLabel;
  116. Shape3: TShape;
  117. Label14: TLabel;
  118. Shape4: TShape;
  119. Label15: TLabel;
  120. Shape5: TShape;
  121. Label16: TLabel;
  122. Shape6: TShape;
  123. Label17: TLabel;
  124. Shape7: TShape;
  125. Label18: TLabel;
  126. tbGoochDFactor: TTrackBar;
  127. lblGoochDFactor: TLabel;
  128. Label20: TLabel;
  129. tbGoochWFactor: TTrackBar;
  130. lblGoochWFactor: TLabel;
  131. Label22: TLabel;
  132. tbGoochCFactor: TTrackBar;
  133. lblGoochCFactor: TLabel;
  134. Label24: TLabel;
  135. tbGoochAFactor: TTrackBar;
  136. lblGoochAFactor: TLabel;
  137. Label26: TLabel;
  138. tbGoochSFactor: TTrackBar;
  139. lblGoochSFactor: TLabel;
  140. Label1: TLabel;
  141. tbErosionFactor: TTrackBar;
  142. lblErosionFactor: TLabel;
  143. Label3: TLabel;
  144. tberosionScale: TTrackBar;
  145. lblErosionScale: TLabel;
  146. Label25: TLabel;
  147. tbErosionIFactor1: TTrackBar;
  148. lblErosionIFactor1: TLabel;
  149. Label28: TLabel;
  150. tbErosionIFactor2: TTrackBar;
  151. lblerosionIFactor2: TLabel;
  152. Label2: TLabel;
  153. tbErosionAmbientF: TTrackBar;
  154. lblErosionAmbientF: TLabel;
  155. Label27: TLabel;
  156. tbErosionDiffuseF: TTrackBar;
  157. lblErosionDiffuseF: TLabel;
  158. Label30: TLabel;
  159. tbErosionSpecularF: TTrackBar;
  160. lblErosionSpecularF: TLabel;
  161. Label32: TLabel;
  162. tbErosionSpecularR: TTrackBar;
  163. lblErosionSpecularR: TLabel;
  164. Label34: TLabel;
  165. tbErosionAnisoR: TTrackBar;
  166. lblErosionAnisoR: TLabel;
  167. Label36: TLabel;
  168. shAmbientErosion: TShape;
  169. shSpecularErosion: TShape;
  170. Label37: TLabel;
  171. lblLatticeThresholdY: TLabel;
  172. lblLatticeSpecularPower: TLabel;
  173. lblLatticeLightPower: TLabel;
  174. Label23: TLabel;
  175. Label29: TLabel;
  176. Label31: TLabel;
  177. Label33: TLabel;
  178. Label35: TLabel;
  179. Shape10: TShape;
  180. Label38: TLabel;
  181. Shape11: TShape;
  182. Label39: TLabel;
  183. Shape12: TShape;
  184. cbxGootchBlendMode: TComboBox;
  185. Label40: TLabel;
  186. tbGoochAlpha: TTrackBar;
  187. Label41: TLabel;
  188. lblGoochAlpha: TLabel;
  189. TabSheet6: TTabSheet;
  190. Label19: TLabel;
  191. tbSemDiffuseF: TTrackBar;
  192. lblSemDiffuseF: TLabel;
  193. Label42: TLabel;
  194. tbSemAmbientF: TTrackBar;
  195. lblSemAmbientF: TLabel;
  196. Label44: TLabel;
  197. tbSemSpecularF: TTrackBar;
  198. lblSemSpecularF: TLabel;
  199. Label46: TLabel;
  200. Shape13: TShape;
  201. Label47: TLabel;
  202. Shape14: TShape;
  203. chkSEMShader: TCheckBox;
  204. Displacement: TTabSheet;
  205. chkVDShader: TCheckBox;
  206. Label21: TLabel;
  207. tbVDDiffuseF: TTrackBar;
  208. Label43: TLabel;
  209. tbVDAmbientF: TTrackBar;
  210. Label45: TLabel;
  211. tbVDSpecularF: TTrackBar;
  212. lblVDSpecularF: TLabel;
  213. lblVDAmbientF: TLabel;
  214. lblVDDiffuseF: TLabel;
  215. Label51: TLabel;
  216. Shape15: TShape;
  217. Label52: TLabel;
  218. Shape16: TShape;
  219. chkVDAnimate: TCheckBox;
  220. Label48: TLabel;
  221. tbVDNoise: TTrackBar;
  222. lblVDNoise: TLabel;
  223. Label49: TLabel;
  224. tbVDPeriod: TTrackBar;
  225. lblVDPeriod: TLabel;
  226. Label53: TLabel;
  227. tbVDNScale: TTrackBar;
  228. lblVDNScale: TLabel;
  229. Label55: TLabel;
  230. tbVDTurb: TTrackBar;
  231. lblVDTurb: TLabel;
  232. Label57: TLabel;
  233. tbVDDispScale: TTrackBar;
  234. lblVDDispScale: TLabel;
  235. Label50: TLabel;
  236. tbVDTimeF: TTrackBar;
  237. lblVDTimeF: TLabel;
  238. cbxObjects: TComboBox;
  239. Label54: TLabel;
  240. Button2: TButton;
  241. Button3: TButton;
  242. GLSimpleNavigation1: TGLSimpleNavigation;
  243. Button1: TButton;
  244. Button4: TButton;
  245. Button5: TButton;
  246. Button6: TButton;
  247. Button7: TButton;
  248. Button8: TButton;
  249. Button9: TButton;
  250. OpenPictureDialog: TOpenPictureDialog;
  251. TabSheet7: TTabSheet;
  252. Label56: TLabel;
  253. Label58: TLabel;
  254. tbGlassDepth: TTrackBar;
  255. tbGlassMix: TTrackBar;
  256. Label59: TLabel;
  257. Shape17: TShape;
  258. lblGlassDepth: TLabel;
  259. lblGlassMix: TLabel;
  260. Button10: TButton;
  261. chkGlassShader: TCheckBox;
  262. Label60: TLabel;
  263. tbGlassAlpha: TTrackBar;
  264. lblGlassAlpha: TLabel;
  265. Label61: TLabel;
  266. cbxGlassBlendSrc: TComboBox;
  267. Label62: TLabel;
  268. cbxGlassBlendDst: TComboBox;
  269. ScreenBackGround: TGLHUDSprite;
  270. chkBackgroundImg: TCheckBox;
  271. Button11: TButton;
  272. Label63: TLabel;
  273. edtFurGravityX: TEdit;
  274. edtFurGravityY: TEdit;
  275. edtFurGravityZ: TEdit;
  276. TabSheet8: TTabSheet;
  277. chkToonShader: TCheckBox;
  278. Label64: TLabel;
  279. tbToonHighlightSize: TTrackBar;
  280. lblToonHighlightSize: TLabel;
  281. Label66: TLabel;
  282. tbToonMidSize: TTrackBar;
  283. lblToonMidSize: TLabel;
  284. Label68: TLabel;
  285. tbToonShadowSize: TTrackBar;
  286. lblToonShadowSize: TLabel;
  287. Label70: TLabel;
  288. tbToonOutlineWidth: TTrackBar;
  289. lblToonOutlineWidth: TLabel;
  290. Label72: TLabel;
  291. Shape18: TShape;
  292. Label73: TLabel;
  293. Shape19: TShape;
  294. Label74: TLabel;
  295. Shape20: TShape;
  296. Label75: TLabel;
  297. Shape21: TShape;
  298. Label76: TLabel;
  299. Shape22: TShape;
  300. Teapot: TGLTeapot;
  301. procedure FormCreate(Sender: TObject);
  302. procedure FormDestroy(Sender: TObject);
  303. procedure chkFurShaderClick(Sender: TObject);
  304. procedure CadencerProgress(Sender: TObject; const deltaTime, newTime: Double);
  305. procedure LightCube1Progress(Sender: TObject; const deltaTime, newTime: Double);
  306. procedure tbFurLengthChange(Sender: TObject);
  307. procedure tbLatticeScaleXChange(Sender: TObject);
  308. procedure chkLatticeShaderClick(Sender: TObject);
  309. procedure tbLatticeScaleYChange(Sender: TObject);
  310. procedure tbLatticeThresholdXChange(Sender: TObject);
  311. procedure tbLatticeThresholdYChange(Sender: TObject);
  312. procedure chkIvoryShaderClick(Sender: TObject);
  313. procedure LightCube2Progress(Sender: TObject; const deltaTime, newTime: Double);
  314. procedure cbxFurBlendDestChange(Sender: TObject);
  315. procedure cbxFurBlendSrcChange(Sender: TObject);
  316. procedure tbFurPassCountChange(Sender: TObject);
  317. procedure chkGoochShaderClick(Sender: TObject);
  318. procedure tbFurMaxLengthChange(Sender: TObject);
  319. procedure tbFurDensityChange(Sender: TObject);
  320. procedure chkFurRandomLengthClick(Sender: TObject);
  321. procedure tbFurLightPowerChange(Sender: TObject);
  322. procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  323. X, Y: Integer);
  324. procedure Shape2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  325. X, Y: Integer);
  326. procedure Shape3MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  327. X, Y: Integer);
  328. procedure Shape4MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  329. X, Y: Integer);
  330. procedure Shape5MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  331. X, Y: Integer);
  332. procedure Shape6MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  333. X, Y: Integer);
  334. procedure Shape7MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  335. X, Y: Integer);
  336. procedure tbGoochDFactorChange(Sender: TObject);
  337. procedure tbGoochWFactorChange(Sender: TObject);
  338. procedure tbGoochCFactorChange(Sender: TObject);
  339. procedure tbGoochAFactorChange(Sender: TObject);
  340. procedure tbGoochSFactorChange(Sender: TObject);
  341. procedure cbxGoochBlendSrcChange(Sender: TObject);
  342. procedure cbxGoochBlendDstChange(Sender: TObject);
  343. procedure chkErosionShaderClick(Sender: TObject);
  344. procedure tbErosionFactorChange(Sender: TObject);
  345. procedure tberosionScaleChange(Sender: TObject);
  346. procedure tbErosionIFactor1Change(Sender: TObject);
  347. procedure tbErosionIFactor2Change(Sender: TObject);
  348. procedure tbErosionDiffuseFChange(Sender: TObject);
  349. procedure tbErosionAmbientFChange(Sender: TObject);
  350. procedure tbErosionSpecularFChange(Sender: TObject);
  351. procedure tbErosionSpecularRChange(Sender: TObject);
  352. procedure tbErosionAnisoRChange(Sender: TObject);
  353. procedure shAmbientErosionMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  354. X, Y: Integer);
  355. procedure shSpecularErosionMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  356. X, Y: Integer);
  357. procedure tbLatticeSpecularPowerChange(Sender: TObject);
  358. procedure tbLatticeLightPowerChange(Sender: TObject);
  359. procedure Shape10MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  360. X, Y: Integer);
  361. procedure Shape11MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  362. X, Y: Integer);
  363. procedure Shape12MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  364. X, Y: Integer);
  365. procedure cbxGootchBlendModeChange(Sender: TObject);
  366. procedure tbGoochAlphaChange(Sender: TObject);
  367. procedure chkSEMShaderClick(Sender: TObject);
  368. procedure tbSemDiffuseFChange(Sender: TObject);
  369. procedure tbSemAmbientFChange(Sender: TObject);
  370. procedure tbSemSpecularFChange(Sender: TObject);
  371. procedure Shape13MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  372. X, Y: Integer);
  373. procedure Shape14MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  374. X, Y: Integer);
  375. procedure chkVDShaderClick(Sender: TObject);
  376. procedure tbVDDiffuseFChange(Sender: TObject);
  377. procedure tbVDAmbientFChange(Sender: TObject);
  378. procedure tbVDSpecularFChange(Sender: TObject);
  379. procedure tbVDNoiseChange(Sender: TObject);
  380. procedure tbVDPeriodChange(Sender: TObject);
  381. procedure tbVDNScaleChange(Sender: TObject);
  382. procedure tbVDTurbChange(Sender: TObject);
  383. procedure tbVDDispScaleChange(Sender: TObject);
  384. procedure tbVDTimeFChange(Sender: TObject);
  385. procedure Button2Click(Sender: TObject);
  386. procedure cbxObjectsChange(Sender: TObject);
  387. procedure Button3Click(Sender: TObject);
  388. procedure Button8Click(Sender: TObject);
  389. procedure Button5Click(Sender: TObject);
  390. procedure Button6Click(Sender: TObject);
  391. procedure Button1Click(Sender: TObject);
  392. procedure Button4Click(Sender: TObject);
  393. procedure Button9Click(Sender: TObject);
  394. procedure chkGlassShaderClick(Sender: TObject);
  395. procedure Shape17MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  396. X, Y: Integer);
  397. procedure tbGlassDepthChange(Sender: TObject);
  398. procedure tbGlassMixChange(Sender: TObject);
  399. procedure Button10Click(Sender: TObject);
  400. procedure tbGlassAlphaChange(Sender: TObject);
  401. procedure cbxGlassBlendSrcChange(Sender: TObject);
  402. procedure cbxGlassBlendDstChange(Sender: TObject);
  403. procedure FormResize(Sender: TObject);
  404. procedure Button11Click(Sender: TObject);
  405. procedure chkBackgroundImgClick(Sender: TObject);
  406. procedure EditFloatKeyPress(Sender: TObject; var Key: Char);
  407. procedure edtFurGravityXChange(Sender: TObject);
  408. procedure edtFurGravityYChange(Sender: TObject);
  409. procedure edtFurGravityZChange(Sender: TObject);
  410. procedure chkToonShaderClick(Sender: TObject);
  411. procedure tbToonHighlightSizeChange(Sender: TObject);
  412. procedure tbToonMidSizeChange(Sender: TObject);
  413. procedure tbToonShadowSizeChange(Sender: TObject);
  414. procedure tbToonOutlineWidthChange(Sender: TObject);
  415. procedure Shape18MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  416. X, Y: Integer);
  417. procedure Shape19MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  418. X, Y: Integer);
  419. procedure Shape20MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  420. X, Y: Integer);
  421. procedure Shape21MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  422. X, Y: Integer);
  423. procedure Shape22MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  424. X, Y: Integer);
  425. public
  426. Path: TFileName;
  427. end;
  428. var
  429. FormShaderLab: TFormShaderLab;
  430. mx, my: Integer;
  431. FurShader: TGLSLFurShader;
  432. LatticeShader: TGLSLLatticeShader;
  433. IvoryShader: TGLSLIvoryShader;
  434. GoochShader: TGLSLSimpleGoochShader;
  435. ErosionShader: TGLSLSimpleErosionShader;
  436. SEMShader: TGLSLSemShader;
  437. VertexDisplacementShader: TGLSLVertexDisplacementShader;
  438. GlassShader: TGLSLGlassShader;
  439. ToonShader: TGLSLToonShader;
  440. // DimpleShader
  441. // WoodShader
  442. // PhongShader
  443. // CookTorrenceShader
  444. // OreilNayar
  445. i, j: Integer;
  446. v: Single;
  447. implementation // =============================================================
  448. {$R *.dfm}
  449. uses
  450. GLS.FileTGA,
  451. GLS.FileOBJ,
  452. GLS.FileSTL,
  453. GLS.FileLWO,
  454. GLS.FileQ3BSP,
  455. GLS.FileOCT,
  456. GLS.FileMS3D,
  457. GLS.FileNMF,
  458. GLS.FileMD3,
  459. GLS.File3DS,
  460. GLS.FileMD2,
  461. GLS.FileSMD,
  462. GLS.FilePLY,
  463. GLS.FileGTS,
  464. GLS.FileVRML,
  465. GLS.FileMD5,
  466. GLS.FileTIN,
  467. GLS.FileDXF,
  468. GLS.FileGRD;
  469. procedure TFormShaderLab.FormCreate(Sender: TObject);
  470. begin
  471. Path := GetCurrentAssetPath();
  472. SetCurrentDir(Path + '\model');
  473. Screen.Cursor := crHourGlass;
  474. // FreeForm.IgnoreMissingTextures := True;
  475. FreeForm.LoadFromFile('suzanne.obj');
  476. FreeForm.Visible := False;
  477. // Then load textures
  478. SetCurrentDir(Path + '\texture');
  479. MaterialLibrary.LibMaterialByName('ShaderMaterial').Material.Texture.Image.LoadFromFile
  480. ('bigtiger.jpg');
  481. MaterialLibrary.LibMaterialByName('BackgroundTex').Material.Texture.Image.LoadFromFile
  482. ('randal.jpg');
  483. FreeForm.Material.MaterialLibrary := MaterialLibrary;
  484. FreeForm.Material.LibMaterialName := 'ShaderMaterial';
  485. Torus.Material.MaterialLibrary := MaterialLibrary;
  486. Torus.Material.LibMaterialName := 'ShaderMaterial';
  487. Torus.Visible := False;
  488. Sphere.Material.MaterialLibrary := MaterialLibrary;
  489. Sphere.Material.LibMaterialName := 'ShaderMaterial';
  490. Sphere.Visible := False;
  491. MaterialLibrary.LibMaterialByName('MainTexture').Material.Texture.Image.LoadFromFile
  492. ('bigtiger.jpg');
  493. // My Shader
  494. FurShader := TGLSLFurShader.Create(self);
  495. MaterialLibrary.LibMaterialByName('NoiseTexture').Material.Texture.Image.LoadFromFile('fur.tga');
  496. FurShader.MaterialLibrary := MaterialLibrary;
  497. FurShader.MainTextureName := 'MainTexture';
  498. FurShader.NoiseTextureName := 'NoiseTexture';
  499. FurShader.Gravity.X := 0;
  500. FurShader.Gravity.Y := -2.0;
  501. FurShader.Gravity.Z := 0;
  502. FurShader.Enabled := False;
  503. LatticeShader := TGLSLLatticeShader.Create(self);
  504. LatticeShader.MaterialLibrary := MaterialLibrary;
  505. LatticeShader.MainTextureName := 'MainTexture';
  506. LatticeShader.Enabled := False;
  507. ErosionShader := TGLSLSimpleErosionShader.Create(self);
  508. MaterialLibrary.LibMaterialByName('ErosionNoiseTexture').Material.Texture.Image.LoadFromFile
  509. ('ErosionNoise.tga');
  510. MaterialLibrary.LibMaterialByName('ErosionMainTexture').Material.Texture.Image.LoadFromFile
  511. ('eroded_scratch_metal_texture.jpg');
  512. MaterialLibrary.LibMaterialByName('ErosionTexture').Material.Texture.Image.LoadFromFile
  513. ('rust_eroded_scratch_metal_texture.jpg');
  514. ErosionShader.MaterialLibrary := MaterialLibrary;
  515. ErosionShader.MainTextureName := 'ErosionMainTexture';
  516. ErosionShader.ErosionTextureName := 'ErosionTexture';
  517. ErosionShader.NoiseTextureName := 'ErosionNoiseTexture';
  518. ErosionShader.Enabled := False;
  519. IvoryShader := TGLSLIvoryShader.Create(self);
  520. IvoryShader.Enabled := False;
  521. GoochShader := TGLSLSimpleGoochShader.Create(self);
  522. GoochShader.Enabled := False;
  523. SEMShader := TGLSLSemShader.Create(self);
  524. MaterialLibrary.LibMaterialByName('MatCapTexture').Material.Texture.Image.LoadFromFile
  525. ('metal_matcap.jpg');
  526. SEMShader.MaterialLibrary := MaterialLibrary;
  527. SEMShader.MainTextureName := 'MatCapTexture';
  528. SEMShader.Enabled := False;
  529. VertexDisplacementShader := TGLSLVertexDisplacementShader.Create(self);
  530. MaterialLibrary.LibMaterialByName('ExplosionTexture').Material.Texture.Image.LoadFromFile
  531. ('FireGrade.png');
  532. VertexDisplacementShader.MaterialLibrary := MaterialLibrary;
  533. VertexDisplacementShader.MainTextureName := 'ExplosionTexture';
  534. VertexDisplacementShader.Enabled := False;
  535. GlassShader := TGLSLGlassShader.Create(self);
  536. MaterialLibrary.LibMaterialByName('RefractMap').Material.Texture.Image.LoadFromFile('barts.jpg');
  537. // Don't load any texture in EnvMap let it empty. The EnvMap is auto generated
  538. // MaterialLibrary.LibMaterialByName('EnvMap').Material.Texture.Image.LoadFromFile('textures\metal_matcap.jpg');
  539. // But we need to make a ScreenShoot of the Scene Once before Enable the GlassShader; otherwise an exception is raised
  540. // We don't say at this time how to correct this capture and create material from framebuffer
  541. Viewer.Buffer.CopyToTexture(MaterialLibrary.LibMaterialByName('EnvMap').Material.Texture);
  542. GlassShader.MaterialLibrary := MaterialLibrary;
  543. GlassShader.MainTextureName := 'EnvMap';
  544. GlassShader.RefractionTextureName := 'RefractMap';
  545. GlassShader.OwnerObject := FreeForm;
  546. // GlassShader.Viewer := Viewer;
  547. GlassShader.Enabled := False;
  548. ToonShader := TGLSLToonShader.Create(self);
  549. FreeForm.Visible := true;
  550. Screen.Cursor := crDefault;
  551. i := 0;
  552. j := 0;
  553. v := 0.0;
  554. cbxObjects.ItemIndex := 0; // Suzanne
  555. end;
  556. //----------------------------------------------------------------------------
  557. procedure TFormShaderLab.FormResize(Sender: TObject);
  558. begin
  559. ScreenBackGround.Width := Viewer.Width;
  560. ScreenBackGround.Height := Viewer.Height;
  561. ScreenBackGround.Position.X := Viewer.Width / 2;
  562. ScreenBackGround.Position.Y := Viewer.Height / 2;
  563. end;
  564. procedure TFormShaderLab.Button10Click(Sender: TObject);
  565. begin
  566. if OpenPictureDialog.Execute then
  567. begin
  568. MaterialLibrary.LibMaterialByName('RefractMap').Material.Texture.Image.LoadFromFile
  569. (OpenPictureDialog.FileName);
  570. end;
  571. end;
  572. procedure TFormShaderLab.Button11Click(Sender: TObject);
  573. begin
  574. if OpenPictureDialog.Execute then
  575. begin
  576. MaterialLibrary.LibMaterialByName('BackgroundTex').Material.Texture.Image.LoadFromFile
  577. (OpenPictureDialog.FileName);
  578. end;
  579. end;
  580. procedure TFormShaderLab.Button1Click(Sender: TObject);
  581. begin
  582. if OpenPictureDialog.Execute then
  583. begin
  584. MaterialLibrary.LibMaterialByName('ExplosionTexture').Material.Texture.Image.LoadFromFile
  585. (OpenPictureDialog.FileName);
  586. end;
  587. end;
  588. procedure TFormShaderLab.Button2Click(Sender: TObject);
  589. begin
  590. if ColorDialog.Execute then
  591. begin
  592. Viewer.Buffer.BackgroundColor := ColorDialog.Color;
  593. end;
  594. end;
  595. procedure TFormShaderLab.Button3Click(Sender: TObject);
  596. begin
  597. VertexDisplacementShader.ElapsedTime := 1.0;
  598. end;
  599. procedure TFormShaderLab.Button4Click(Sender: TObject);
  600. begin
  601. if OpenPictureDialog.Execute then
  602. begin
  603. MaterialLibrary.LibMaterialByName('MatCapTexture').Material.Texture.Image.LoadFromFile
  604. (OpenPictureDialog.FileName);
  605. end;
  606. end;
  607. procedure TFormShaderLab.Button5Click(Sender: TObject);
  608. begin
  609. if OpenPictureDialog.Execute then
  610. begin
  611. MaterialLibrary.LibMaterialByName('ErosionMainTexture').Material.Texture.Image.LoadFromFile
  612. (OpenPictureDialog.FileName);
  613. end;
  614. end;
  615. procedure TFormShaderLab.Button6Click(Sender: TObject);
  616. begin
  617. if OpenPictureDialog.Execute then
  618. begin
  619. MaterialLibrary.LibMaterialByName('ErosionTexture').Material.Texture.Image.LoadFromFile
  620. (OpenPictureDialog.FileName);
  621. end;
  622. end;
  623. procedure TFormShaderLab.Button8Click(Sender: TObject);
  624. begin
  625. if OpenPictureDialog.Execute then
  626. begin
  627. MaterialLibrary.LibMaterialByName('MainTexture').Material.Texture.Image.LoadFromFile
  628. (OpenPictureDialog.FileName);
  629. end;
  630. end;
  631. procedure TFormShaderLab.Button9Click(Sender: TObject);
  632. begin
  633. if OpenPictureDialog.Execute then
  634. begin
  635. MaterialLibrary.LibMaterialByName('NoiseTexture').Material.Texture.Image.LoadFromFile
  636. (OpenPictureDialog.FileName);
  637. end;
  638. end;
  639. procedure TFormShaderLab.CadencerProgress(Sender: TObject; const deltaTime, newTime: Double);
  640. begin
  641. if chkAnimScene.Checked then
  642. begin
  643. // GLSphere1.Pitch(40 * deltaTime);
  644. Objects.Pitch(40 * deltaTime);
  645. Objects.Turn(20 * deltaTime);
  646. Objects.Roll(40 * deltaTime);
  647. end;
  648. if TabSheet1.Enabled then // Fur
  649. begin
  650. if (i <= 10) and (j >= 0) then
  651. begin
  652. v := v + 0.2;
  653. i := i + 1;
  654. if i = 10 then
  655. j := 0;
  656. end;
  657. if (j <= 10) and (i >= 0) then
  658. begin
  659. v := v - 0.2;
  660. j := j + 1;
  661. if j = 10 then
  662. i := 0;
  663. end;
  664. FurShader.Gravity.Y := v;
  665. end;
  666. if chkVDAnimate.Checked then
  667. begin
  668. VertexDisplacementShader.ElapsedTime := newTime;
  669. end;
  670. Viewer.Invalidate;
  671. end;
  672. procedure TFormShaderLab.cbxFurBlendDestChange(Sender: TObject);
  673. begin
  674. FurShader.BlendDst := TGLBlendFunction(cbxFurBlendDest.ItemIndex);
  675. end;
  676. procedure TFormShaderLab.cbxFurBlendSrcChange(Sender: TObject);
  677. begin
  678. FurShader.BlendSrc := TGLBlendFunction(cbxFurBlendSrc.ItemIndex);
  679. end;
  680. procedure TFormShaderLab.cbxGlassBlendDstChange(Sender: TObject);
  681. begin
  682. GlassShader.BlendDst := TGLBlendFunction(cbxGlassBlendDst.ItemIndex);
  683. end;
  684. procedure TFormShaderLab.cbxGlassBlendSrcChange(Sender: TObject);
  685. begin
  686. GlassShader.BlendSrc := TGLBlendFunction(cbxGlassBlendSrc.ItemIndex);
  687. end;
  688. procedure TFormShaderLab.cbxGoochBlendDstChange(Sender: TObject);
  689. begin
  690. // GoochShader.BlendDst := TGLBlendFunction(cbxGoochBlendDst.ItemIndex);
  691. end;
  692. procedure TFormShaderLab.cbxGoochBlendSrcChange(Sender: TObject);
  693. begin
  694. // GoochShader.BlendSrc := TGLBlendFunction(cbxGoochBlendSrc.ItemIndex);
  695. end;
  696. procedure TFormShaderLab.cbxGootchBlendModeChange(Sender: TObject);
  697. begin
  698. case cbxGootchBlendMode.ItemIndex of
  699. 0:
  700. GoochShader.BlendingMode := bmxOpaque;
  701. 1:
  702. GoochShader.BlendingMode := bmxTransparency;
  703. 2:
  704. GoochShader.BlendingMode := bmxAdditive;
  705. 3:
  706. GoochShader.BlendingMode := bmxAlphaTest50;
  707. 4:
  708. GoochShader.BlendingMode := bmxAlphaTest100;
  709. 5:
  710. GoochShader.BlendingMode := bmxModulate;
  711. 6:
  712. GoochShader.BlendingMode := bmxDestColorOne;
  713. 7:
  714. GoochShader.BlendingMode := bmxDestAlphaOne;
  715. end;
  716. end;
  717. procedure TFormShaderLab.cbxObjectsChange(Sender: TObject);
  718. begin
  719. // Then load models
  720. SetCurrentDir(Path + '\model');
  721. case cbxObjects.ItemIndex of
  722. 0:
  723. begin
  724. FreeForm.Visible := True;
  725. Sphere.Visible := False;
  726. Torus.Visible := False;
  727. Teapot.Visible := False;
  728. FreeForm.LoadFromFile('suzanne.obj');
  729. GlassShader.OwnerObject := FreeForm;
  730. end;
  731. 1:
  732. begin
  733. FreeForm.Visible := True;
  734. Sphere.Visible := False;
  735. Torus.Visible := False;
  736. Teapot.Visible := False;
  737. FreeForm.LoadFromFile('knot.obj');
  738. GlassShader.OwnerObject := FreeForm;
  739. end;
  740. 2:
  741. begin // teapot
  742. FreeForm.Visible := False;
  743. Sphere.Visible := False;
  744. Torus.Visible := False;
  745. Teapot.Visible := True;
  746. GlassShader.OwnerObject := Teapot;
  747. end;
  748. 3:
  749. begin
  750. FreeForm.Visible := True;
  751. Sphere.Visible := False;
  752. Torus.Visible := False;
  753. Teapot.Visible := False;
  754. FreeForm.LoadFromFile('rectangles.obj');
  755. GlassShader.OwnerObject := FreeForm;
  756. end;
  757. 4:
  758. begin
  759. FreeForm.Visible := True;
  760. Sphere.Visible := False;
  761. Torus.Visible := False;
  762. Teapot.Visible := False;
  763. FreeForm.LoadFromFile('geode.obj');
  764. GlassShader.OwnerObject := FreeForm;
  765. end;
  766. 5:
  767. begin
  768. FreeForm.Visible := True;
  769. Sphere.Visible := False;
  770. Torus.Visible := False;
  771. Teapot.Visible := False;
  772. FreeForm.LoadFromFile('syamil.obj');
  773. GlassShader.OwnerObject := FreeForm;
  774. end;
  775. 6:
  776. begin // torus
  777. FreeForm.Visible := False;
  778. Sphere.Visible := False;
  779. Teapot.Visible := False;
  780. Torus.Visible := True;
  781. GlassShader.OwnerObject := Torus;
  782. end;
  783. 7:
  784. begin // sphere
  785. FreeForm.Visible := False;
  786. Torus.Visible := False;
  787. Teapot.Visible := False;
  788. Sphere.Visible := True;
  789. GlassShader.OwnerObject := Sphere;
  790. end;
  791. end;
  792. end;
  793. //---------------------------------------------------------------------------
  794. procedure TFormShaderLab.chkBackgroundImgClick(Sender: TObject);
  795. begin
  796. Button11.Enabled := chkBackgroundImg.Checked;
  797. ScreenBackGround.Visible := chkBackgroundImg.Checked;
  798. if ScreenBackGround.Visible then
  799. Viewer.Buffer.BackgroundColor := clBlack;
  800. end;
  801. //---------------------------------------------------------------------------
  802. procedure TFormShaderLab.chkErosionShaderClick(Sender: TObject);
  803. begin
  804. ErosionShader.Enabled := chkErosionShader.Checked;
  805. if ErosionShader.Enabled then
  806. begin
  807. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  808. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := ErosionShader
  809. end
  810. else
  811. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  812. end;
  813. //---------------------------------------------------------------------------
  814. procedure TFormShaderLab.chkFurRandomLengthClick(Sender: TObject);
  815. begin
  816. FurShader.RandomFurLength := chkFurRandomLength.Checked;
  817. end;
  818. procedure TFormShaderLab.chkFurShaderClick(Sender: TObject);
  819. begin
  820. FurShader.Enabled := chkFurShader.Checked;
  821. if FurShader.Enabled then
  822. begin
  823. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  824. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := FurShader
  825. end
  826. else
  827. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  828. // GLsphere1.Material.LibMaterialName := 'ShaderMaterial'
  829. // else
  830. // GLsphere1.Material.LibMaterialName := 'MainTexture';
  831. end;
  832. //---------------------------------------------------------------------------
  833. procedure TFormShaderLab.chkLatticeShaderClick(Sender: TObject);
  834. begin
  835. LatticeShader.Enabled := chkLatticeShader.Checked;
  836. if LatticeShader.Enabled then
  837. begin
  838. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  839. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := LatticeShader
  840. end
  841. else
  842. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  843. end;
  844. procedure TFormShaderLab.chkSEMShaderClick(Sender: TObject);
  845. begin
  846. SEMShader.Enabled := chkSEMShader.Checked;
  847. if SEMShader.Enabled then
  848. begin
  849. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  850. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := SEMShader
  851. end
  852. else
  853. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  854. end;
  855. procedure TFormShaderLab.chkToonShaderClick(Sender: TObject);
  856. begin
  857. ToonShader.Enabled := chkToonShader.Checked;
  858. if ToonShader.Enabled then
  859. begin
  860. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  861. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := ToonShader
  862. end
  863. else
  864. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  865. end;
  866. procedure TFormShaderLab.chkVDShaderClick(Sender: TObject);
  867. begin
  868. VertexDisplacementShader.Enabled := chkVDShader.Checked;
  869. if VertexDisplacementShader.Enabled then
  870. begin
  871. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  872. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := VertexDisplacementShader
  873. end
  874. else
  875. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  876. end;
  877. //---------------------------------------------------------------------------
  878. procedure TFormShaderLab.EditFloatKeyPress(Sender: TObject; var Key: Char);
  879. begin
  880. if not CharInSet(Key, ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ',', '-']) then
  881. Key := #0;
  882. end;
  883. procedure TFormShaderLab.edtFurGravityXChange(Sender: TObject);
  884. begin
  885. if (edtFurGravityX.Text <> '') and (edtFurGravityX.Text <> '-') and (edtFurGravityX.Text <> ',')
  886. and (edtFurGravityX.Text <> '.') then
  887. FurShader.Gravity.X := StrToFloat(edtFurGravityX.Text);
  888. end;
  889. procedure TFormShaderLab.edtFurGravityYChange(Sender: TObject);
  890. begin
  891. if (edtFurGravityY.Text <> '') and (edtFurGravityY.Text <> '-') and (edtFurGravityY.Text <> ',')
  892. and (edtFurGravityY.Text <> '.') then
  893. FurShader.Gravity.Y := StrToFloat(edtFurGravityY.Text);
  894. end;
  895. procedure TFormShaderLab.edtFurGravityZChange(Sender: TObject);
  896. begin
  897. if (edtFurGravityZ.Text <> '') and (edtFurGravityZ.Text <> '-') and (edtFurGravityZ.Text <> ',')
  898. and (edtFurGravityZ.Text <> '.') then
  899. FurShader.Gravity.Z := StrToFloat(edtFurGravityZ.Text);
  900. end;
  901. procedure TFormShaderLab.chkGlassShaderClick(Sender: TObject);
  902. begin
  903. GlassShader.Enabled := chkGlassShader.Checked;
  904. if GlassShader.Enabled then
  905. begin
  906. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  907. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := GlassShader
  908. end
  909. else
  910. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  911. end;
  912. procedure TFormShaderLab.chkGoochShaderClick(Sender: TObject);
  913. begin
  914. GoochShader.Enabled := chkGoochShader.Checked;
  915. if GoochShader.Enabled then
  916. begin
  917. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  918. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := GoochShader
  919. end
  920. else
  921. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  922. end;
  923. //---------------------------------------------------------------------------
  924. procedure TFormShaderLab.chkIvoryShaderClick(Sender: TObject);
  925. begin
  926. IvoryShader.Enabled := chkIvoryShader.Checked;
  927. if IvoryShader.Enabled then
  928. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := IvoryShader
  929. else
  930. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  931. end;
  932. procedure TFormShaderLab.LightCube2Progress(Sender: TObject; const deltaTime, newTime: Double);
  933. begin
  934. if chkLightmoving.Checked then
  935. LightCube2.MoveObjectAround(Camera.TargetObject, sin(newTime) * deltaTime * 20, deltaTime * 10);
  936. end;
  937. procedure TFormShaderLab.LightCube1Progress(Sender: TObject; const deltaTime, newTime: Double);
  938. begin
  939. if chkLightmoving.Checked then
  940. LightCube1.MoveObjectAround(Camera.TargetObject, sin(newTime) * deltaTime * 10, deltaTime * 20);
  941. end;
  942. //---------------------------------------------------------------------------
  943. procedure TFormShaderLab.Shape10MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  944. X, Y: Integer);
  945. begin
  946. if ColorDialog.Execute then
  947. begin
  948. LatticeShader.DiffuseColor.Color := ConvertWinColor(ColorDialog.Color);
  949. Shape10.Brush.Color := ColorDialog.Color;
  950. end;
  951. end;
  952. //---------------------------------------------------------------------------
  953. procedure TFormShaderLab.Shape11MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  954. X, Y: Integer);
  955. begin
  956. if ColorDialog.Execute then
  957. begin
  958. LatticeShader.AmbientColor.Color := ConvertWinColor(ColorDialog.Color);
  959. Shape11.Brush.Color := ColorDialog.Color;
  960. end;
  961. end;
  962. //---------------------------------------------------------------------------
  963. procedure TFormShaderLab.Shape12MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  964. X, Y: Integer);
  965. begin
  966. if ColorDialog.Execute then
  967. begin
  968. LatticeShader.SpecularColor.Color := ConvertWinColor(ColorDialog.Color);
  969. Shape12.Brush.Color := ColorDialog.Color;
  970. end;
  971. end;
  972. procedure TFormShaderLab.Shape13MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  973. X, Y: Integer);
  974. begin
  975. if ColorDialog.Execute then
  976. begin
  977. SEMShader.AmbientColor.Color := ConvertWinColor(ColorDialog.Color);
  978. Shape13.Brush.Color := ColorDialog.Color;
  979. end;
  980. end;
  981. procedure TFormShaderLab.Shape14MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  982. X, Y: Integer);
  983. begin
  984. if ColorDialog.Execute then
  985. begin
  986. SEMShader.SpecularColor.Color := ConvertWinColor(ColorDialog.Color);
  987. Shape14.Brush.Color := ColorDialog.Color;
  988. end;
  989. end;
  990. //---------------------------------------------------------------------------
  991. procedure TFormShaderLab.Shape17MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  992. X, Y: Integer);
  993. begin
  994. if ColorDialog.Execute then
  995. begin
  996. GlassShader.DiffuseColor.Color := ConvertWinColor(ColorDialog.Color);
  997. Shape17.Brush.Color := ColorDialog.Color;
  998. end;
  999. end;
  1000. //---------------------------------------------------------------------------
  1001. procedure TFormShaderLab.Shape18MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  1002. X, Y: Integer);
  1003. begin
  1004. if ColorDialog.Execute then
  1005. begin
  1006. ToonShader.HighlightColor.Color := ConvertWinColor(ColorDialog.Color);
  1007. Shape18.Brush.Color := ColorDialog.Color;
  1008. end;
  1009. end;
  1010. //-----------------------------------------------------------------------------
  1011. procedure TFormShaderLab.Shape19MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  1012. X, Y: Integer);
  1013. begin
  1014. if ColorDialog.Execute then
  1015. begin
  1016. ToonShader.MidColor.Color := ConvertWinColor(ColorDialog.Color);
  1017. Shape19.Brush.Color := ColorDialog.Color;
  1018. end;
  1019. end;
  1020. procedure TFormShaderLab.Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  1021. X, Y: Integer);
  1022. begin
  1023. if ColorDialog.Execute then
  1024. begin
  1025. FurShader.ColorScale.Color := ConvertWinColor(ColorDialog.Color);
  1026. Shape1.Brush.Color := ColorDialog.Color;
  1027. end;
  1028. end;
  1029. procedure TFormShaderLab.Shape20MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  1030. X, Y: Integer);
  1031. begin
  1032. if ColorDialog.Execute then
  1033. begin
  1034. ToonShader.LightenShadowColor.Color := ConvertWinColor(ColorDialog.Color);
  1035. Shape20.Brush.Color := ColorDialog.Color;
  1036. end;
  1037. end;
  1038. //-----------------------------------------------------------------------------
  1039. procedure TFormShaderLab.Shape21MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  1040. X, Y: Integer);
  1041. begin
  1042. if ColorDialog.Execute then
  1043. begin
  1044. ToonShader.DarkenShadowrColor.Color := ConvertWinColor(ColorDialog.Color);
  1045. Shape21.Brush.Color := ColorDialog.Color;
  1046. end;
  1047. end;
  1048. procedure TFormShaderLab.Shape22MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  1049. X, Y: Integer);
  1050. begin
  1051. if ColorDialog.Execute then
  1052. begin
  1053. ToonShader.OutlinetColor.Color := ConvertWinColor(ColorDialog.Color);
  1054. Shape22.Brush.Color := ColorDialog.Color;
  1055. end;
  1056. end;
  1057. procedure TFormShaderLab.Shape2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  1058. X, Y: Integer);
  1059. begin
  1060. if ColorDialog.Execute then
  1061. begin
  1062. FurShader.Ambient.Color := ConvertWinColor(ColorDialog.Color);
  1063. Shape2.Brush.Color := ColorDialog.Color;
  1064. end;
  1065. end;
  1066. procedure TFormShaderLab.Shape3MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  1067. X, Y: Integer);
  1068. begin
  1069. if ColorDialog.Execute then
  1070. begin
  1071. GoochShader.DiffuseColor.Color := ConvertWinColor(ColorDialog.Color);
  1072. Shape3.Brush.Color := ColorDialog.Color;
  1073. end;
  1074. end;
  1075. procedure TFormShaderLab.Shape4MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  1076. X, Y: Integer);
  1077. begin
  1078. if ColorDialog.Execute then
  1079. begin
  1080. GoochShader.WarmColor.Color := ConvertWinColor(ColorDialog.Color);
  1081. Shape4.Brush.Color := ColorDialog.Color;
  1082. end;
  1083. end;
  1084. procedure TFormShaderLab.Shape5MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  1085. X, Y: Integer);
  1086. begin
  1087. if ColorDialog.Execute then
  1088. begin
  1089. GoochShader.CoolColor.Color := ConvertWinColor(ColorDialog.Color);
  1090. Shape5.Brush.Color := ColorDialog.Color;
  1091. end;
  1092. end;
  1093. procedure TFormShaderLab.Shape6MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  1094. X, Y: Integer);
  1095. begin
  1096. if ColorDialog.Execute then
  1097. begin
  1098. GoochShader.AmbientColor.Color := ConvertWinColor(ColorDialog.Color);
  1099. Shape6.Brush.Color := ColorDialog.Color;
  1100. end;
  1101. end;
  1102. procedure TFormShaderLab.Shape7MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  1103. X, Y: Integer);
  1104. begin
  1105. if ColorDialog.Execute then
  1106. begin
  1107. GoochShader.SpecularColor.Color := ConvertWinColor(ColorDialog.Color);
  1108. Shape7.Brush.Color := ColorDialog.Color;
  1109. end;
  1110. end;
  1111. //-----------------------------------------------------------------------------
  1112. procedure TFormShaderLab.shAmbientErosionMouseDown(Sender: TObject; Button: TMouseButton;
  1113. Shift: TShiftState; X, Y: Integer);
  1114. begin
  1115. if ColorDialog.Execute then
  1116. begin
  1117. ErosionShader.AmbientColor.Color := ConvertWinColor(ColorDialog.Color);
  1118. shAmbientErosion.Brush.Color := ColorDialog.Color;
  1119. end;
  1120. end;
  1121. procedure TFormShaderLab.shSpecularErosionMouseDown(Sender: TObject; Button: TMouseButton;
  1122. Shift: TShiftState; X, Y: Integer);
  1123. begin
  1124. if ColorDialog.Execute then
  1125. begin
  1126. ErosionShader.SpecularColor.Color := ConvertWinColor(ColorDialog.Color);
  1127. shSpecularErosion.Brush.Color := ColorDialog.Color;
  1128. end;
  1129. end;
  1130. //-----------------------------------------------------------------------------
  1131. procedure TFormShaderLab.tbErosionAmbientFChange(Sender: TObject);
  1132. begin
  1133. ErosionShader.AmbientFactor := tbErosionAmbientF.Position / 100;
  1134. lblErosionAmbientF.Caption := FloatToStrF(ErosionShader.AmbientFactor, ffFixed, 5, 3);
  1135. end;
  1136. procedure TFormShaderLab.tbErosionAnisoRChange(Sender: TObject);
  1137. begin
  1138. ErosionShader.AnisotropicRoughness := tbErosionAnisoR.Position / 100;
  1139. lblErosionAnisoR.Caption := FloatToStrF(ErosionShader.AnisotropicRoughness, ffFixed, 5, 3);
  1140. end;
  1141. procedure TFormShaderLab.tbErosionDiffuseFChange(Sender: TObject);
  1142. begin
  1143. ErosionShader.DiffuseFactor := tbErosionDiffuseF.Position / 100;
  1144. lblErosionDiffuseF.Caption := FloatToStrF(ErosionShader.DiffuseFactor, ffFixed, 5, 3);
  1145. end;
  1146. procedure TFormShaderLab.tbErosionFactorChange(Sender: TObject);
  1147. begin
  1148. ErosionShader.ErosionFactor := tbErosionFactor.Position / 100;
  1149. lblErosionFactor.Caption := FloatToStrF(ErosionShader.ErosionFactor, ffFixed, 5, 3);
  1150. end;
  1151. procedure TFormShaderLab.tbErosionIFactor1Change(Sender: TObject);
  1152. begin
  1153. ErosionShader.IntensityFactor1 := tbErosionIFactor1.Position / 100;
  1154. lblErosionIFactor1.Caption := FloatToStrF(ErosionShader.IntensityFactor1, ffFixed, 5, 3);
  1155. end;
  1156. procedure TFormShaderLab.tbErosionIFactor2Change(Sender: TObject);
  1157. begin
  1158. ErosionShader.IntensityFactor2 := tbErosionIFactor2.Position / 100;
  1159. lblerosionIFactor2.Caption := FloatToStrF(ErosionShader.IntensityFactor2, ffFixed, 5, 3);
  1160. end;
  1161. //-----------------------------------------------------------------------------
  1162. procedure TFormShaderLab.tbErosionScaleChange(Sender: TObject);
  1163. begin
  1164. ErosionShader.ErosionScale := tbErosionScale.Position / 100;
  1165. lblErosionScale.Caption := FloatToStrF(ErosionShader.ErosionScale, ffFixed, 5, 3);
  1166. end;
  1167. procedure TFormShaderLab.tbErosionSpecularFChange(Sender: TObject);
  1168. begin
  1169. ErosionShader.SpecularFactor := tbErosionSpecularF.Position / 100;
  1170. lblErosionSpecularF.Caption := FloatToStrF(ErosionShader.SpecularFactor, ffFixed, 5, 3);
  1171. end;
  1172. procedure TFormShaderLab.tbErosionSpecularRChange(Sender: TObject);
  1173. begin
  1174. ErosionShader.SpecularRoughness := tbErosionSpecularR.Position / 100;
  1175. lblErosionSpecularR.Caption := FloatToStrF(ErosionShader.SpecularRoughness, ffFixed, 5, 3);
  1176. end;
  1177. procedure TFormShaderLab.tbFurDensityChange(Sender: TObject);
  1178. begin
  1179. FurShader.FurDensity := tbFurDensity.Position / 100;
  1180. lblFurDensity.Caption := FloatToStrF(FurShader.FurDensity, ffFixed, 5, 3);
  1181. end;
  1182. procedure TFormShaderLab.tbFurLengthChange(Sender: TObject);
  1183. begin
  1184. FurShader.FurLength := tbFurLength.Position / 100;
  1185. lblFurLength.Caption := FloatToStrF(FurShader.FurLength, ffFixed, 5, 3);
  1186. end;
  1187. procedure TFormShaderLab.tbFurLightPowerChange(Sender: TObject);
  1188. begin
  1189. FurShader.LightIntensity := tbFurLightPower.Position / 100;
  1190. lblFurLightPower.Caption := FloatToStrF(FurShader.LightIntensity, ffFixed, 5, 3);
  1191. end;
  1192. procedure TFormShaderLab.tbFurMaxLengthChange(Sender: TObject);
  1193. begin
  1194. FurShader.MaxFurLength := tbFurMaxLength.Position / 100;
  1195. lblFurMaxLength.Caption := FloatToStrF(FurShader.MaxFurLength, ffFixed, 5, 3);
  1196. end;
  1197. //-----------------------------------------------------------------------------
  1198. procedure TFormShaderLab.tbFurPassCountChange(Sender: TObject);
  1199. begin
  1200. FurShader.PassCount := tbFurPassCount.Position;
  1201. lblFurPassCount.Caption := FloatToStrF(FurShader.PassCount, ffFixed, 5, 3);
  1202. end;
  1203. procedure TFormShaderLab.tbGlassAlphaChange(Sender: TObject);
  1204. begin
  1205. GlassShader.Alpha := tbGlassAlpha.Position / 100;
  1206. lblGlassAlpha.Caption := FloatToStrF(GlassShader.Alpha, ffFixed, 5, 3);
  1207. end;
  1208. procedure TFormShaderLab.tbGlassDepthChange(Sender: TObject);
  1209. begin
  1210. GlassShader.Depth := tbGlassDepth.Position / 100;
  1211. lblGlassDepth.Caption := FloatToStrF(GlassShader.Depth, ffFixed, 5, 3);
  1212. end;
  1213. procedure TFormShaderLab.tbGlassMixChange(Sender: TObject);
  1214. begin
  1215. GlassShader.Mix := tbGlassMix.Position / 100;
  1216. lblGlassMix.Caption := FloatToStrF(GlassShader.Mix, ffFixed, 5, 3);
  1217. end;
  1218. procedure TFormShaderLab.tbGoochAFactorChange(Sender: TObject);
  1219. begin
  1220. GoochShader.AmbientFactor := tbGoochAFactor.Position / 100;
  1221. lblGoochAFactor.Caption := FloatToStrF(GoochShader.AmbientFactor, ffFixed, 5, 3);
  1222. end;
  1223. procedure TFormShaderLab.tbGoochAlphaChange(Sender: TObject);
  1224. begin
  1225. GoochShader.DiffuseColor.Alpha := tbGoochAlpha.Position / 100;
  1226. lblGoochAlpha.Caption := FloatToStrF(GoochShader.DiffuseColor.Alpha, ffFixed, 5, 3);
  1227. end;
  1228. procedure TFormShaderLab.tbGoochCFactorChange(Sender: TObject);
  1229. begin
  1230. GoochShader.CoolFactor := tbGoochCFactor.Position / 100;
  1231. lblGoochCFactor.Caption := FloatToStrF(GoochShader.CoolFactor, ffFixed, 5, 3);
  1232. end;
  1233. procedure TFormShaderLab.tbGoochDFactorChange(Sender: TObject);
  1234. begin
  1235. GoochShader.DiffuseFactor := tbGoochDFactor.Position / 100;
  1236. lblGoochDFactor.Caption := FloatToStrF(GoochShader.DiffuseFactor, ffFixed, 5, 3);
  1237. end;
  1238. procedure TFormShaderLab.tbGoochSFactorChange(Sender: TObject);
  1239. begin
  1240. GoochShader.SpecularFactor := tbGoochSFactor.Position / 100;
  1241. lblGoochSFactor.Caption := FloatToStrF(GoochShader.SpecularFactor, ffFixed, 5, 3);
  1242. end;
  1243. procedure TFormShaderLab.tbGoochWFactorChange(Sender: TObject);
  1244. begin
  1245. GoochShader.WarmFactor := tbGoochWFactor.Position / 100;
  1246. lblGoochWFactor.Caption := FloatToStrF(GoochShader.WarmFactor, ffFixed, 5, 3);
  1247. end;
  1248. procedure TFormShaderLab.tbLatticeLightPowerChange(Sender: TObject);
  1249. begin
  1250. LatticeShader.LightPower := tbLatticeLightPower.Position / 100;
  1251. lblLatticeLightPower.Caption := FloatToStrF(LatticeShader.LightPower, ffFixed, 5, 3);
  1252. end;
  1253. procedure TFormShaderLab.tbLatticeScaleXChange(Sender: TObject);
  1254. begin
  1255. LatticeShader.LatticeScale.X := tbLatticeScaleX.Position;
  1256. lblLatticeScaleX.Caption := FloatToStrF(LatticeShader.LatticeScale.X, ffFixed, 5, 0);
  1257. end;
  1258. procedure TFormShaderLab.tbLatticeScaleYChange(Sender: TObject);
  1259. begin
  1260. LatticeShader.LatticeScale.Y := tbLatticeScaleY.Position;
  1261. lblLatticeScaleY.Caption := FloatToStrF(LatticeShader.LatticeScale.Y, ffFixed, 5, 0);
  1262. end;
  1263. procedure TFormShaderLab.tbLatticeSpecularPowerChange(Sender: TObject);
  1264. begin
  1265. LatticeShader.SpecularPower := tbLatticeSpecularPower.Position / 100;
  1266. lblLatticeSpecularPower.Caption := FloatToStrF(LatticeShader.SpecularPower, ffFixed, 5, 3);
  1267. end;
  1268. //-----------------------------------------------------------------------------
  1269. procedure TFormShaderLab.tbLatticeThresholdXChange(Sender: TObject);
  1270. begin
  1271. LatticeShader.LatticeThreshold.X := tbLatticeThresholdX.Position / 100;
  1272. lblLatticeThresholdX.Caption := FloatToStrF(LatticeShader.LatticeThreshold.X, ffFixed, 5, 3);
  1273. end;
  1274. procedure TFormShaderLab.tbLatticeThresholdYChange(Sender: TObject);
  1275. begin
  1276. LatticeShader.LatticeThreshold.Y := tbLatticeThresholdY.Position / 100;
  1277. lblLatticeThresholdY.Caption := FloatToStrF(LatticeShader.LatticeThreshold.Y, ffFixed, 5, 3);
  1278. end;
  1279. procedure TFormShaderLab.tbSemAmbientFChange(Sender: TObject);
  1280. begin
  1281. SEMShader.AmbientFactor := tbSemAmbientF.Position / 100;
  1282. lblSemAmbientF.Caption := FloatToStrF(SEMShader.AmbientFactor, ffFixed, 5, 3);
  1283. end;
  1284. procedure TFormShaderLab.tbSemDiffuseFChange(Sender: TObject);
  1285. begin
  1286. SEMShader.DiffuseFactor := tbSemDiffuseF.Position / 100;
  1287. lblSemDiffuseF.Caption := FloatToStrF(SEMShader.DiffuseFactor, ffFixed, 5, 3);
  1288. end;
  1289. procedure TFormShaderLab.tbSemSpecularFChange(Sender: TObject);
  1290. begin
  1291. SEMShader.SpecularFactor := tbSemSpecularF.Position / 100;
  1292. lblSemSpecularF.Caption := FloatToStrF(SEMShader.SpecularFactor, ffFixed, 5, 3);
  1293. end;
  1294. procedure TFormShaderLab.tbToonHighlightSizeChange(Sender: TObject);
  1295. begin
  1296. ToonShader.HighlightSize := tbToonHighlightSize.Position / 100;
  1297. lblToonHighlightSize.Caption := FloatToStrF(ToonShader.HighlightSize, ffFixed, 5, 3);
  1298. end;
  1299. procedure TFormShaderLab.tbToonMidSizeChange(Sender: TObject);
  1300. begin
  1301. ToonShader.MidSize := tbToonMidSize.Position / 100;
  1302. lblToonMidSize.Caption := FloatToStrF(ToonShader.MidSize, ffFixed, 5, 3);
  1303. end;
  1304. procedure TFormShaderLab.tbToonOutlineWidthChange(Sender: TObject);
  1305. begin
  1306. ToonShader.OutlineWidth := tbToonOutlineWidth.Position / 100;
  1307. lblToonOutlineWidth.Caption := FloatToStrF(ToonShader.OutlineWidth, ffFixed, 5, 3);
  1308. end;
  1309. procedure TFormShaderLab.tbToonShadowSizeChange(Sender: TObject);
  1310. begin
  1311. ToonShader.ShadowSize := tbToonShadowSize.Position / 100;
  1312. lblToonShadowSize.Caption := FloatToStrF(ToonShader.ShadowSize, ffFixed, 5, 3);
  1313. end;
  1314. procedure TFormShaderLab.tbVDAmbientFChange(Sender: TObject);
  1315. begin
  1316. VertexDisplacementShader.AmbientFactor := tbVDAmbientF.Position / 100;
  1317. lblVDAmbientF.Caption := FloatToStrF(VertexDisplacementShader.AmbientFactor, ffFixed, 5, 3);
  1318. end;
  1319. procedure TFormShaderLab.tbVDDiffuseFChange(Sender: TObject);
  1320. begin
  1321. VertexDisplacementShader.DiffuseFactor := tbVDDiffuseF.Position / 100;
  1322. lblVDDiffuseF.Caption := FloatToStrF(VertexDisplacementShader.DiffuseFactor, ffFixed, 5, 3);
  1323. end;
  1324. procedure TFormShaderLab.tbVDDispScaleChange(Sender: TObject);
  1325. begin
  1326. VertexDisplacementShader.DisplacementScale := tbVDDispScale.Position / 100;
  1327. lblVDDispScale.Caption := FloatToStrF(VertexDisplacementShader.DisplacementScale, ffFixed, 5, 3);
  1328. end;
  1329. procedure TFormShaderLab.tbVDNoiseChange(Sender: TObject);
  1330. begin
  1331. VertexDisplacementShader.NoiseFactor := tbVDNoise.Position / 100;
  1332. lblVDNoise.Caption := FloatToStrF(VertexDisplacementShader.NoiseFactor, ffFixed, 5, 3);
  1333. end;
  1334. procedure TFormShaderLab.tbVDNScaleChange(Sender: TObject);
  1335. begin
  1336. VertexDisplacementShader.NoiseScale := tbVDNScale.Position / 100;
  1337. lblVDNScale.Caption := FloatToStrF(VertexDisplacementShader.NoiseScale, ffFixed, 5, 3);
  1338. end;
  1339. procedure TFormShaderLab.tbVDPeriodChange(Sender: TObject);
  1340. begin
  1341. VertexDisplacementShader.NoisePeriod := tbVDPeriod.Position / 100;
  1342. lblVDPeriod.Caption := FloatToStrF(VertexDisplacementShader.NoisePeriod, ffFixed, 5, 3);
  1343. end;
  1344. procedure TFormShaderLab.tbVDSpecularFChange(Sender: TObject);
  1345. begin
  1346. VertexDisplacementShader.SpecularFactor := tbVDSpecularF.Position / 100;
  1347. lblVDSpecularF.Caption := FloatToStrF(VertexDisplacementShader.SpecularFactor, ffFixed, 5, 3);
  1348. end;
  1349. procedure TFormShaderLab.tbVDTimeFChange(Sender: TObject);
  1350. begin
  1351. VertexDisplacementShader.TimeFactor := tbVDTimeF.Position / 100;
  1352. lblVDTimeF.Caption := FloatToStrF(VertexDisplacementShader.TimeFactor, ffFixed, 5, 3);
  1353. end;
  1354. procedure TFormShaderLab.tbVDTurbChange(Sender: TObject);
  1355. begin
  1356. VertexDisplacementShader.TurbulenceFactor := tbVDTurb.Position / 100;
  1357. lblVDTurb.Caption := FloatToStrF(VertexDisplacementShader.TurbulenceFactor, ffFixed, 5, 3);
  1358. end;
  1359. //-----------------------------------------------------------------------------
  1360. procedure TFormShaderLab.FormDestroy(Sender: TObject);
  1361. begin
  1362. Cadencer.Enabled := False;
  1363. FurShader.Free;
  1364. LatticeShader.Free;
  1365. IvoryShader.Free;
  1366. GoochShader.Free;
  1367. ErosionShader.Free;
  1368. SEMShader.Free;
  1369. VertexDisplacementShader.Free;
  1370. GlassShader.Free;
  1371. end;
  1372. end.