fShaderLabD.pas 47 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492
  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. 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. Scenario.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. 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 LightCubeProgress(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. GLTorus1.Material.MaterialLibrary := MaterialLibrary;
  487. GLTorus1.Material.LibMaterialName := 'ShaderMaterial';
  488. GLTorus1.Visible := False;
  489. GLSphere1.Material.MaterialLibrary := MaterialLibrary;
  490. GLSphere1.Material.LibMaterialName := 'ShaderMaterial';
  491. GLSphere1.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.FormDestroy(Sender: TObject);
  558. begin
  559. Cadencer.Enabled := False;
  560. FurShader.Free;
  561. LatticeShader.Free;
  562. IvoryShader.Free;
  563. GoochShader.Free;
  564. ErosionShader.Free;
  565. SEMShader.Free;
  566. VertexDisplacementShader.Free;
  567. GlassShader.Free;
  568. end;
  569. procedure TFormShaderLab.FormResize(Sender: TObject);
  570. begin
  571. ScreenBackGround.Width := Viewer.Width;
  572. ScreenBackGround.Height := Viewer.Height;
  573. ScreenBackGround.Position.X := Viewer.Width / 2;
  574. ScreenBackGround.Position.Y := Viewer.Height / 2;
  575. end;
  576. procedure TFormShaderLab.Button10Click(Sender: TObject);
  577. begin
  578. if OpenPictureDialog.Execute then
  579. begin
  580. MaterialLibrary.LibMaterialByName('RefractMap').Material.Texture.Image.LoadFromFile
  581. (OpenPictureDialog.FileName);
  582. end;
  583. end;
  584. procedure TFormShaderLab.Button11Click(Sender: TObject);
  585. begin
  586. if OpenPictureDialog.Execute then
  587. begin
  588. MaterialLibrary.LibMaterialByName('BackgroundTex').Material.Texture.Image.LoadFromFile
  589. (OpenPictureDialog.FileName);
  590. end;
  591. end;
  592. procedure TFormShaderLab.Button1Click(Sender: TObject);
  593. begin
  594. if OpenPictureDialog.Execute then
  595. begin
  596. MaterialLibrary.LibMaterialByName('ExplosionTexture').Material.Texture.Image.LoadFromFile
  597. (OpenPictureDialog.FileName);
  598. end;
  599. end;
  600. procedure TFormShaderLab.Button2Click(Sender: TObject);
  601. begin
  602. if ColorDialog.Execute then
  603. begin
  604. Viewer.Buffer.BackgroundColor := ColorDialog.Color;
  605. end;
  606. end;
  607. procedure TFormShaderLab.Button3Click(Sender: TObject);
  608. begin
  609. VertexDisplacementShader.ElapsedTime := 1.0;
  610. end;
  611. procedure TFormShaderLab.Button4Click(Sender: TObject);
  612. begin
  613. if OpenPictureDialog.Execute then
  614. begin
  615. MaterialLibrary.LibMaterialByName('MatCapTexture').Material.Texture.Image.LoadFromFile
  616. (OpenPictureDialog.FileName);
  617. end;
  618. end;
  619. procedure TFormShaderLab.Button5Click(Sender: TObject);
  620. begin
  621. if OpenPictureDialog.Execute then
  622. begin
  623. MaterialLibrary.LibMaterialByName('ErosionMainTexture').Material.Texture.Image.LoadFromFile
  624. (OpenPictureDialog.FileName);
  625. end;
  626. end;
  627. procedure TFormShaderLab.Button6Click(Sender: TObject);
  628. begin
  629. if OpenPictureDialog.Execute then
  630. begin
  631. MaterialLibrary.LibMaterialByName('ErosionTexture').Material.Texture.Image.LoadFromFile
  632. (OpenPictureDialog.FileName);
  633. end;
  634. end;
  635. procedure TFormShaderLab.Button8Click(Sender: TObject);
  636. begin
  637. if OpenPictureDialog.Execute then
  638. begin
  639. MaterialLibrary.LibMaterialByName('MainTexture').Material.Texture.Image.LoadFromFile
  640. (OpenPictureDialog.FileName);
  641. end;
  642. end;
  643. procedure TFormShaderLab.Button9Click(Sender: TObject);
  644. begin
  645. if OpenPictureDialog.Execute then
  646. begin
  647. MaterialLibrary.LibMaterialByName('NoiseTexture').Material.Texture.Image.LoadFromFile
  648. (OpenPictureDialog.FileName);
  649. end;
  650. end;
  651. procedure TFormShaderLab.CadencerProgress(Sender: TObject; const deltaTime, newTime: Double);
  652. begin
  653. if chkAnimScene.Checked then
  654. begin
  655. // GLSphere1.Pitch(40 * deltaTime);
  656. Objects.Pitch(40 * deltaTime);
  657. Objects.Turn(20 * deltaTime);
  658. Objects.Roll(40 * deltaTime);
  659. end;
  660. if TabSheet1.Enabled then // Fur
  661. begin
  662. if (i <= 10) and (j >= 0) then
  663. begin
  664. v := v + 0.2;
  665. i := i + 1;
  666. if i = 10 then
  667. j := 0;
  668. end;
  669. if (j <= 10) and (i >= 0) then
  670. begin
  671. v := v - 0.2;
  672. j := j + 1;
  673. if j = 10 then
  674. i := 0;
  675. end;
  676. FurShader.Gravity.Y := v;
  677. end;
  678. if chkVDAnimate.Checked then
  679. begin
  680. VertexDisplacementShader.ElapsedTime := newTime;
  681. end;
  682. Viewer.Invalidate;
  683. end;
  684. procedure TFormShaderLab.cbxFurBlendDestChange(Sender: TObject);
  685. begin
  686. FurShader.BlendDst := TGLBlendFunction(cbxFurBlendDest.ItemIndex);
  687. end;
  688. procedure TFormShaderLab.cbxFurBlendSrcChange(Sender: TObject);
  689. begin
  690. FurShader.BlendSrc := TGLBlendFunction(cbxFurBlendSrc.ItemIndex);
  691. end;
  692. procedure TFormShaderLab.cbxGlassBlendDstChange(Sender: TObject);
  693. begin
  694. GlassShader.BlendDst := TGLBlendFunction(cbxGlassBlendDst.ItemIndex);
  695. end;
  696. procedure TFormShaderLab.cbxGlassBlendSrcChange(Sender: TObject);
  697. begin
  698. GlassShader.BlendSrc := TGLBlendFunction(cbxGlassBlendSrc.ItemIndex);
  699. end;
  700. procedure TFormShaderLab.cbxGoochBlendDstChange(Sender: TObject);
  701. begin
  702. // GoochShader.BlendDst := TGLBlendFunction(cbxGoochBlendDst.ItemIndex);
  703. end;
  704. procedure TFormShaderLab.cbxGoochBlendSrcChange(Sender: TObject);
  705. begin
  706. // GoochShader.BlendSrc := TGLBlendFunction(cbxGoochBlendSrc.ItemIndex);
  707. end;
  708. procedure TFormShaderLab.cbxGootchBlendModeChange(Sender: TObject);
  709. begin
  710. case cbxGootchBlendMode.ItemIndex of
  711. 0:
  712. GoochShader.BlendingMode := bmxOpaque;
  713. 1:
  714. GoochShader.BlendingMode := bmxTransparency;
  715. 2:
  716. GoochShader.BlendingMode := bmxAdditive;
  717. 3:
  718. GoochShader.BlendingMode := bmxAlphaTest50;
  719. 4:
  720. GoochShader.BlendingMode := bmxAlphaTest100;
  721. 5:
  722. GoochShader.BlendingMode := bmxModulate;
  723. 6:
  724. GoochShader.BlendingMode := bmxDestColorOne;
  725. 7:
  726. GoochShader.BlendingMode := bmxDestAlphaOne;
  727. end;
  728. end;
  729. procedure TFormShaderLab.cbxObjectsChange(Sender: TObject);
  730. begin
  731. // Then load models
  732. SetCurrentDir(Path + '\model');
  733. case cbxObjects.ItemIndex of
  734. 0:
  735. begin
  736. GLSphere1.Visible := False;
  737. GLTorus1.Visible := False;
  738. FreeForm.LoadFromFile('suzanne-blender.obj');
  739. GlassShader.OwnerObject := FreeForm;
  740. FreeForm.Visible := true;
  741. end;
  742. 1:
  743. begin
  744. GLSphere1.Visible := False;
  745. GLTorus1.Visible := False;
  746. FreeForm.LoadFromFile('torus-knot2.obj');
  747. GlassShader.OwnerObject := FreeForm;
  748. FreeForm.Visible := true;
  749. end;
  750. 2:
  751. begin
  752. GLSphere1.Visible := False;
  753. GLTorus1.Visible := False;
  754. FreeForm.LoadFromFile('pyramid.obj');
  755. GlassShader.OwnerObject := FreeForm;
  756. FreeForm.Visible := true;
  757. end;
  758. 3:
  759. begin
  760. GLSphere1.Visible := False;
  761. GLTorus1.Visible := False;
  762. FreeForm.LoadFromFile('rectangle_spiral.obj');
  763. GlassShader.OwnerObject := FreeForm;
  764. FreeForm.Visible := true;
  765. end;
  766. 4:
  767. begin
  768. GLSphere1.Visible := False;
  769. GLTorus1.Visible := False;
  770. FreeForm.LoadFromFile('geode.obj');
  771. GlassShader.OwnerObject := FreeForm;
  772. FreeForm.Visible := true;
  773. end;
  774. 5:
  775. begin
  776. GLSphere1.Visible := False;
  777. GLTorus1.Visible := False;
  778. FreeForm.LoadFromFile('syamil_19.obj');
  779. GlassShader.OwnerObject := FreeForm;
  780. FreeForm.Visible := true;
  781. end;
  782. 6:
  783. begin
  784. GLSphere1.Visible := False;
  785. FreeForm.Visible := False;
  786. GLTorus1.Visible := true;
  787. GlassShader.OwnerObject := GLTorus1;
  788. end;
  789. 7:
  790. begin
  791. GLTorus1.Visible := False;
  792. FreeForm.Visible := False;
  793. GLSphere1.Visible := true;
  794. GlassShader.OwnerObject := GLSphere1;
  795. end;
  796. end;
  797. end;
  798. procedure TFormShaderLab.chkBackgroundImgClick(Sender: TObject);
  799. begin
  800. Button11.Enabled := chkBackgroundImg.Checked;
  801. ScreenBackGround.Visible := chkBackgroundImg.Checked;
  802. if ScreenBackGround.Visible then
  803. Viewer.Buffer.BackgroundColor := clBlack;
  804. end;
  805. procedure TFormShaderLab.chkErosionShaderClick(Sender: TObject);
  806. begin
  807. ErosionShader.Enabled := chkErosionShader.Checked;
  808. if ErosionShader.Enabled then
  809. begin
  810. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  811. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := ErosionShader
  812. end
  813. else
  814. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  815. end;
  816. procedure TFormShaderLab.chkFurRandomLengthClick(Sender: TObject);
  817. begin
  818. FurShader.RandomFurLength := chkFurRandomLength.Checked;
  819. end;
  820. procedure TFormShaderLab.chkFurShaderClick(Sender: TObject);
  821. begin
  822. FurShader.Enabled := chkFurShader.Checked;
  823. if FurShader.Enabled then
  824. begin
  825. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  826. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := FurShader
  827. end
  828. else
  829. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  830. // GLsphere1.Material.LibMaterialName := 'ShaderMaterial'
  831. // else
  832. // GLsphere1.Material.LibMaterialName := 'MainTexture';
  833. end;
  834. procedure TFormShaderLab.chkLatticeShaderClick(Sender: TObject);
  835. begin
  836. LatticeShader.Enabled := chkLatticeShader.Checked;
  837. if LatticeShader.Enabled then
  838. begin
  839. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  840. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := LatticeShader
  841. end
  842. else
  843. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  844. end;
  845. procedure TFormShaderLab.chkSEMShaderClick(Sender: TObject);
  846. begin
  847. SEMShader.Enabled := chkSEMShader.Checked;
  848. if SEMShader.Enabled then
  849. begin
  850. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  851. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := SEMShader
  852. end
  853. else
  854. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  855. end;
  856. procedure TFormShaderLab.chkToonShaderClick(Sender: TObject);
  857. begin
  858. ToonShader.Enabled := chkToonShader.Checked;
  859. if ToonShader.Enabled then
  860. begin
  861. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  862. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := ToonShader
  863. end
  864. else
  865. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  866. end;
  867. procedure TFormShaderLab.chkVDShaderClick(Sender: TObject);
  868. begin
  869. VertexDisplacementShader.Enabled := chkVDShader.Checked;
  870. if VertexDisplacementShader.Enabled then
  871. begin
  872. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  873. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := VertexDisplacementShader
  874. end
  875. else
  876. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  877. end;
  878. procedure TFormShaderLab.EditFloatKeyPress(Sender: TObject; var Key: Char);
  879. begin
  880. if not CharInSet(Key, ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ',', '-']) then
  881. Key := #0;
  882. end;
  883. procedure TFormShaderLab.edtFurGravityXChange(Sender: TObject);
  884. begin
  885. if (edtFurGravityX.Text <> '') and (edtFurGravityX.Text <> '-') and (edtFurGravityX.Text <> ',')
  886. and (edtFurGravityX.Text <> '.') then
  887. FurShader.Gravity.X := StrToFloat(edtFurGravityX.Text);
  888. end;
  889. procedure TFormShaderLab.edtFurGravityYChange(Sender: TObject);
  890. begin
  891. if (edtFurGravityY.Text <> '') and (edtFurGravityY.Text <> '-') and (edtFurGravityY.Text <> ',')
  892. and (edtFurGravityY.Text <> '.') then
  893. FurShader.Gravity.Y := StrToFloat(edtFurGravityY.Text);
  894. end;
  895. procedure TFormShaderLab.edtFurGravityZChange(Sender: TObject);
  896. begin
  897. if (edtFurGravityZ.Text <> '') and (edtFurGravityZ.Text <> '-') and (edtFurGravityZ.Text <> ',')
  898. and (edtFurGravityZ.Text <> '.') then
  899. FurShader.Gravity.Z := StrToFloat(edtFurGravityZ.Text);
  900. end;
  901. procedure TFormShaderLab.chkGlassShaderClick(Sender: TObject);
  902. begin
  903. GlassShader.Enabled := chkGlassShader.Checked;
  904. if GlassShader.Enabled then
  905. begin
  906. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  907. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := GlassShader
  908. end
  909. else
  910. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  911. end;
  912. procedure TFormShaderLab.chkGoochShaderClick(Sender: TObject);
  913. begin
  914. GoochShader.Enabled := chkGoochShader.Checked;
  915. if GoochShader.Enabled then
  916. begin
  917. // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
  918. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := GoochShader
  919. end
  920. else
  921. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  922. end;
  923. procedure TFormShaderLab.chkIvoryShaderClick(Sender: TObject);
  924. begin
  925. IvoryShader.Enabled := chkIvoryShader.Checked;
  926. if IvoryShader.Enabled then
  927. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := IvoryShader
  928. else
  929. MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
  930. end;
  931. procedure TFormShaderLab.LightCube2Progress(Sender: TObject; const deltaTime, newTime: Double);
  932. begin
  933. if chkLightmoving.Checked then
  934. LightCube2.MoveObjectAround(Camera.TargetObject, sin(newTime) * deltaTime * 20, deltaTime * 10);
  935. end;
  936. procedure TFormShaderLab.LightCubeProgress(Sender: TObject; const deltaTime, newTime: Double);
  937. begin
  938. if chkLightmoving.Checked then
  939. LightCube.MoveObjectAround(Camera.TargetObject, sin(newTime) * deltaTime * 10, deltaTime * 20);
  940. end;
  941. procedure TFormShaderLab.Shape10MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  942. 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; Shift: TShiftState;
  951. 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; Shift: TShiftState;
  960. 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; Shift: TShiftState;
  969. 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; Shift: TShiftState;
  978. 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; Shift: TShiftState;
  987. 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; Shift: TShiftState;
  996. 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; Shift: TShiftState;
  1005. 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; Shift: TShiftState;
  1014. 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; Shift: TShiftState;
  1023. 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; Shift: TShiftState;
  1032. 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; Shift: TShiftState;
  1041. 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; Shift: TShiftState;
  1050. 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; Shift: TShiftState;
  1059. 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; Shift: TShiftState;
  1068. 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; Shift: TShiftState;
  1077. 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; Shift: TShiftState;
  1086. 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; Shift: TShiftState;
  1095. 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.shAmbientErosionMouseDown(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. shAmbientErosion.Brush.Color := ColorDialog.Color;
  1110. end;
  1111. end;
  1112. procedure TFormShaderLab.shSpecularErosionMouseDown(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. shSpecularErosion.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, ffFixed, 5, 3);
  1125. end;
  1126. procedure TFormShaderLab.tbErosionAnisoRChange(Sender: TObject);
  1127. begin
  1128. ErosionShader.AnisotropicRoughness := tbErosionAnisoR.Position / 100;
  1129. lblErosionAnisoR.Caption := FloatToStrF(ErosionShader.AnisotropicRoughness, ffFixed, 5, 3);
  1130. end;
  1131. procedure TFormShaderLab.tbErosionDiffuseFChange(Sender: TObject);
  1132. begin
  1133. ErosionShader.DiffuseFactor := tbErosionDiffuseF.Position / 100;
  1134. lblErosionDiffuseF.Caption := FloatToStrF(ErosionShader.DiffuseFactor, ffFixed, 5, 3);
  1135. end;
  1136. procedure TFormShaderLab.tbErosionFactorChange(Sender: TObject);
  1137. begin
  1138. ErosionShader.ErosionFactor := tbErosionFactor.Position / 100;
  1139. lblErosionFactor.Caption := FloatToStrF(ErosionShader.ErosionFactor, ffFixed, 5, 3);
  1140. end;
  1141. procedure TFormShaderLab.tbErosionIFactor1Change(Sender: TObject);
  1142. begin
  1143. ErosionShader.IntensityFactor1 := tbErosionIFactor1.Position / 100;
  1144. lblErosionIFactor1.Caption := FloatToStrF(ErosionShader.IntensityFactor1, ffFixed, 5, 3);
  1145. end;
  1146. procedure TFormShaderLab.tbErosionIFactor2Change(Sender: TObject);
  1147. begin
  1148. ErosionShader.IntensityFactor2 := tbErosionIFactor2.Position / 100;
  1149. lblerosionIFactor2.Caption := FloatToStrF(ErosionShader.IntensityFactor2, ffFixed, 5, 3);
  1150. end;
  1151. procedure TFormShaderLab.tberosionScaleChange(Sender: TObject);
  1152. begin
  1153. ErosionShader.ErosionScale := tberosionScale.Position / 100;
  1154. lblErosionScale.Caption := FloatToStrF(ErosionShader.ErosionScale, ffFixed, 5, 3);
  1155. end;
  1156. procedure TFormShaderLab.tbErosionSpecularFChange(Sender: TObject);
  1157. begin
  1158. ErosionShader.SpecularFactor := tbErosionSpecularF.Position / 100;
  1159. lblErosionSpecularF.Caption := FloatToStrF(ErosionShader.SpecularFactor, ffFixed, 5, 3);
  1160. end;
  1161. procedure TFormShaderLab.tbErosionSpecularRChange(Sender: TObject);
  1162. begin
  1163. ErosionShader.SpecularRoughness := tbErosionSpecularR.Position / 100;
  1164. lblErosionSpecularR.Caption := FloatToStrF(ErosionShader.SpecularRoughness, ffFixed, 5, 3);
  1165. end;
  1166. procedure TFormShaderLab.tbFurDensityChange(Sender: TObject);
  1167. begin
  1168. FurShader.FurDensity := tbFurDensity.Position / 100;
  1169. lblFurDensity.Caption := FloatToStrF(FurShader.FurDensity, ffFixed, 5, 3);
  1170. end;
  1171. procedure TFormShaderLab.tbFurLengthChange(Sender: TObject);
  1172. begin
  1173. FurShader.FurLength := tbFurLength.Position / 100;
  1174. lblFurLength.Caption := FloatToStrF(FurShader.FurLength, ffFixed, 5, 3);
  1175. end;
  1176. procedure TFormShaderLab.tbFurLightPowerChange(Sender: TObject);
  1177. begin
  1178. FurShader.LightIntensity := tbFurLightPower.Position / 100;
  1179. lblFurLightPower.Caption := FloatToStrF(FurShader.LightIntensity, ffFixed, 5, 3);
  1180. end;
  1181. procedure TFormShaderLab.tbFurMaxLengthChange(Sender: TObject);
  1182. begin
  1183. FurShader.MaxFurLength := tbFurMaxLength.Position / 100;
  1184. lblFurMaxLength.Caption := FloatToStrF(FurShader.MaxFurLength, ffFixed, 5, 3);
  1185. end;
  1186. procedure TFormShaderLab.tbFurPassCountChange(Sender: TObject);
  1187. begin
  1188. FurShader.PassCount := tbFurPassCount.Position;
  1189. lblFurPassCount.Caption := FloatToStrF(FurShader.PassCount, ffFixed, 5, 3);
  1190. end;
  1191. procedure TFormShaderLab.tbGlassAlphaChange(Sender: TObject);
  1192. begin
  1193. GlassShader.Alpha := tbGlassAlpha.Position / 100;
  1194. lblGlassAlpha.Caption := FloatToStrF(GlassShader.Alpha, ffFixed, 5, 3);
  1195. end;
  1196. procedure TFormShaderLab.tbGlassDepthChange(Sender: TObject);
  1197. begin
  1198. GlassShader.Depth := tbGlassDepth.Position / 100;
  1199. lblGlassDepth.Caption := FloatToStrF(GlassShader.Depth, ffFixed, 5, 3);
  1200. end;
  1201. procedure TFormShaderLab.tbGlassMixChange(Sender: TObject);
  1202. begin
  1203. GlassShader.Mix := tbGlassMix.Position / 100;
  1204. lblGlassMix.Caption := FloatToStrF(GlassShader.Mix, ffFixed, 5, 3);
  1205. end;
  1206. procedure TFormShaderLab.tbGoochAFactorChange(Sender: TObject);
  1207. begin
  1208. GoochShader.AmbientFactor := tbGoochAFactor.Position / 100;
  1209. lblGoochAFactor.Caption := FloatToStrF(GoochShader.AmbientFactor, ffFixed, 5, 3);
  1210. end;
  1211. procedure TFormShaderLab.tbGoochAlphaChange(Sender: TObject);
  1212. begin
  1213. GoochShader.DiffuseColor.Alpha := tbGoochAlpha.Position / 100;
  1214. lblGoochAlpha.Caption := FloatToStrF(GoochShader.DiffuseColor.Alpha, ffFixed, 5, 3);
  1215. end;
  1216. procedure TFormShaderLab.tbGoochCFactorChange(Sender: TObject);
  1217. begin
  1218. GoochShader.CoolFactor := tbGoochCFactor.Position / 100;
  1219. lblGoochCFactor.Caption := FloatToStrF(GoochShader.CoolFactor, ffFixed, 5, 3);
  1220. end;
  1221. procedure TFormShaderLab.tbGoochDFactorChange(Sender: TObject);
  1222. begin
  1223. GoochShader.DiffuseFactor := tbGoochDFactor.Position / 100;
  1224. lblGoochDFactor.Caption := FloatToStrF(GoochShader.DiffuseFactor, ffFixed, 5, 3);
  1225. end;
  1226. procedure TFormShaderLab.tbGoochSFactorChange(Sender: TObject);
  1227. begin
  1228. GoochShader.SpecularFactor := tbGoochSFactor.Position / 100;
  1229. lblGoochSFactor.Caption := FloatToStrF(GoochShader.SpecularFactor, ffFixed, 5, 3);
  1230. end;
  1231. procedure TFormShaderLab.tbGoochWFactorChange(Sender: TObject);
  1232. begin
  1233. GoochShader.WarmFactor := tbGoochWFactor.Position / 100;
  1234. lblGoochWFactor.Caption := FloatToStrF(GoochShader.WarmFactor, ffFixed, 5, 3);
  1235. end;
  1236. procedure TFormShaderLab.tbLatticeLightPowerChange(Sender: TObject);
  1237. begin
  1238. LatticeShader.LightPower := tbLatticeLightPower.Position / 100;
  1239. lblLatticeLightPower.Caption := FloatToStrF(LatticeShader.LightPower, ffFixed, 5, 3);
  1240. end;
  1241. procedure TFormShaderLab.tbLatticeScaleXChange(Sender: TObject);
  1242. begin
  1243. LatticeShader.LatticeScale.X := tbLatticeScaleX.Position;
  1244. lblLatticeScaleX.Caption := FloatToStrF(LatticeShader.LatticeScale.X, ffFixed, 5, 0);
  1245. end;
  1246. procedure TFormShaderLab.tbLatticeScaleYChange(Sender: TObject);
  1247. begin
  1248. LatticeShader.LatticeScale.Y := tbLatticeScaleY.Position;
  1249. lblLatticeScaleY.Caption := FloatToStrF(LatticeShader.LatticeScale.Y, ffFixed, 5, 0);
  1250. end;
  1251. procedure TFormShaderLab.tbLatticeSpecularPowerChange(Sender: TObject);
  1252. begin
  1253. LatticeShader.SpecularPower := tbLatticeSpecularPower.Position / 100;
  1254. lblLatticeSpecularPower.Caption := FloatToStrF(LatticeShader.SpecularPower, ffFixed, 5, 3);
  1255. end;
  1256. procedure TFormShaderLab.tbLatticeThresholdXChange(Sender: TObject);
  1257. begin
  1258. LatticeShader.LatticeThreshold.X := tbLatticeThresholdX.Position / 100;
  1259. lblLatticeThresholdX.Caption := FloatToStrF(LatticeShader.LatticeThreshold.X, ffFixed, 5, 3);
  1260. end;
  1261. procedure TFormShaderLab.tbLatticeThresholdYChange(Sender: TObject);
  1262. begin
  1263. LatticeShader.LatticeThreshold.Y := tbLatticeThresholdY.Position / 100;
  1264. lblLatticeThresholdY.Caption := FloatToStrF(LatticeShader.LatticeThreshold.Y, ffFixed, 5, 3);
  1265. end;
  1266. procedure TFormShaderLab.tbSemAmbientFChange(Sender: TObject);
  1267. begin
  1268. SEMShader.AmbientFactor := tbSemAmbientF.Position / 100;
  1269. lblSemAmbientF.Caption := FloatToStrF(SEMShader.AmbientFactor, ffFixed, 5, 3);
  1270. end;
  1271. procedure TFormShaderLab.tbSemDiffuseFChange(Sender: TObject);
  1272. begin
  1273. SEMShader.DiffuseFactor := tbSemDiffuseF.Position / 100;
  1274. lblSemDiffuseF.Caption := FloatToStrF(SEMShader.DiffuseFactor, ffFixed, 5, 3);
  1275. end;
  1276. procedure TFormShaderLab.tbSemSpecularFChange(Sender: TObject);
  1277. begin
  1278. SEMShader.SpecularFactor := tbSemSpecularF.Position / 100;
  1279. lblSemSpecularF.Caption := FloatToStrF(SEMShader.SpecularFactor, ffFixed, 5, 3);
  1280. end;
  1281. procedure TFormShaderLab.tbToonHighlightSizeChange(Sender: TObject);
  1282. begin
  1283. ToonShader.HighlightSize := tbToonHighlightSize.Position / 100;
  1284. lblToonHighlightSize.Caption := FloatToStrF(ToonShader.HighlightSize, ffFixed, 5, 3);
  1285. end;
  1286. procedure TFormShaderLab.tbToonMidSizeChange(Sender: TObject);
  1287. begin
  1288. ToonShader.MidSize := tbToonMidSize.Position / 100;
  1289. lblToonMidSize.Caption := FloatToStrF(ToonShader.MidSize, ffFixed, 5, 3);
  1290. end;
  1291. procedure TFormShaderLab.tbToonOutlineWidthChange(Sender: TObject);
  1292. begin
  1293. ToonShader.OutlineWidth := tbToonOutlineWidth.Position / 100;
  1294. lblToonOutlineWidth.Caption := FloatToStrF(ToonShader.OutlineWidth, ffFixed, 5, 3);
  1295. end;
  1296. procedure TFormShaderLab.tbToonShadowSizeChange(Sender: TObject);
  1297. begin
  1298. ToonShader.ShadowSize := tbToonShadowSize.Position / 100;
  1299. lblToonShadowSize.Caption := FloatToStrF(ToonShader.ShadowSize, ffFixed, 5, 3);
  1300. end;
  1301. procedure TFormShaderLab.tbVDAmbientFChange(Sender: TObject);
  1302. begin
  1303. VertexDisplacementShader.AmbientFactor := tbVDAmbientF.Position / 100;
  1304. lblVDAmbientF.Caption := FloatToStrF(VertexDisplacementShader.AmbientFactor, ffFixed, 5, 3);
  1305. end;
  1306. procedure TFormShaderLab.tbVDDiffuseFChange(Sender: TObject);
  1307. begin
  1308. VertexDisplacementShader.DiffuseFactor := tbVDDiffuseF.Position / 100;
  1309. lblVDDiffuseF.Caption := FloatToStrF(VertexDisplacementShader.DiffuseFactor, ffFixed, 5, 3);
  1310. end;
  1311. procedure TFormShaderLab.tbVDDispScaleChange(Sender: TObject);
  1312. begin
  1313. VertexDisplacementShader.DisplacementScale := tbVDDispScale.Position / 100;
  1314. lblVDDispScale.Caption := FloatToStrF(VertexDisplacementShader.DisplacementScale, ffFixed, 5, 3);
  1315. end;
  1316. procedure TFormShaderLab.tbVDNoiseChange(Sender: TObject);
  1317. begin
  1318. VertexDisplacementShader.NoiseFactor := tbVDNoise.Position / 100;
  1319. lblVDNoise.Caption := FloatToStrF(VertexDisplacementShader.NoiseFactor, ffFixed, 5, 3);
  1320. end;
  1321. procedure TFormShaderLab.tbVDNScaleChange(Sender: TObject);
  1322. begin
  1323. VertexDisplacementShader.NoiseScale := tbVDNScale.Position / 100;
  1324. lblVDNScale.Caption := FloatToStrF(VertexDisplacementShader.NoiseScale, ffFixed, 5, 3);
  1325. end;
  1326. procedure TFormShaderLab.tbVDPeriodChange(Sender: TObject);
  1327. begin
  1328. VertexDisplacementShader.NoisePeriod := tbVDPeriod.Position / 100;
  1329. lblVDPeriod.Caption := FloatToStrF(VertexDisplacementShader.NoisePeriod, ffFixed, 5, 3);
  1330. end;
  1331. procedure TFormShaderLab.tbVDSpecularFChange(Sender: TObject);
  1332. begin
  1333. VertexDisplacementShader.SpecularFactor := tbVDSpecularF.Position / 100;
  1334. lblVDSpecularF.Caption := FloatToStrF(VertexDisplacementShader.SpecularFactor, ffFixed, 5, 3);
  1335. end;
  1336. procedure TFormShaderLab.tbVDTimeFChange(Sender: TObject);
  1337. begin
  1338. VertexDisplacementShader.TimeFactor := tbVDTimeF.Position / 100;
  1339. lblVDTimeF.Caption := FloatToStrF(VertexDisplacementShader.TimeFactor, ffFixed, 5, 3);
  1340. end;
  1341. procedure TFormShaderLab.tbVDTurbChange(Sender: TObject);
  1342. begin
  1343. VertexDisplacementShader.TurbulenceFactor := tbVDTurb.Position / 100;
  1344. lblVDTurb.Caption := FloatToStrF(VertexDisplacementShader.TurbulenceFactor, ffFixed, 5, 3);
  1345. end;
  1346. end.