2
0

fShaderLabD.pas 47 KB

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