fShaderLab.pas 47 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528
  1. unit fShaderLab;
  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. GLS.VectorTypes,
  23. GLS.VectorLists,
  24. GLS.VectorGeometry,
  25. GLS.BaseClasses,
  26. GLS.PersistentClasses,
  27. GLS.Keyboard,
  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. GLS.TextureFormat,
  40. GLS.Color,
  41. GLS.Graphics,
  42. GLS.MeshUtils,
  43. GLS.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. GLLightSource1: TGLLightSource;
  59. GLSphere1: TGLSphere;
  60. PageControl1: TPageControl;
  61. TabSheet1: TTabSheet;
  62. chkAnimScene: TCheckBox;
  63. chkLightmoving: TCheckBox;
  64. chkFurShader: TCheckBox;
  65. LightCube: 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. GLLightSource2: 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. GLTorus1: 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. Shape8: TShape;
  169. Shape9: 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. procedure FormCreate(Sender: TObject);
  301. procedure FormDestroy(Sender: TObject);
  302. procedure chkFurShaderClick(Sender: TObject);
  303. procedure CadencerProgress(Sender: TObject;
  304. const deltaTime, newTime: Double);
  305. procedure LightCubeProgress(Sender: TObject;
  306. const deltaTime, newTime: Double);
  307. procedure tbFurLengthChange(Sender: TObject);
  308. procedure tbLatticeScaleXChange(Sender: TObject);
  309. procedure chkLatticeShaderClick(Sender: TObject);
  310. procedure tbLatticeScaleYChange(Sender: TObject);
  311. procedure tbLatticeThresholdXChange(Sender: TObject);
  312. procedure tbLatticeThresholdYChange(Sender: TObject);
  313. procedure chkIvoryShaderClick(Sender: TObject);
  314. procedure LightCube2Progress(Sender: TObject;
  315. const deltaTime, newTime: Double);
  316. procedure cbxFurBlendDestChange(Sender: TObject);
  317. procedure cbxFurBlendSrcChange(Sender: TObject);
  318. procedure tbFurPassCountChange(Sender: TObject);
  319. procedure chkGoochShaderClick(Sender: TObject);
  320. procedure tbFurMaxLengthChange(Sender: TObject);
  321. procedure tbFurDensityChange(Sender: TObject);
  322. procedure chkFurRandomLengthClick(Sender: TObject);
  323. procedure tbFurLightPowerChange(Sender: TObject);
  324. procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  325. Shift: TShiftState; X, Y: Integer);
  326. procedure Shape2MouseDown(Sender: TObject; Button: TMouseButton;
  327. Shift: TShiftState; X, Y: Integer);
  328. procedure Shape3MouseDown(Sender: TObject; Button: TMouseButton;
  329. Shift: TShiftState; X, Y: Integer);
  330. procedure Shape4MouseDown(Sender: TObject; Button: TMouseButton;
  331. Shift: TShiftState; X, Y: Integer);
  332. procedure Shape5MouseDown(Sender: TObject; Button: TMouseButton;
  333. Shift: TShiftState; X, Y: Integer);
  334. procedure Shape6MouseDown(Sender: TObject; Button: TMouseButton;
  335. Shift: TShiftState; X, Y: Integer);
  336. procedure Shape7MouseDown(Sender: TObject; Button: TMouseButton;
  337. Shift: TShiftState; X, Y: Integer);
  338. procedure tbGoochDFactorChange(Sender: TObject);
  339. procedure tbGoochWFactorChange(Sender: TObject);
  340. procedure tbGoochCFactorChange(Sender: TObject);
  341. procedure tbGoochAFactorChange(Sender: TObject);
  342. procedure tbGoochSFactorChange(Sender: TObject);
  343. procedure cbxGoochBlendSrcChange(Sender: TObject);
  344. procedure cbxGoochBlendDstChange(Sender: TObject);
  345. procedure chkErosionShaderClick(Sender: TObject);
  346. procedure tbErosionFactorChange(Sender: TObject);
  347. procedure tberosionScaleChange(Sender: TObject);
  348. procedure tbErosionIFactor1Change(Sender: TObject);
  349. procedure tbErosionIFactor2Change(Sender: TObject);
  350. procedure tbErosionDiffuseFChange(Sender: TObject);
  351. procedure tbErosionAmbientFChange(Sender: TObject);
  352. procedure tbErosionSpecularFChange(Sender: TObject);
  353. procedure tbErosionSpecularRChange(Sender: TObject);
  354. procedure tbErosionAnisoRChange(Sender: TObject);
  355. procedure Shape8MouseDown(Sender: TObject; Button: TMouseButton;
  356. Shift: TShiftState; X, Y: Integer);
  357. procedure Shape9MouseDown(Sender: TObject; Button: TMouseButton;
  358. Shift: TShiftState; X, Y: Integer);
  359. procedure tbLatticeSpecularPowerChange(Sender: TObject);
  360. procedure tbLatticeLightPowerChange(Sender: TObject);
  361. procedure Shape10MouseDown(Sender: TObject; Button: TMouseButton;
  362. Shift: TShiftState; X, Y: Integer);
  363. procedure Shape11MouseDown(Sender: TObject; Button: TMouseButton;
  364. Shift: TShiftState; X, Y: Integer);
  365. procedure Shape12MouseDown(Sender: TObject; Button: TMouseButton;
  366. Shift: TShiftState; X, Y: Integer);
  367. procedure cbxGootchBlendModeChange(Sender: TObject);
  368. procedure tbGoochAlphaChange(Sender: TObject);
  369. procedure chkSEMShaderClick(Sender: TObject);
  370. procedure tbSemDiffuseFChange(Sender: TObject);
  371. procedure tbSemAmbientFChange(Sender: TObject);
  372. procedure tbSemSpecularFChange(Sender: TObject);
  373. procedure Shape13MouseDown(Sender: TObject; Button: TMouseButton;
  374. Shift: TShiftState; X, Y: Integer);
  375. procedure Shape14MouseDown(Sender: TObject; Button: TMouseButton;
  376. Shift: TShiftState; X, Y: Integer);
  377. procedure chkVDShaderClick(Sender: TObject);
  378. procedure tbVDDiffuseFChange(Sender: TObject);
  379. procedure tbVDAmbientFChange(Sender: TObject);
  380. procedure tbVDSpecularFChange(Sender: TObject);
  381. procedure tbVDNoiseChange(Sender: TObject);
  382. procedure tbVDPeriodChange(Sender: TObject);
  383. procedure tbVDNScaleChange(Sender: TObject);
  384. procedure tbVDTurbChange(Sender: TObject);
  385. procedure tbVDDispScaleChange(Sender: TObject);
  386. procedure tbVDTimeFChange(Sender: TObject);
  387. procedure Button2Click(Sender: TObject);
  388. procedure cbxObjectsChange(Sender: TObject);
  389. procedure Button3Click(Sender: TObject);
  390. procedure Button8Click(Sender: TObject);
  391. procedure Button5Click(Sender: TObject);
  392. procedure Button6Click(Sender: TObject);
  393. procedure Button1Click(Sender: TObject);
  394. procedure Button4Click(Sender: TObject);
  395. procedure Button9Click(Sender: TObject);
  396. procedure chkGlassShaderClick(Sender: TObject);
  397. procedure Shape17MouseDown(Sender: TObject; Button: TMouseButton;
  398. Shift: TShiftState; X, Y: Integer);
  399. procedure tbGlassDepthChange(Sender: TObject);
  400. procedure tbGlassMixChange(Sender: TObject);
  401. procedure Button10Click(Sender: TObject);
  402. procedure tbGlassAlphaChange(Sender: TObject);
  403. procedure cbxGlassBlendSrcChange(Sender: TObject);
  404. procedure cbxGlassBlendDstChange(Sender: TObject);
  405. procedure FormResize(Sender: TObject);
  406. procedure Button11Click(Sender: TObject);
  407. procedure chkBackgroundImgClick(Sender: TObject);
  408. procedure EditFloatKeyPress(Sender: TObject; var Key: Char);
  409. procedure edtFurGravityXChange(Sender: TObject);
  410. procedure edtFurGravityYChange(Sender: TObject);
  411. procedure edtFurGravityZChange(Sender: TObject);
  412. procedure chkToonShaderClick(Sender: TObject);
  413. procedure tbToonHighlightSizeChange(Sender: TObject);
  414. procedure tbToonMidSizeChange(Sender: TObject);
  415. procedure tbToonShadowSizeChange(Sender: TObject);
  416. procedure tbToonOutlineWidthChange(Sender: TObject);
  417. procedure Shape18MouseDown(Sender: TObject; Button: TMouseButton;
  418. Shift: TShiftState; X, Y: Integer);
  419. procedure Shape19MouseDown(Sender: TObject; Button: TMouseButton;
  420. Shift: TShiftState; X, Y: Integer);
  421. procedure Shape20MouseDown(Sender: TObject; Button: TMouseButton;
  422. Shift: TShiftState; X, Y: Integer);
  423. procedure Shape21MouseDown(Sender: TObject; Button: TMouseButton;
  424. Shift: TShiftState; X, Y: Integer);
  425. procedure Shape22MouseDown(Sender: TObject; Button: TMouseButton;
  426. Shift: TShiftState; X, Y: Integer);
  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. //----------------------------------------
  448. implementation
  449. //----------------------------------------
  450. {$R *.dfm}
  451. uses
  452. GLS.FileTGA,
  453. GLS.FileOBJ,
  454. GLS.FileSTL,
  455. GLS.FileLWO,
  456. GLS.FileQ3BSP,
  457. GLS.FileOCT,
  458. GLS.FileMS3D,
  459. GLS.FileNMF,
  460. GLS.FileMD3,
  461. GLS.File3DS,
  462. GLS.FileMD2,
  463. GLS.FileSMD,
  464. GLS.FilePLY,
  465. GLS.FileGTS,
  466. GLS.FileVRML,
  467. GLS.FileMD5,
  468. GLS.FileTIN,
  469. GLS.FileDXF,
  470. GLS.FileGRD;
  471. procedure TFormShaderLab.Button10Click(Sender: TObject);
  472. begin
  473. if OpenPictureDialog.Execute then
  474. begin
  475. MaterialLibrary.LibMaterialByName('RefractMap')
  476. .Material.Texture.Image.LoadFromFile(OpenPictureDialog.FileName);
  477. end;
  478. end;
  479. procedure TFormShaderLab.Button11Click(Sender: TObject);
  480. begin
  481. if OpenPictureDialog.Execute then
  482. begin
  483. MaterialLibrary.LibMaterialByName('BackgroundTex')
  484. .Material.Texture.Image.LoadFromFile(OpenPictureDialog.FileName);
  485. end;
  486. end;
  487. procedure TFormShaderLab.Button1Click(Sender: TObject);
  488. begin
  489. if OpenPictureDialog.Execute then
  490. begin
  491. MaterialLibrary.LibMaterialByName('ExplosionTexture')
  492. .Material.Texture.Image.LoadFromFile(OpenPictureDialog.FileName);
  493. end;
  494. end;
  495. procedure TFormShaderLab.Button2Click(Sender: TObject);
  496. begin
  497. if ColorDialog.Execute then
  498. begin
  499. Viewer.Buffer.BackgroundColor := ColorDialog.Color;
  500. end;
  501. end;
  502. procedure TFormShaderLab.Button3Click(Sender: TObject);
  503. begin
  504. VertexDisplacementShader.ElapsedTime := 1.0;
  505. end;
  506. procedure TFormShaderLab.Button4Click(Sender: TObject);
  507. begin
  508. if OpenPictureDialog.Execute then
  509. begin
  510. MaterialLibrary.LibMaterialByName('MatCapTexture')
  511. .Material.Texture.Image.LoadFromFile(OpenPictureDialog.FileName);
  512. end;
  513. end;
  514. procedure TFormShaderLab.Button5Click(Sender: TObject);
  515. begin
  516. if OpenPictureDialog.Execute then
  517. begin
  518. MaterialLibrary.LibMaterialByName('ErosionMainTexture')
  519. .Material.Texture.Image.LoadFromFile(OpenPictureDialog.FileName);
  520. end;
  521. end;
  522. procedure TFormShaderLab.Button6Click(Sender: TObject);
  523. begin
  524. if OpenPictureDialog.Execute then
  525. begin
  526. MaterialLibrary.LibMaterialByName('ErosionTexture')
  527. .Material.Texture.Image.LoadFromFile(OpenPictureDialog.FileName);
  528. end;
  529. end;
  530. procedure TFormShaderLab.Button8Click(Sender: TObject);
  531. begin
  532. if OpenPictureDialog.Execute then
  533. begin
  534. MaterialLibrary.LibMaterialByName('MainTexture')
  535. .Material.Texture.Image.LoadFromFile(OpenPictureDialog.FileName);
  536. end;
  537. end;
  538. procedure TFormShaderLab.Button9Click(Sender: TObject);
  539. begin
  540. if OpenPictureDialog.Execute then
  541. begin
  542. MaterialLibrary.LibMaterialByName('NoiseTexture')
  543. .Material.Texture.Image.LoadFromFile(OpenPictureDialog.FileName);
  544. end;
  545. end;
  546. procedure TFormShaderLab.CadencerProgress(Sender: TObject;
  547. const deltaTime, newTime: Double);
  548. begin
  549. if chkAnimScene.Checked then
  550. begin
  551. // GLSphere1.Pitch(40 * deltaTime);
  552. Objects.Pitch(40 * deltaTime);
  553. Objects.Turn(20 * deltaTime);
  554. Objects.Roll(40 * deltaTime);
  555. end;
  556. if TabSheet1.Enabled then //Fur
  557. begin
  558. if (i <= 10) and (j >= 0) then
  559. begin
  560. v := v + 0.2;
  561. i := i + 1;
  562. if i = 10 then
  563. j := 0;
  564. end;
  565. if (j <= 10) and (i >= 0) then
  566. begin
  567. v := v - 0.2;
  568. j := j + 1;
  569. if j = 10 then
  570. i := 0;
  571. end;
  572. FurShader.Gravity.Y := v;
  573. end;
  574. if chkVDAnimate.Checked then
  575. begin
  576. VertexDisplacementShader.ElapsedTime := newTime;
  577. end;
  578. Viewer.Invalidate;
  579. end;
  580. procedure TFormShaderLab.cbxFurBlendDestChange(Sender: TObject);
  581. begin
  582. FurShader.BlendDst := TGLBlendFunction(cbxFurBlendDest.ItemIndex);
  583. end;
  584. procedure TFormShaderLab.cbxFurBlendSrcChange(Sender: TObject);
  585. begin
  586. FurShader.BlendSrc := TGLBlendFunction(cbxFurBlendSrc.ItemIndex);
  587. end;
  588. procedure TFormShaderLab.cbxGlassBlendDstChange(Sender: TObject);
  589. begin
  590. GlassShader.BlendDst := TGLBlendFunction(cbxGlassBlendDst.ItemIndex);
  591. end;
  592. procedure TFormShaderLab.cbxGlassBlendSrcChange(Sender: TObject);
  593. begin
  594. GlassShader.BlendSrc := TGLBlendFunction(cbxGlassBlendSrc.ItemIndex);
  595. end;
  596. procedure TFormShaderLab.cbxGoochBlendDstChange(Sender: TObject);
  597. begin
  598. //GoochShader.BlendDst := TGLBlendFunction(cbxGoochBlendDst.ItemIndex);
  599. end;
  600. procedure TFormShaderLab.cbxGoochBlendSrcChange(Sender: TObject);
  601. begin
  602. //GoochShader.BlendSrc := TGLBlendFunction(cbxGoochBlendSrc.ItemIndex);
  603. end;
  604. procedure TFormShaderLab.cbxGootchBlendModeChange(Sender: TObject);
  605. begin
  606. case cbxGootchBlendMode.ItemIndex of
  607. 0: GoochShader.BlendingMode := bmxOpaque;
  608. 1: GoochShader.BlendingMode := bmxTransparency;
  609. 2: GoochShader.BlendingMode := bmxAdditive;
  610. 3: GoochShader.BlendingMode := bmxAlphaTest50;
  611. 4: GoochShader.BlendingMode := bmxAlphaTest100;
  612. 5: GoochShader.BlendingMode := bmxModulate;
  613. 6: GoochShader.BlendingMode := bmxDestColorOne;
  614. 7: GoochShader.BlendingMode := bmxDestAlphaOne;
  615. end;
  616. end;
  617. procedure TFormShaderLab.cbxObjectsChange(Sender: TObject);
  618. begin
  619. case cbxObjects.ItemIndex of
  620. 0:
  621. begin
  622. GLSphere1.Visible := False;
  623. GLTorus1.Visible := False;
  624. FreeForm.LoadFromFile('models\suzanne-blender.obj');
  625. GlassShader.OwnerObject := FreeForm;
  626. FreeForm.Visible := true;
  627. end;
  628. 1:
  629. begin
  630. GLSphere1.Visible := False;
  631. GLTorus1.Visible := False;
  632. FreeForm.LoadFromFile('models\torus-knot2.obj');
  633. GlassShader.OwnerObject := FreeForm;
  634. FreeForm.Visible := true;
  635. end;
  636. 2:
  637. begin
  638. GLSphere1.Visible := False;
  639. GLTorus1.Visible := False;
  640. FreeForm.LoadFromFile('models\sputnik.obj');
  641. GlassShader.OwnerObject := FreeForm;
  642. FreeForm.Visible := true;
  643. end;
  644. 3:
  645. begin
  646. GLSphere1.Visible := False;
  647. GLTorus1.Visible := False;
  648. FreeForm.LoadFromFile('models\rectangle_spiral.obj');
  649. GlassShader.OwnerObject := FreeForm;
  650. FreeForm.Visible := true;
  651. end;
  652. 4:
  653. begin
  654. GLSphere1.Visible := False;
  655. GLTorus1.Visible := False;
  656. FreeForm.LoadFromFile('models\geode.obj');
  657. GlassShader.OwnerObject := FreeForm;
  658. FreeForm.Visible := true;
  659. end;
  660. 5:
  661. begin
  662. GLSphere1.Visible := False;
  663. GLTorus1.Visible := False;
  664. FreeForm.LoadFromFile('models\syamil_19.obj');
  665. GlassShader.OwnerObject := FreeForm;
  666. FreeForm.Visible := true;
  667. end;
  668. 6:
  669. begin
  670. GLSphere1.Visible := False;
  671. FreeForm.Visible := False;
  672. GLTorus1.Visible := true;
  673. GlassShader.OwnerObject := GLTorus1;
  674. end;
  675. 7:
  676. begin
  677. GLTorus1.Visible := False;
  678. FreeForm.Visible := False;
  679. GLSphere1.Visible := true;
  680. GlassShader.OwnerObject := GLSphere1;
  681. end;
  682. end;
  683. end;
  684. procedure TFormShaderLab.chkBackgroundImgClick(Sender: TObject);
  685. begin
  686. Button11.Enabled := chkBackgroundImg.Checked;
  687. ScreenBackGround.Visible := chkBackgroundImg.Checked;
  688. if ScreenBackGround.Visible then
  689. Viewer.Buffer.BackgroundColor := clBlack;
  690. end;
  691. procedure TFormShaderLab.chkErosionShaderClick(Sender: TObject);
  692. begin
  693. ErosionShader.Enabled := chkErosionShader.Checked;
  694. if ErosionShader.Enabled then
  695. begin
  696. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  697. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := ErosionShader
  698. end
  699. else
  700. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  701. end;
  702. procedure TFormShaderLab.chkFurRandomLengthClick(Sender: TObject);
  703. begin
  704. FurShader.RandomFurLength := chkFurRandomLength.Checked;
  705. end;
  706. procedure TFormShaderLab.chkFurShaderClick(Sender: TObject);
  707. begin
  708. FurShader.Enabled := chkFurShader.Checked;
  709. if FurShader.Enabled then
  710. begin
  711. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  712. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := FurShader
  713. end
  714. else
  715. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  716. // GLsphere1.Material.LibMaterialName := 'ShaderMaterial'
  717. // else
  718. // GLsphere1.Material.LibMaterialName := 'MainTexture';
  719. end;
  720. procedure TFormShaderLab.chkLatticeShaderClick(Sender: TObject);
  721. begin
  722. LatticeShader.Enabled := chkLatticeShader.Checked;
  723. if LatticeShader.Enabled then
  724. begin
  725. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  726. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := LatticeShader
  727. end
  728. else
  729. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  730. end;
  731. procedure TFormShaderLab.chkSEMShaderClick(Sender: TObject);
  732. begin
  733. SEMShader.Enabled := chkSEMShader.Checked;
  734. if SEMShader.Enabled then
  735. begin
  736. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  737. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := SEMShader
  738. end
  739. else
  740. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  741. end;
  742. procedure TFormShaderLab.chkToonShaderClick(Sender: TObject);
  743. begin
  744. ToonShader.Enabled := chkToonShader.Checked;
  745. if ToonShader.Enabled then
  746. begin
  747. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  748. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := ToonShader
  749. end
  750. else
  751. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  752. end;
  753. procedure TFormShaderLab.chkVDShaderClick(Sender: TObject);
  754. begin
  755. VertexDisplacementShader.Enabled := chkVDShader.Checked;
  756. if VertexDisplacementShader.Enabled then
  757. begin
  758. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  759. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader :=
  760. VertexDisplacementShader
  761. end
  762. else
  763. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  764. end;
  765. procedure TFormShaderLab.EditFloatKeyPress(Sender: TObject; var Key: Char);
  766. begin
  767. if not CharInSet(Key,['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ',', '-']) then
  768. Key := #0;
  769. end;
  770. procedure TFormShaderLab.edtFurGravityXChange(Sender: TObject);
  771. begin
  772. if (edtFurGravityX.Text <> '') and (edtFurGravityX.Text <> '-') and
  773. (edtFurGravityX.Text <> ',') and (edtFurGravityX.Text <> '.') then
  774. FurShader.Gravity.X := StrToFloat(edtFurGravityX.Text);
  775. end;
  776. procedure TFormShaderLab.edtFurGravityYChange(Sender: TObject);
  777. begin
  778. if (edtFurGravityY.Text <> '') and (edtFurGravityY.Text <> '-') and
  779. (edtFurGravityY.Text <> ',') and (edtFurGravityY.Text <> '.') then
  780. FurShader.Gravity.Y := StrToFloat(edtFurGravityY.Text);
  781. end;
  782. procedure TFormShaderLab.edtFurGravityZChange(Sender: TObject);
  783. begin
  784. if (edtFurGravityZ.Text <> '') and (edtFurGravityZ.Text <> '-') and
  785. (edtFurGravityZ.Text <> ',') and (edtFurGravityZ.Text <> '.') then
  786. FurShader.Gravity.Z := StrToFloat(edtFurGravityZ.Text);
  787. end;
  788. procedure TFormShaderLab.chkGlassShaderClick(Sender: TObject);
  789. begin
  790. GlassShader.Enabled := chkGlassShader.Checked;
  791. if GlassShader.Enabled then
  792. begin
  793. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  794. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := GlassShader
  795. end
  796. else
  797. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  798. end;
  799. procedure TFormShaderLab.chkGoochShaderClick(Sender: TObject);
  800. begin
  801. GoochShader.Enabled := chkGoochShader.Checked;
  802. if GoochShader.Enabled then
  803. begin
  804. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  805. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := GoochShader
  806. end
  807. else
  808. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  809. end;
  810. procedure TFormShaderLab.FormCreate(Sender: TObject);
  811. begin
  812. SetGLSceneMediaDir();
  813. Screen.Cursor := crHourGlass;
  814. // FreeForm.IgnoreMissingTextures := True;
  815. FreeForm.LoadFromFile('models\suzanne-blender.obj');
  816. FreeForm.Visible := False;
  817. // Then load textures
  818. MaterialLibrary.LibMaterialByName('ShaderMaterial')
  819. .Material.Texture.Image.LoadFromFile('textures\bigtiger.jpg');
  820. MaterialLibrary.LibMaterialByName('BackgroundTex')
  821. .Material.Texture.Image.LoadFromFile('textures\randal.jpg');
  822. FreeForm.Material.MaterialLibrary := MaterialLibrary;
  823. FreeForm.Material.LibMaterialName := 'ShaderMaterial';
  824. GLTorus1.Material.MaterialLibrary := MaterialLibrary;
  825. GLTorus1.Material.LibMaterialName := 'ShaderMaterial';
  826. GLTorus1.Visible := False;
  827. GLSphere1.Material.MaterialLibrary := MaterialLibrary;
  828. GLSphere1.Material.LibMaterialName := 'ShaderMaterial';
  829. GLSphere1.Visible := False;
  830. MaterialLibrary.LibMaterialByName('MainTexture')
  831. .Material.Texture.Image.LoadFromFile('textures\bigtiger.jpg');
  832. // My Shader
  833. FurShader := TGLSLFurShader.Create(self);
  834. MaterialLibrary.LibMaterialByName('NoiseTexture')
  835. .Material.Texture.Image.LoadFromFile('textures\fur.tga');
  836. FurShader.MaterialLibrary := MaterialLibrary;
  837. FurShader.MainTextureName := 'MainTexture';
  838. FurShader.NoiseTextureName := 'NoiseTexture';
  839. FurShader.Gravity.X := 0;
  840. FurShader.Gravity.Y := -2.0;
  841. FurShader.Gravity.Z := 0;
  842. FurShader.Enabled := False;
  843. LatticeShader := TGLSLLatticeShader.Create(self);
  844. LatticeShader.MaterialLibrary := MaterialLibrary;
  845. LatticeShader.MainTextureName := 'MainTexture';
  846. LatticeShader.Enabled := False;
  847. ErosionShader := TGLSLSimpleErosionShader.Create(self);
  848. MaterialLibrary.LibMaterialByName('ErosionNoiseTexture')
  849. .Material.Texture.Image.LoadFromFile('textures\ErosionNoise.tga');
  850. MaterialLibrary.LibMaterialByName('ErosionMainTexture')
  851. .Material.Texture.Image.LoadFromFile
  852. ('textures\eroded_scratch_metal_texture.jpg');
  853. MaterialLibrary.LibMaterialByName('ErosionTexture')
  854. .Material.Texture.Image.LoadFromFile
  855. ('textures\rust_eroded_scratch_metal_texture.jpg');
  856. ErosionShader.MaterialLibrary := MaterialLibrary;
  857. ErosionShader.MainTextureName := 'ErosionMainTexture';
  858. ErosionShader.ErosionTextureName := 'ErosionTexture';
  859. ErosionShader.NoiseTextureName := 'ErosionNoiseTexture';
  860. ErosionShader.Enabled := False;
  861. IvoryShader := TGLSLIvoryShader.Create(self);
  862. IvoryShader.Enabled := False;
  863. GoochShader := TGLSLSimpleGoochShader.Create(self);
  864. GoochShader.Enabled := False;
  865. SEMShader := TGLSLSemShader.Create(self);
  866. MaterialLibrary.LibMaterialByName('MatCapTexture')
  867. .Material.Texture.Image.LoadFromFile('textures\metal_matcap.jpg');
  868. SEMShader.MaterialLibrary := MaterialLibrary;
  869. SEMShader.MainTextureName := 'MatCapTexture';
  870. SEMShader.Enabled := False;
  871. VertexDisplacementShader := TGLSLVertexDisplacementShader.Create(self);
  872. MaterialLibrary.LibMaterialByName('ExplosionTexture')
  873. .Material.Texture.Image.LoadFromFile('textures\FireGrade2.png');
  874. VertexDisplacementShader.MaterialLibrary := MaterialLibrary;
  875. VertexDisplacementShader.MainTextureName := 'ExplosionTexture';
  876. VertexDisplacementShader.Enabled := False;
  877. GlassShader := TGLSLGlassShader.Create(self);
  878. MaterialLibrary.LibMaterialByName('RefractMap')
  879. .Material.Texture.Image.LoadFromFile('textures\barts.jpg');
  880. // Don't load any texture in EnvMap let it empty. The EnvMap is auto generated
  881. // MaterialLibrary.LibMaterialByName('EnvMap').Material.Texture.Image.LoadFromFile('textures\metal_matcap.jpg');
  882. // But we need to make a ScreenShoot of the Scene Once before Enbale the GlassShader; otherwise an exception is raised
  883. // I don't say at this time how to correct this
  884. // capture and create material from framebuffer
  885. Viewer.Buffer.CopyToTexture(MaterialLibrary.LibMaterialByName('EnvMap')
  886. .Material.Texture);
  887. GlassShader.MaterialLibrary := MaterialLibrary;
  888. GlassShader.MainTextureName := 'EnvMap';
  889. GlassShader.RefractionTextureName := 'RefractMap';
  890. GlassShader.OwnerObject := FreeForm;
  891. // GlassShader.Viewer := Viewer;
  892. GlassShader.Enabled := False;
  893. ToonShader := TGLSLToonShader.Create(self);
  894. FreeForm.Visible := true;
  895. Screen.Cursor := crDefault;
  896. i := 0;
  897. j := 0;
  898. v := 0.0;
  899. end;
  900. procedure TFormShaderLab.FormDestroy(Sender: TObject);
  901. begin
  902. Cadencer.Enabled := False;
  903. FurShader.Free;
  904. LatticeShader.Free;
  905. IvoryShader.Free;
  906. GoochShader.Free;
  907. ErosionShader.Free;
  908. SEMShader.Free;
  909. VertexDisplacementShader.Free;
  910. GlassShader.Free;
  911. end;
  912. procedure TFormShaderLab.FormResize(Sender: TObject);
  913. begin
  914. ScreenBackGround.Width := Viewer.Width;
  915. ScreenBackGround.Height := Viewer.Height;
  916. ScreenBackGround.Position.X := Viewer.Width / 2;
  917. ScreenBackGround.Position.Y := Viewer.Height / 2;
  918. end;
  919. procedure TFormShaderLab.chkIvoryShaderClick(Sender: TObject);
  920. begin
  921. IvoryShader.Enabled := chkIvoryShader.Checked;
  922. if IvoryShader.Enabled then
  923. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := IvoryShader
  924. else
  925. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  926. end;
  927. procedure TFormShaderLab.LightCube2Progress(Sender: TObject;
  928. const deltaTime, newTime: Double);
  929. begin
  930. if chkLightmoving.Checked then
  931. LightCube2.MoveObjectAround(Camera.TargetObject, sin(newTime) * deltaTime *
  932. 20, deltaTime * 10);
  933. end;
  934. procedure TFormShaderLab.LightCubeProgress(Sender: TObject;
  935. const deltaTime, newTime: Double);
  936. begin
  937. if chkLightmoving.Checked then
  938. LightCube.MoveObjectAround(Camera.TargetObject, sin(newTime) * deltaTime *
  939. 10, deltaTime * 20);
  940. end;
  941. procedure TFormShaderLab.Shape10MouseDown(Sender: TObject; Button: TMouseButton;
  942. Shift: TShiftState; X, Y: Integer);
  943. begin
  944. if ColorDialog.Execute then
  945. begin
  946. LatticeShader.DiffuseColor.Color := ConvertWinColor(ColorDialog.Color);
  947. Shape10.Brush.Color := ColorDialog.Color;
  948. end;
  949. end;
  950. procedure TFormShaderLab.Shape11MouseDown(Sender: TObject; Button: TMouseButton;
  951. Shift: TShiftState; X, Y: Integer);
  952. begin
  953. if ColorDialog.Execute then
  954. begin
  955. LatticeShader.AmbientColor.Color := ConvertWinColor(ColorDialog.Color);
  956. Shape11.Brush.Color := ColorDialog.Color;
  957. end;
  958. end;
  959. procedure TFormShaderLab.Shape12MouseDown(Sender: TObject; Button: TMouseButton;
  960. Shift: TShiftState; X, Y: Integer);
  961. begin
  962. if ColorDialog.Execute then
  963. begin
  964. LatticeShader.SpecularColor.Color := ConvertWinColor(ColorDialog.Color);
  965. Shape12.Brush.Color := ColorDialog.Color;
  966. end;
  967. end;
  968. procedure TFormShaderLab.Shape13MouseDown(Sender: TObject; Button: TMouseButton;
  969. Shift: TShiftState; X, Y: Integer);
  970. begin
  971. if ColorDialog.Execute then
  972. begin
  973. SEMShader.AmbientColor.Color := ConvertWinColor(ColorDialog.Color);
  974. Shape13.Brush.Color := ColorDialog.Color;
  975. end;
  976. end;
  977. procedure TFormShaderLab.Shape14MouseDown(Sender: TObject; Button: TMouseButton;
  978. Shift: TShiftState; X, Y: Integer);
  979. begin
  980. if ColorDialog.Execute then
  981. begin
  982. SEMShader.SpecularColor.Color := ConvertWinColor(ColorDialog.Color);
  983. Shape14.Brush.Color := ColorDialog.Color;
  984. end;
  985. end;
  986. procedure TFormShaderLab.Shape17MouseDown(Sender: TObject; Button: TMouseButton;
  987. Shift: TShiftState; X, Y: Integer);
  988. begin
  989. if ColorDialog.Execute then
  990. begin
  991. GlassShader.DiffuseColor.Color := ConvertWinColor(ColorDialog.Color);
  992. Shape17.Brush.Color := ColorDialog.Color;
  993. end;
  994. end;
  995. procedure TFormShaderLab.Shape18MouseDown(Sender: TObject; Button: TMouseButton;
  996. Shift: TShiftState; X, Y: Integer);
  997. begin
  998. if ColorDialog.Execute then
  999. begin
  1000. ToonShader.HighlightColor.Color := ConvertWinColor(ColorDialog.Color);
  1001. Shape18.Brush.Color := ColorDialog.Color;
  1002. end;
  1003. end;
  1004. procedure TFormShaderLab.Shape19MouseDown(Sender: TObject; Button: TMouseButton;
  1005. Shift: TShiftState; X, Y: Integer);
  1006. begin
  1007. if ColorDialog.Execute then
  1008. begin
  1009. ToonShader.MidColor.Color := ConvertWinColor(ColorDialog.Color);
  1010. Shape19.Brush.Color := ColorDialog.Color;
  1011. end;
  1012. end;
  1013. procedure TFormShaderLab.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  1014. Shift: TShiftState; X, Y: Integer);
  1015. begin
  1016. if ColorDialog.Execute then
  1017. begin
  1018. FurShader.ColorScale.Color := ConvertWinColor(ColorDialog.Color);
  1019. Shape1.Brush.Color := ColorDialog.Color;
  1020. end;
  1021. end;
  1022. procedure TFormShaderLab.Shape20MouseDown(Sender: TObject; Button: TMouseButton;
  1023. Shift: TShiftState; X, Y: Integer);
  1024. begin
  1025. if ColorDialog.Execute then
  1026. begin
  1027. ToonShader.LightenShadowColor.Color := ConvertWinColor(ColorDialog.Color);
  1028. Shape20.Brush.Color := ColorDialog.Color;
  1029. end;
  1030. end;
  1031. procedure TFormShaderLab.Shape21MouseDown(Sender: TObject; Button: TMouseButton;
  1032. Shift: TShiftState; X, Y: Integer);
  1033. begin
  1034. if ColorDialog.Execute then
  1035. begin
  1036. ToonShader.DarkenShadowrColor.Color := ConvertWinColor(ColorDialog.Color);
  1037. Shape21.Brush.Color := ColorDialog.Color;
  1038. end;
  1039. end;
  1040. procedure TFormShaderLab.Shape22MouseDown(Sender: TObject; Button: TMouseButton;
  1041. Shift: TShiftState; X, Y: Integer);
  1042. begin
  1043. if ColorDialog.Execute then
  1044. begin
  1045. ToonShader.OutlinetColor.Color := ConvertWinColor(ColorDialog.Color);
  1046. Shape22.Brush.Color := ColorDialog.Color;
  1047. end;
  1048. end;
  1049. procedure TFormShaderLab.Shape2MouseDown(Sender: TObject; Button: TMouseButton;
  1050. Shift: TShiftState; X, Y: Integer);
  1051. begin
  1052. if ColorDialog.Execute then
  1053. begin
  1054. FurShader.Ambient.Color := ConvertWinColor(ColorDialog.Color);
  1055. Shape2.Brush.Color := ColorDialog.Color;
  1056. end;
  1057. end;
  1058. procedure TFormShaderLab.Shape3MouseDown(Sender: TObject; Button: TMouseButton;
  1059. Shift: TShiftState; X, Y: Integer);
  1060. begin
  1061. if ColorDialog.Execute then
  1062. begin
  1063. GoochShader.DiffuseColor.Color := ConvertWinColor(ColorDialog.Color);
  1064. Shape3.Brush.Color := ColorDialog.Color;
  1065. end;
  1066. end;
  1067. procedure TFormShaderLab.Shape4MouseDown(Sender: TObject; Button: TMouseButton;
  1068. Shift: TShiftState; X, Y: Integer);
  1069. begin
  1070. if ColorDialog.Execute then
  1071. begin
  1072. GoochShader.WarmColor.Color := ConvertWinColor(ColorDialog.Color);
  1073. Shape4.Brush.Color := ColorDialog.Color;
  1074. end;
  1075. end;
  1076. procedure TFormShaderLab.Shape5MouseDown(Sender: TObject; Button: TMouseButton;
  1077. Shift: TShiftState; X, Y: Integer);
  1078. begin
  1079. if ColorDialog.Execute then
  1080. begin
  1081. GoochShader.CoolColor.Color := ConvertWinColor(ColorDialog.Color);
  1082. Shape5.Brush.Color := ColorDialog.Color;
  1083. end;
  1084. end;
  1085. procedure TFormShaderLab.Shape6MouseDown(Sender: TObject; Button: TMouseButton;
  1086. Shift: TShiftState; X, Y: Integer);
  1087. begin
  1088. if ColorDialog.Execute then
  1089. begin
  1090. GoochShader.AmbientColor.Color := ConvertWinColor(ColorDialog.Color);
  1091. Shape6.Brush.Color := ColorDialog.Color;
  1092. end;
  1093. end;
  1094. procedure TFormShaderLab.Shape7MouseDown(Sender: TObject; Button: TMouseButton;
  1095. Shift: TShiftState; X, Y: Integer);
  1096. begin
  1097. if ColorDialog.Execute then
  1098. begin
  1099. GoochShader.SpecularColor.Color := ConvertWinColor(ColorDialog.Color);
  1100. Shape7.Brush.Color := ColorDialog.Color;
  1101. end;
  1102. end;
  1103. procedure TFormShaderLab.Shape8MouseDown(Sender: TObject; Button: TMouseButton;
  1104. Shift: TShiftState; X, Y: Integer);
  1105. begin
  1106. if ColorDialog.Execute then
  1107. begin
  1108. ErosionShader.AmbientColor.Color := ConvertWinColor(ColorDialog.Color);
  1109. Shape8.Brush.Color := ColorDialog.Color;
  1110. end;
  1111. end;
  1112. procedure TFormShaderLab.Shape9MouseDown(Sender: TObject; Button: TMouseButton;
  1113. Shift: TShiftState; X, Y: Integer);
  1114. begin
  1115. if ColorDialog.Execute then
  1116. begin
  1117. ErosionShader.SpecularColor.Color := ConvertWinColor(ColorDialog.Color);
  1118. Shape9.Brush.Color := ColorDialog.Color;
  1119. end;
  1120. end;
  1121. procedure TFormShaderLab.tbErosionAmbientFChange(Sender: TObject);
  1122. begin
  1123. ErosionShader.AmbientFactor := tbErosionAmbientF.Position / 100;
  1124. lblErosionAmbientF.Caption := FloatToStrF(ErosionShader.AmbientFactor,
  1125. ffFixed, 5, 3);
  1126. end;
  1127. procedure TFormShaderLab.tbErosionAnisoRChange(Sender: TObject);
  1128. begin
  1129. ErosionShader.AnisotropicRoughness := tbErosionAnisoR.Position / 100;
  1130. lblErosionAnisoR.Caption := FloatToStrF(ErosionShader.AnisotropicRoughness,
  1131. ffFixed, 5, 3);
  1132. end;
  1133. procedure TFormShaderLab.tbErosionDiffuseFChange(Sender: TObject);
  1134. begin
  1135. ErosionShader.DiffuseFactor := tbErosionDiffuseF.Position / 100;
  1136. lblErosionDiffuseF.Caption := FloatToStrF(ErosionShader.DiffuseFactor,
  1137. ffFixed, 5, 3);
  1138. end;
  1139. procedure TFormShaderLab.tbErosionFactorChange(Sender: TObject);
  1140. begin
  1141. ErosionShader.ErosionFactor := tbErosionFactor.Position / 100;
  1142. lblErosionFactor.Caption := FloatToStrF(ErosionShader.ErosionFactor,
  1143. ffFixed, 5, 3);
  1144. end;
  1145. procedure TFormShaderLab.tbErosionIFactor1Change(Sender: TObject);
  1146. begin
  1147. ErosionShader.IntensityFactor1 := tbErosionIFactor1.Position / 100;
  1148. lblErosionIFactor1.Caption := FloatToStrF(ErosionShader.IntensityFactor1,
  1149. ffFixed, 5, 3);
  1150. end;
  1151. procedure TFormShaderLab.tbErosionIFactor2Change(Sender: TObject);
  1152. begin
  1153. ErosionShader.IntensityFactor2 := tbErosionIFactor2.Position / 100;
  1154. lblerosionIFactor2.Caption := FloatToStrF(ErosionShader.IntensityFactor2,
  1155. ffFixed, 5, 3);
  1156. end;
  1157. procedure TFormShaderLab.tberosionScaleChange(Sender: TObject);
  1158. begin
  1159. ErosionShader.ErosionScale := tberosionScale.Position / 100;
  1160. lblErosionScale.Caption := FloatToStrF(ErosionShader.ErosionScale,
  1161. ffFixed, 5, 3);
  1162. end;
  1163. procedure TFormShaderLab.tbErosionSpecularFChange(Sender: TObject);
  1164. begin
  1165. ErosionShader.SpecularFactor := tbErosionSpecularF.Position / 100;
  1166. lblErosionSpecularF.Caption := FloatToStrF(ErosionShader.SpecularFactor,
  1167. ffFixed, 5, 3);
  1168. end;
  1169. procedure TFormShaderLab.tbErosionSpecularRChange(Sender: TObject);
  1170. begin
  1171. ErosionShader.SpecularRoughness := tbErosionSpecularR.Position / 100;
  1172. lblErosionSpecularR.Caption := FloatToStrF(ErosionShader.SpecularRoughness,
  1173. ffFixed, 5, 3);
  1174. end;
  1175. procedure TFormShaderLab.tbFurDensityChange(Sender: TObject);
  1176. begin
  1177. FurShader.FurDensity := tbFurDensity.Position / 100;
  1178. lblFurDensity.Caption := FloatToStrF(FurShader.FurDensity, ffFixed, 5, 3);
  1179. end;
  1180. procedure TFormShaderLab.tbFurLengthChange(Sender: TObject);
  1181. begin
  1182. FurShader.FurLength := tbFurLength.Position / 100;
  1183. lblFurLength.Caption := FloatToStrF(FurShader.FurLength, ffFixed, 5, 3);
  1184. end;
  1185. procedure TFormShaderLab.tbFurLightPowerChange(Sender: TObject);
  1186. begin
  1187. FurShader.LightIntensity := tbFurLightPower.Position / 100;
  1188. lblFurLightPower.Caption := FloatToStrF(FurShader.LightIntensity,
  1189. ffFixed, 5, 3);
  1190. end;
  1191. procedure TFormShaderLab.tbFurMaxLengthChange(Sender: TObject);
  1192. begin
  1193. FurShader.MaxFurLength := tbFurMaxLength.Position / 100;
  1194. lblFurMaxLength.Caption := FloatToStrF(FurShader.MaxFurLength, ffFixed, 5, 3);
  1195. end;
  1196. procedure TFormShaderLab.tbFurPassCountChange(Sender: TObject);
  1197. begin
  1198. FurShader.PassCount := tbFurPassCount.Position;
  1199. lblFurPassCount.Caption := FloatToStrF(FurShader.PassCount, ffFixed, 5, 3);
  1200. end;
  1201. procedure TFormShaderLab.tbGlassAlphaChange(Sender: TObject);
  1202. begin
  1203. GlassShader.Alpha := tbGlassAlpha.Position / 100;
  1204. lblGlassAlpha.Caption := FloatToStrF(GlassShader.Alpha, ffFixed, 5, 3);
  1205. end;
  1206. procedure TFormShaderLab.tbGlassDepthChange(Sender: TObject);
  1207. begin
  1208. GlassShader.Depth := tbGlassDepth.Position / 100;
  1209. lblGlassDepth.Caption := FloatToStrF(GlassShader.Depth, ffFixed, 5, 3);
  1210. end;
  1211. procedure TFormShaderLab.tbGlassMixChange(Sender: TObject);
  1212. begin
  1213. GlassShader.Mix := tbGlassMix.Position / 100;
  1214. lblGlassMix.Caption := FloatToStrF(GlassShader.Mix, ffFixed, 5, 3);
  1215. end;
  1216. procedure TFormShaderLab.tbGoochAFactorChange(Sender: TObject);
  1217. begin
  1218. GoochShader.AmbientFactor := tbGoochAFactor.Position / 100;
  1219. lblGoochAFactor.Caption := FloatToStrF(GoochShader.AmbientFactor,
  1220. ffFixed, 5, 3);
  1221. end;
  1222. procedure TFormShaderLab.tbGoochAlphaChange(Sender: TObject);
  1223. begin
  1224. GoochShader.DiffuseColor.Alpha := tbGoochAlpha.Position / 100;
  1225. lblGoochAlpha.Caption := FloatToStrF(GoochShader.DiffuseColor.Alpha,
  1226. 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,
  1237. ffFixed, 5, 3);
  1238. end;
  1239. procedure TFormShaderLab.tbGoochSFactorChange(Sender: TObject);
  1240. begin
  1241. GoochShader.SpecularFactor := tbGoochSFactor.Position / 100;
  1242. lblGoochSFactor.Caption := FloatToStrF(GoochShader.SpecularFactor,
  1243. ffFixed, 5, 3);
  1244. end;
  1245. procedure TFormShaderLab.tbGoochWFactorChange(Sender: TObject);
  1246. begin
  1247. GoochShader.WarmFactor := tbGoochWFactor.Position / 100;
  1248. lblGoochWFactor.Caption := FloatToStrF(GoochShader.WarmFactor, ffFixed, 5, 3);
  1249. end;
  1250. procedure TFormShaderLab.tbLatticeLightPowerChange(Sender: TObject);
  1251. begin
  1252. LatticeShader.LightPower := tbLatticeLightPower.Position / 100;
  1253. lblLatticeLightPower.Caption := FloatToStrF(LatticeShader.LightPower,
  1254. ffFixed, 5, 3);
  1255. end;
  1256. procedure TFormShaderLab.tbLatticeScaleXChange(Sender: TObject);
  1257. begin
  1258. LatticeShader.LatticeScale.X := tbLatticeScaleX.Position;
  1259. lblLatticeScaleX.Caption := FloatToStrF(LatticeShader.LatticeScale.X,
  1260. ffFixed, 5, 0);
  1261. end;
  1262. procedure TFormShaderLab.tbLatticeScaleYChange(Sender: TObject);
  1263. begin
  1264. LatticeShader.LatticeScale.Y := tbLatticeScaleY.Position;
  1265. lblLatticeScaleY.Caption := FloatToStrF(LatticeShader.LatticeScale.Y,
  1266. ffFixed, 5, 0);
  1267. end;
  1268. procedure TFormShaderLab.tbLatticeSpecularPowerChange(Sender: TObject);
  1269. begin
  1270. LatticeShader.SpecularPower := tbLatticeSpecularPower.Position / 100;
  1271. lblLatticeSpecularPower.Caption := FloatToStrF(LatticeShader.SpecularPower,
  1272. ffFixed, 5, 3);
  1273. end;
  1274. procedure TFormShaderLab.tbLatticeThresholdXChange(Sender: TObject);
  1275. begin
  1276. LatticeShader.LatticeThreshold.X := tbLatticeThresholdX.Position / 100;
  1277. lblLatticeThresholdX.Caption := FloatToStrF(LatticeShader.LatticeThreshold.X,
  1278. ffFixed, 5, 3);
  1279. end;
  1280. procedure TFormShaderLab.tbLatticeThresholdYChange(Sender: TObject);
  1281. begin
  1282. LatticeShader.LatticeThreshold.Y := tbLatticeThresholdY.Position / 100;
  1283. lblLatticeThresholdY.Caption := FloatToStrF(LatticeShader.LatticeThreshold.Y,
  1284. ffFixed, 5, 3);
  1285. end;
  1286. procedure TFormShaderLab.tbSemAmbientFChange(Sender: TObject);
  1287. begin
  1288. SEMShader.AmbientFactor := tbSemAmbientF.Position / 100;
  1289. lblSemAmbientF.Caption := FloatToStrF(SEMShader.AmbientFactor, ffFixed, 5, 3);
  1290. end;
  1291. procedure TFormShaderLab.tbSemDiffuseFChange(Sender: TObject);
  1292. begin
  1293. SEMShader.DiffuseFactor := tbSemDiffuseF.Position / 100;
  1294. lblSemDiffuseF.Caption := FloatToStrF(SEMShader.DiffuseFactor, ffFixed, 5, 3);
  1295. end;
  1296. procedure TFormShaderLab.tbSemSpecularFChange(Sender: TObject);
  1297. begin
  1298. SEMShader.SpecularFactor := tbSemSpecularF.Position / 100;
  1299. lblSemSpecularF.Caption := FloatToStrF(SEMShader.SpecularFactor,
  1300. ffFixed, 5, 3);
  1301. end;
  1302. procedure TFormShaderLab.tbToonHighlightSizeChange(Sender: TObject);
  1303. begin
  1304. ToonShader.HighlightSize := tbToonHighlightSize.Position / 100;
  1305. lblToonHighlightSize.Caption := FloatToStrF(ToonShader.HighlightSize,
  1306. ffFixed, 5, 3);
  1307. end;
  1308. procedure TFormShaderLab.tbToonMidSizeChange(Sender: TObject);
  1309. begin
  1310. ToonShader.MidSize := tbToonMidSize.Position / 100;
  1311. lblToonMidSize.Caption := FloatToStrF(ToonShader.MidSize, ffFixed, 5, 3);
  1312. end;
  1313. procedure TFormShaderLab.tbToonOutlineWidthChange(Sender: TObject);
  1314. begin
  1315. ToonShader.OutlineWidth := tbToonOutlineWidth.Position / 100;
  1316. lblToonOutlineWidth.Caption := FloatToStrF(ToonShader.OutlineWidth,
  1317. ffFixed, 5, 3);
  1318. end;
  1319. procedure TFormShaderLab.tbToonShadowSizeChange(Sender: TObject);
  1320. begin
  1321. ToonShader.ShadowSize := tbToonShadowSize.Position / 100;
  1322. lblToonShadowSize.Caption := FloatToStrF(ToonShader.ShadowSize,
  1323. ffFixed, 5, 3);
  1324. end;
  1325. procedure TFormShaderLab.tbVDAmbientFChange(Sender: TObject);
  1326. begin
  1327. VertexDisplacementShader.AmbientFactor := tbVDAmbientF.Position / 100;
  1328. lblVDAmbientF.Caption := FloatToStrF(VertexDisplacementShader.AmbientFactor,
  1329. ffFixed, 5, 3);
  1330. end;
  1331. procedure TFormShaderLab.tbVDDiffuseFChange(Sender: TObject);
  1332. begin
  1333. VertexDisplacementShader.DiffuseFactor := tbVDDiffuseF.Position / 100;
  1334. lblVDDiffuseF.Caption := FloatToStrF(VertexDisplacementShader.DiffuseFactor,
  1335. ffFixed, 5, 3);
  1336. end;
  1337. procedure TFormShaderLab.tbVDDispScaleChange(Sender: TObject);
  1338. begin
  1339. VertexDisplacementShader.DisplacementScale := tbVDDispScale.Position / 100;
  1340. lblVDDispScale.Caption :=
  1341. FloatToStrF(VertexDisplacementShader.DisplacementScale, ffFixed, 5, 3);
  1342. end;
  1343. procedure TFormShaderLab.tbVDNoiseChange(Sender: TObject);
  1344. begin
  1345. VertexDisplacementShader.NoiseFactor := tbVDNoise.Position / 100;
  1346. lblVDNoise.Caption := FloatToStrF(VertexDisplacementShader.NoiseFactor,
  1347. ffFixed, 5, 3);
  1348. end;
  1349. procedure TFormShaderLab.tbVDNScaleChange(Sender: TObject);
  1350. begin
  1351. VertexDisplacementShader.NoiseScale := tbVDNScale.Position / 100;
  1352. lblVDNScale.Caption := FloatToStrF(VertexDisplacementShader.NoiseScale,
  1353. ffFixed, 5, 3);
  1354. end;
  1355. procedure TFormShaderLab.tbVDPeriodChange(Sender: TObject);
  1356. begin
  1357. VertexDisplacementShader.NoisePeriod := tbVDPeriod.Position / 100;
  1358. lblVDPeriod.Caption := FloatToStrF(VertexDisplacementShader.NoisePeriod,
  1359. ffFixed, 5, 3);
  1360. end;
  1361. procedure TFormShaderLab.tbVDSpecularFChange(Sender: TObject);
  1362. begin
  1363. VertexDisplacementShader.SpecularFactor := tbVDSpecularF.Position / 100;
  1364. lblVDSpecularF.Caption := FloatToStrF(VertexDisplacementShader.SpecularFactor,
  1365. ffFixed, 5, 3);
  1366. end;
  1367. procedure TFormShaderLab.tbVDTimeFChange(Sender: TObject);
  1368. begin
  1369. VertexDisplacementShader.TimeFactor := tbVDTimeF.Position / 100;
  1370. lblVDTimeF.Caption := FloatToStrF(VertexDisplacementShader.TimeFactor,
  1371. ffFixed, 5, 3);
  1372. end;
  1373. procedure TFormShaderLab.tbVDTurbChange(Sender: TObject);
  1374. begin
  1375. VertexDisplacementShader.TurbulenceFactor := tbVDTurb.Position / 100;
  1376. lblVDTurb.Caption := FloatToStrF(VertexDisplacementShader.TurbulenceFactor,
  1377. ffFixed, 5, 3);
  1378. end;
  1379. end.