| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515 |
- unit fdShaderLab;
- interface
- uses
- Winapi.Windows,
- Winapi.Messages,
- Winapi.OpenGL,
- System.SysUtils,
- System.Variants,
- System.Classes,
- System.Math,
- Vcl.Graphics,
- Vcl.Controls,
- Vcl.Forms,
- Vcl.Dialogs,
- Vcl.StdCtrls,
- Vcl.ExtCtrls,
- Vcl.ComCtrls,
- Vcl.ExtDlgs,
- // Picture FileFormats
- Vcl.Imaging.Jpeg,
- Vcl.Imaging.PngImage,
- Stage.VectorTypes,
- GLS.VectorLists,
- Stage.VectorGeometry,
- GLS.BaseClasses,
- GLS.PersistentClasses,
- GLS.XCollection,
- GLS.Material,
- GLS.Scene,
- GLS.SceneViewer,
- GLS.VectorFileObjects,
- GLS.Objects,
- GLS.Texture,
- GLS.Context,
- GLS.Cadencer,
- GLS.Coordinates,
- GLS.State,
- GLS.RenderContextInfo,
- Stage.TextureFormat,
- GLS.Color,
- GLS.Graphics,
- GLS.MeshUtils,
- Stage.Utils,
- GLS.GeomObjects,
- GLS.SimpleNavigation,
- GLS.HUDObjects,
- GLSL.CustomShader,
- GLSL.ShapeShaders;
- type
- TFormShaderLab = class(TForm)
- Panel1: TPanel;
- Viewer: TGLSceneViewer;
- MaterialLibrary: TGLMaterialLibrary;
- GLScene1: TGLScene;
- Cadencer: TGLCadencer;
- World: TGLDummyCube;
- Camera: TGLCamera;
- LightSource1: TGLLightSource;
- Sphere: TGLSphere;
- PageControl: TPageControl;
- TabSheet1: TTabSheet;
- chkAnimScene: TCheckBox;
- chkLightmoving: TCheckBox;
- chkFurShader: TCheckBox;
- LightCube1: TGLDummyCube;
- lblFurDistance: TLabel;
- tbFurLength: TTrackBar;
- TabSheet2: TTabSheet;
- lblLatticeScaleX: TLabel;
- tbLatticeScaleX: TTrackBar;
- lblLatticeThresholdX: TLabel;
- tbLatticeThresholdX: TTrackBar;
- chkLatticeShader: TCheckBox;
- lblLatticeScaleY: TLabel;
- tbLatticeScaleY: TTrackBar;
- tbLatticeThresholdY: TTrackBar;
- TabSheet3: TTabSheet;
- chkErosionShader: TCheckBox;
- FreeForm: TGLFreeForm;
- TabSheet4: TTabSheet;
- chkIvoryShader: TCheckBox;
- LightCube2: TGLDummyCube;
- LightSource2: TGLLightSource;
- Label10: TLabel;
- Label11: TLabel;
- cbxFurBlendSrc: TComboBox;
- cbxFurBlendDest: TComboBox;
- Objects: TGLDummyCube;
- lblFurPassCount1: TLabel;
- tbFurPassCount: TTrackBar;
- Label4: TLabel;
- tbLatticeSpecularPower: TTrackBar;
- Label5: TLabel;
- tbLatticeLightPower: TTrackBar;
- TabSheet5: TTabSheet;
- chkGoochShader: TCheckBox;
- Torus: TGLTorus;
- lblFurLength: TLabel;
- Label7: TLabel;
- tbFurMaxLength: TTrackBar;
- lblFurMaxLength: TLabel;
- lblFurPassCount: TLabel;
- chkFurRandomLength: TCheckBox;
- Label12: TLabel;
- tbFurDensity: TTrackBar;
- lblFurDensity: TLabel;
- Label6: TLabel;
- tbFurLightPower: TTrackBar;
- lblFurLightPower: TLabel;
- Label8: TLabel;
- Label9: TLabel;
- Shape1: TShape;
- Shape2: TShape;
- ColorDialog: TColorDialog;
- Label13: TLabel;
- Shape3: TShape;
- Label14: TLabel;
- Shape4: TShape;
- Label15: TLabel;
- Shape5: TShape;
- Label16: TLabel;
- Shape6: TShape;
- Label17: TLabel;
- Shape7: TShape;
- Label18: TLabel;
- tbGoochDFactor: TTrackBar;
- lblGoochDFactor: TLabel;
- Label20: TLabel;
- tbGoochWFactor: TTrackBar;
- lblGoochWFactor: TLabel;
- Label22: TLabel;
- tbGoochCFactor: TTrackBar;
- lblGoochCFactor: TLabel;
- Label24: TLabel;
- tbGoochAFactor: TTrackBar;
- lblGoochAFactor: TLabel;
- Label26: TLabel;
- tbGoochSFactor: TTrackBar;
- lblGoochSFactor: TLabel;
- Label1: TLabel;
- tbErosionFactor: TTrackBar;
- lblErosionFactor: TLabel;
- Label3: TLabel;
- tberosionScale: TTrackBar;
- lblErosionScale: TLabel;
- Label25: TLabel;
- tbErosionIFactor1: TTrackBar;
- lblErosionIFactor1: TLabel;
- Label28: TLabel;
- tbErosionIFactor2: TTrackBar;
- lblerosionIFactor2: TLabel;
- Label2: TLabel;
- tbErosionAmbientF: TTrackBar;
- lblErosionAmbientF: TLabel;
- Label27: TLabel;
- tbErosionDiffuseF: TTrackBar;
- lblErosionDiffuseF: TLabel;
- Label30: TLabel;
- tbErosionSpecularF: TTrackBar;
- lblErosionSpecularF: TLabel;
- Label32: TLabel;
- tbErosionSpecularR: TTrackBar;
- lblErosionSpecularR: TLabel;
- Label34: TLabel;
- tbErosionAnisoR: TTrackBar;
- lblErosionAnisoR: TLabel;
- Label36: TLabel;
- shAmbientErosion: TShape;
- shSpecularErosion: TShape;
- Label37: TLabel;
- lblLatticeThresholdY: TLabel;
- lblLatticeSpecularPower: TLabel;
- lblLatticeLightPower: TLabel;
- Label23: TLabel;
- Label29: TLabel;
- Label31: TLabel;
- Label33: TLabel;
- Label35: TLabel;
- Shape10: TShape;
- Label38: TLabel;
- Shape11: TShape;
- Label39: TLabel;
- Shape12: TShape;
- cbxGootchBlendMode: TComboBox;
- Label40: TLabel;
- tbGoochAlpha: TTrackBar;
- Label41: TLabel;
- lblGoochAlpha: TLabel;
- TabSheet6: TTabSheet;
- Label19: TLabel;
- tbSemDiffuseF: TTrackBar;
- lblSemDiffuseF: TLabel;
- Label42: TLabel;
- tbSemAmbientF: TTrackBar;
- lblSemAmbientF: TLabel;
- Label44: TLabel;
- tbSemSpecularF: TTrackBar;
- lblSemSpecularF: TLabel;
- Label46: TLabel;
- Shape13: TShape;
- Label47: TLabel;
- Shape14: TShape;
- chkSEMShader: TCheckBox;
- Displacement: TTabSheet;
- chkVDShader: TCheckBox;
- Label21: TLabel;
- tbVDDiffuseF: TTrackBar;
- Label43: TLabel;
- tbVDAmbientF: TTrackBar;
- Label45: TLabel;
- tbVDSpecularF: TTrackBar;
- lblVDSpecularF: TLabel;
- lblVDAmbientF: TLabel;
- lblVDDiffuseF: TLabel;
- Label51: TLabel;
- Shape15: TShape;
- Label52: TLabel;
- Shape16: TShape;
- chkVDAnimate: TCheckBox;
- Label48: TLabel;
- tbVDNoise: TTrackBar;
- lblVDNoise: TLabel;
- Label49: TLabel;
- tbVDPeriod: TTrackBar;
- lblVDPeriod: TLabel;
- Label53: TLabel;
- tbVDNScale: TTrackBar;
- lblVDNScale: TLabel;
- Label55: TLabel;
- tbVDTurb: TTrackBar;
- lblVDTurb: TLabel;
- Label57: TLabel;
- tbVDDispScale: TTrackBar;
- lblVDDispScale: TLabel;
- Label50: TLabel;
- tbVDTimeF: TTrackBar;
- lblVDTimeF: TLabel;
- cbxObjects: TComboBox;
- Label54: TLabel;
- Button2: TButton;
- Button3: TButton;
- GLSimpleNavigation1: TGLSimpleNavigation;
- Button1: TButton;
- Button4: TButton;
- Button5: TButton;
- Button6: TButton;
- Button7: TButton;
- Button8: TButton;
- Button9: TButton;
- OpenPictureDialog: TOpenPictureDialog;
- TabSheet7: TTabSheet;
- Label56: TLabel;
- Label58: TLabel;
- tbGlassDepth: TTrackBar;
- tbGlassMix: TTrackBar;
- Label59: TLabel;
- Shape17: TShape;
- lblGlassDepth: TLabel;
- lblGlassMix: TLabel;
- Button10: TButton;
- chkGlassShader: TCheckBox;
- Label60: TLabel;
- tbGlassAlpha: TTrackBar;
- lblGlassAlpha: TLabel;
- Label61: TLabel;
- cbxGlassBlendSrc: TComboBox;
- Label62: TLabel;
- cbxGlassBlendDst: TComboBox;
- ScreenBackGround: TGLHUDSprite;
- chkBackgroundImg: TCheckBox;
- Button11: TButton;
- Label63: TLabel;
- edtFurGravityX: TEdit;
- edtFurGravityY: TEdit;
- edtFurGravityZ: TEdit;
- TabSheet8: TTabSheet;
- chkToonShader: TCheckBox;
- Label64: TLabel;
- tbToonHighlightSize: TTrackBar;
- lblToonHighlightSize: TLabel;
- Label66: TLabel;
- tbToonMidSize: TTrackBar;
- lblToonMidSize: TLabel;
- Label68: TLabel;
- tbToonShadowSize: TTrackBar;
- lblToonShadowSize: TLabel;
- Label70: TLabel;
- tbToonOutlineWidth: TTrackBar;
- lblToonOutlineWidth: TLabel;
- Label72: TLabel;
- Shape18: TShape;
- Label73: TLabel;
- Shape19: TShape;
- Label74: TLabel;
- Shape20: TShape;
- Label75: TLabel;
- Shape21: TShape;
- Label76: TLabel;
- Shape22: TShape;
- Teapot: TGLTeapot;
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure chkFurShaderClick(Sender: TObject);
- procedure CadencerProgress(Sender: TObject; const deltaTime, newTime: Double);
- procedure LightCube1Progress(Sender: TObject; const deltaTime, newTime: Double);
- procedure tbFurLengthChange(Sender: TObject);
- procedure tbLatticeScaleXChange(Sender: TObject);
- procedure chkLatticeShaderClick(Sender: TObject);
- procedure tbLatticeScaleYChange(Sender: TObject);
- procedure tbLatticeThresholdXChange(Sender: TObject);
- procedure tbLatticeThresholdYChange(Sender: TObject);
- procedure chkIvoryShaderClick(Sender: TObject);
- procedure LightCube2Progress(Sender: TObject; const deltaTime, newTime: Double);
- procedure cbxFurBlendDestChange(Sender: TObject);
- procedure cbxFurBlendSrcChange(Sender: TObject);
- procedure tbFurPassCountChange(Sender: TObject);
- procedure chkGoochShaderClick(Sender: TObject);
- procedure tbFurMaxLengthChange(Sender: TObject);
- procedure tbFurDensityChange(Sender: TObject);
- procedure chkFurRandomLengthClick(Sender: TObject);
- procedure tbFurLightPowerChange(Sender: TObject);
- procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- procedure Shape2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- procedure Shape3MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- procedure Shape4MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- procedure Shape5MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- procedure Shape6MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- procedure Shape7MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- procedure tbGoochDFactorChange(Sender: TObject);
- procedure tbGoochWFactorChange(Sender: TObject);
- procedure tbGoochCFactorChange(Sender: TObject);
- procedure tbGoochAFactorChange(Sender: TObject);
- procedure tbGoochSFactorChange(Sender: TObject);
- procedure cbxGoochBlendSrcChange(Sender: TObject);
- procedure cbxGoochBlendDstChange(Sender: TObject);
- procedure chkErosionShaderClick(Sender: TObject);
- procedure tbErosionFactorChange(Sender: TObject);
- procedure tberosionScaleChange(Sender: TObject);
- procedure tbErosionIFactor1Change(Sender: TObject);
- procedure tbErosionIFactor2Change(Sender: TObject);
- procedure tbErosionDiffuseFChange(Sender: TObject);
- procedure tbErosionAmbientFChange(Sender: TObject);
- procedure tbErosionSpecularFChange(Sender: TObject);
- procedure tbErosionSpecularRChange(Sender: TObject);
- procedure tbErosionAnisoRChange(Sender: TObject);
- procedure shAmbientErosionMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- procedure shSpecularErosionMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- procedure tbLatticeSpecularPowerChange(Sender: TObject);
- procedure tbLatticeLightPowerChange(Sender: TObject);
- procedure Shape10MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- procedure Shape11MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- procedure Shape12MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- procedure cbxGootchBlendModeChange(Sender: TObject);
- procedure tbGoochAlphaChange(Sender: TObject);
- procedure chkSEMShaderClick(Sender: TObject);
- procedure tbSemDiffuseFChange(Sender: TObject);
- procedure tbSemAmbientFChange(Sender: TObject);
- procedure tbSemSpecularFChange(Sender: TObject);
- procedure Shape13MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- procedure Shape14MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- procedure chkVDShaderClick(Sender: TObject);
- procedure tbVDDiffuseFChange(Sender: TObject);
- procedure tbVDAmbientFChange(Sender: TObject);
- procedure tbVDSpecularFChange(Sender: TObject);
- procedure tbVDNoiseChange(Sender: TObject);
- procedure tbVDPeriodChange(Sender: TObject);
- procedure tbVDNScaleChange(Sender: TObject);
- procedure tbVDTurbChange(Sender: TObject);
- procedure tbVDDispScaleChange(Sender: TObject);
- procedure tbVDTimeFChange(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure cbxObjectsChange(Sender: TObject);
- procedure Button3Click(Sender: TObject);
- procedure Button8Click(Sender: TObject);
- procedure Button5Click(Sender: TObject);
- procedure Button6Click(Sender: TObject);
- procedure Button1Click(Sender: TObject);
- procedure Button4Click(Sender: TObject);
- procedure Button9Click(Sender: TObject);
- procedure chkGlassShaderClick(Sender: TObject);
- procedure Shape17MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- procedure tbGlassDepthChange(Sender: TObject);
- procedure tbGlassMixChange(Sender: TObject);
- procedure Button10Click(Sender: TObject);
- procedure tbGlassAlphaChange(Sender: TObject);
- procedure cbxGlassBlendSrcChange(Sender: TObject);
- procedure cbxGlassBlendDstChange(Sender: TObject);
- procedure FormResize(Sender: TObject);
- procedure Button11Click(Sender: TObject);
- procedure chkBackgroundImgClick(Sender: TObject);
- procedure EditFloatKeyPress(Sender: TObject; var Key: Char);
- procedure edtFurGravityXChange(Sender: TObject);
- procedure edtFurGravityYChange(Sender: TObject);
- procedure edtFurGravityZChange(Sender: TObject);
- procedure chkToonShaderClick(Sender: TObject);
- procedure tbToonHighlightSizeChange(Sender: TObject);
- procedure tbToonMidSizeChange(Sender: TObject);
- procedure tbToonShadowSizeChange(Sender: TObject);
- procedure tbToonOutlineWidthChange(Sender: TObject);
- procedure Shape18MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- procedure Shape19MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- procedure Shape20MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- procedure Shape21MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- procedure Shape22MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- public
- Path: TFileName;
- end;
- var
- FormShaderLab: TFormShaderLab;
- mx, my: Integer;
- FurShader: TGLSLFurShader;
- LatticeShader: TGLSLLatticeShader;
- IvoryShader: TGLSLIvoryShader;
- GoochShader: TGLSLSimpleGoochShader;
- ErosionShader: TGLSLSimpleErosionShader;
- SEMShader: TGLSLSemShader;
- VertexDisplacementShader: TGLSLVertexDisplacementShader;
- GlassShader: TGLSLGlassShader;
- ToonShader: TGLSLToonShader;
- // DimpleShader
- // WoodShader
- // PhongShader
- // CookTorrenceShader
- // OreilNayar
- i, j: Integer;
- v: Single;
- implementation // =============================================================
- {$R *.dfm}
- uses
- GLS.FileTGA,
- GLS.FileOBJ,
- GLS.FileSTL,
- GLS.FileLWO,
- GLS.FileQ3BSP,
- GLS.FileOCT,
- GLS.FileMS3D,
- GLS.FileNMF,
- GLS.FileMD3,
- GLS.File3DS,
- GLS.FileMD2,
- GLS.FileSMD,
- GLS.FilePLY,
- GLS.FileGTS,
- GLS.FileVRML,
- GLS.FileMD5,
- GLS.FileTIN,
- GLS.FileDXF,
- GLS.FileGRD;
- procedure TFormShaderLab.FormCreate(Sender: TObject);
- begin
- Path := GetCurrentAssetPath();
- SetCurrentDir(Path + '\model');
- Screen.Cursor := crHourGlass;
- // FreeForm.IgnoreMissingTextures := True;
- FreeForm.LoadFromFile('suzanne.obj');
- FreeForm.Visible := False;
- // Then load textures
- SetCurrentDir(Path + '\texture');
- MaterialLibrary.LibMaterialByName('ShaderMaterial').Material.Texture.Image.LoadFromFile
- ('bigtiger.jpg');
- MaterialLibrary.LibMaterialByName('BackgroundTex').Material.Texture.Image.LoadFromFile
- ('randal.jpg');
- FreeForm.Material.MaterialLibrary := MaterialLibrary;
- FreeForm.Material.LibMaterialName := 'ShaderMaterial';
- Torus.Material.MaterialLibrary := MaterialLibrary;
- Torus.Material.LibMaterialName := 'ShaderMaterial';
- Torus.Visible := False;
- Sphere.Material.MaterialLibrary := MaterialLibrary;
- Sphere.Material.LibMaterialName := 'ShaderMaterial';
- Sphere.Visible := False;
- MaterialLibrary.LibMaterialByName('MainTexture').Material.Texture.Image.LoadFromFile
- ('bigtiger.jpg');
- // My Shader
- FurShader := TGLSLFurShader.Create(self);
- MaterialLibrary.LibMaterialByName('NoiseTexture').Material.Texture.Image.LoadFromFile('fur.tga');
- FurShader.MaterialLibrary := MaterialLibrary;
- FurShader.MainTextureName := 'MainTexture';
- FurShader.NoiseTextureName := 'NoiseTexture';
- FurShader.Gravity.X := 0;
- FurShader.Gravity.Y := -2.0;
- FurShader.Gravity.Z := 0;
- FurShader.Enabled := False;
- LatticeShader := TGLSLLatticeShader.Create(self);
- LatticeShader.MaterialLibrary := MaterialLibrary;
- LatticeShader.MainTextureName := 'MainTexture';
- LatticeShader.Enabled := False;
- ErosionShader := TGLSLSimpleErosionShader.Create(self);
- MaterialLibrary.LibMaterialByName('ErosionNoiseTexture').Material.Texture.Image.LoadFromFile
- ('ErosionNoise.tga');
- MaterialLibrary.LibMaterialByName('ErosionMainTexture').Material.Texture.Image.LoadFromFile
- ('eroded_scratch_metal_texture.jpg');
- MaterialLibrary.LibMaterialByName('ErosionTexture').Material.Texture.Image.LoadFromFile
- ('rust_eroded_scratch_metal_texture.jpg');
- ErosionShader.MaterialLibrary := MaterialLibrary;
- ErosionShader.MainTextureName := 'ErosionMainTexture';
- ErosionShader.ErosionTextureName := 'ErosionTexture';
- ErosionShader.NoiseTextureName := 'ErosionNoiseTexture';
- ErosionShader.Enabled := False;
- IvoryShader := TGLSLIvoryShader.Create(self);
- IvoryShader.Enabled := False;
- GoochShader := TGLSLSimpleGoochShader.Create(self);
- GoochShader.Enabled := False;
- SEMShader := TGLSLSemShader.Create(self);
- MaterialLibrary.LibMaterialByName('MatCapTexture').Material.Texture.Image.LoadFromFile
- ('metal_matcap.jpg');
- SEMShader.MaterialLibrary := MaterialLibrary;
- SEMShader.MainTextureName := 'MatCapTexture';
- SEMShader.Enabled := False;
- VertexDisplacementShader := TGLSLVertexDisplacementShader.Create(self);
- MaterialLibrary.LibMaterialByName('ExplosionTexture').Material.Texture.Image.LoadFromFile
- ('FireGrade.png');
- VertexDisplacementShader.MaterialLibrary := MaterialLibrary;
- VertexDisplacementShader.MainTextureName := 'ExplosionTexture';
- VertexDisplacementShader.Enabled := False;
- GlassShader := TGLSLGlassShader.Create(self);
- MaterialLibrary.LibMaterialByName('RefractMap').Material.Texture.Image.LoadFromFile('barts.jpg');
- // Don't load any texture in EnvMap let it empty. The EnvMap is auto generated
- // MaterialLibrary.LibMaterialByName('EnvMap').Material.Texture.Image.LoadFromFile('textures\metal_matcap.jpg');
- // But we need to make a ScreenShoot of the Scene Once before Enable the GlassShader; otherwise an exception is raised
- // We don't say at this time how to correct this capture and create material from framebuffer
- Viewer.Buffer.CopyToTexture(MaterialLibrary.LibMaterialByName('EnvMap').Material.Texture);
- GlassShader.MaterialLibrary := MaterialLibrary;
- GlassShader.MainTextureName := 'EnvMap';
- GlassShader.RefractionTextureName := 'RefractMap';
- GlassShader.OwnerObject := FreeForm;
- // GlassShader.Viewer := Viewer;
- GlassShader.Enabled := False;
- ToonShader := TGLSLToonShader.Create(self);
- FreeForm.Visible := true;
- Screen.Cursor := crDefault;
- i := 0;
- j := 0;
- v := 0.0;
- cbxObjects.ItemIndex := 0; // Suzanne
- end;
- //----------------------------------------------------------------------------
- procedure TFormShaderLab.FormResize(Sender: TObject);
- begin
- ScreenBackGround.Width := Viewer.Width;
- ScreenBackGround.Height := Viewer.Height;
- ScreenBackGround.Position.X := Viewer.Width / 2;
- ScreenBackGround.Position.Y := Viewer.Height / 2;
- end;
- procedure TFormShaderLab.Button10Click(Sender: TObject);
- begin
- if OpenPictureDialog.Execute then
- begin
- MaterialLibrary.LibMaterialByName('RefractMap').Material.Texture.Image.LoadFromFile
- (OpenPictureDialog.FileName);
- end;
- end;
- procedure TFormShaderLab.Button11Click(Sender: TObject);
- begin
- if OpenPictureDialog.Execute then
- begin
- MaterialLibrary.LibMaterialByName('BackgroundTex').Material.Texture.Image.LoadFromFile
- (OpenPictureDialog.FileName);
- end;
- end;
- procedure TFormShaderLab.Button1Click(Sender: TObject);
- begin
- if OpenPictureDialog.Execute then
- begin
- MaterialLibrary.LibMaterialByName('ExplosionTexture').Material.Texture.Image.LoadFromFile
- (OpenPictureDialog.FileName);
- end;
- end;
- procedure TFormShaderLab.Button2Click(Sender: TObject);
- begin
- if ColorDialog.Execute then
- begin
- Viewer.Buffer.BackgroundColor := ColorDialog.Color;
- end;
- end;
- procedure TFormShaderLab.Button3Click(Sender: TObject);
- begin
- VertexDisplacementShader.ElapsedTime := 1.0;
- end;
- procedure TFormShaderLab.Button4Click(Sender: TObject);
- begin
- if OpenPictureDialog.Execute then
- begin
- MaterialLibrary.LibMaterialByName('MatCapTexture').Material.Texture.Image.LoadFromFile
- (OpenPictureDialog.FileName);
- end;
- end;
- procedure TFormShaderLab.Button5Click(Sender: TObject);
- begin
- if OpenPictureDialog.Execute then
- begin
- MaterialLibrary.LibMaterialByName('ErosionMainTexture').Material.Texture.Image.LoadFromFile
- (OpenPictureDialog.FileName);
- end;
- end;
- procedure TFormShaderLab.Button6Click(Sender: TObject);
- begin
- if OpenPictureDialog.Execute then
- begin
- MaterialLibrary.LibMaterialByName('ErosionTexture').Material.Texture.Image.LoadFromFile
- (OpenPictureDialog.FileName);
- end;
- end;
- procedure TFormShaderLab.Button8Click(Sender: TObject);
- begin
- if OpenPictureDialog.Execute then
- begin
- MaterialLibrary.LibMaterialByName('MainTexture').Material.Texture.Image.LoadFromFile
- (OpenPictureDialog.FileName);
- end;
- end;
- procedure TFormShaderLab.Button9Click(Sender: TObject);
- begin
- if OpenPictureDialog.Execute then
- begin
- MaterialLibrary.LibMaterialByName('NoiseTexture').Material.Texture.Image.LoadFromFile
- (OpenPictureDialog.FileName);
- end;
- end;
- procedure TFormShaderLab.CadencerProgress(Sender: TObject; const deltaTime, newTime: Double);
- begin
- if chkAnimScene.Checked then
- begin
- // GLSphere1.Pitch(40 * deltaTime);
- Objects.Pitch(40 * deltaTime);
- Objects.Turn(20 * deltaTime);
- Objects.Roll(40 * deltaTime);
- end;
- if TabSheet1.Enabled then // Fur
- begin
- if (i <= 10) and (j >= 0) then
- begin
- v := v + 0.2;
- i := i + 1;
- if i = 10 then
- j := 0;
- end;
- if (j <= 10) and (i >= 0) then
- begin
- v := v - 0.2;
- j := j + 1;
- if j = 10 then
- i := 0;
- end;
- FurShader.Gravity.Y := v;
- end;
- if chkVDAnimate.Checked then
- begin
- VertexDisplacementShader.ElapsedTime := newTime;
- end;
- Viewer.Invalidate;
- end;
- procedure TFormShaderLab.cbxFurBlendDestChange(Sender: TObject);
- begin
- FurShader.BlendDst := TGLBlendFunction(cbxFurBlendDest.ItemIndex);
- end;
- procedure TFormShaderLab.cbxFurBlendSrcChange(Sender: TObject);
- begin
- FurShader.BlendSrc := TGLBlendFunction(cbxFurBlendSrc.ItemIndex);
- end;
- procedure TFormShaderLab.cbxGlassBlendDstChange(Sender: TObject);
- begin
- GlassShader.BlendDst := TGLBlendFunction(cbxGlassBlendDst.ItemIndex);
- end;
- procedure TFormShaderLab.cbxGlassBlendSrcChange(Sender: TObject);
- begin
- GlassShader.BlendSrc := TGLBlendFunction(cbxGlassBlendSrc.ItemIndex);
- end;
- procedure TFormShaderLab.cbxGoochBlendDstChange(Sender: TObject);
- begin
- // GoochShader.BlendDst := TGLBlendFunction(cbxGoochBlendDst.ItemIndex);
- end;
- procedure TFormShaderLab.cbxGoochBlendSrcChange(Sender: TObject);
- begin
- // GoochShader.BlendSrc := TGLBlendFunction(cbxGoochBlendSrc.ItemIndex);
- end;
- procedure TFormShaderLab.cbxGootchBlendModeChange(Sender: TObject);
- begin
- case cbxGootchBlendMode.ItemIndex of
- 0:
- GoochShader.BlendingMode := bmxOpaque;
- 1:
- GoochShader.BlendingMode := bmxTransparency;
- 2:
- GoochShader.BlendingMode := bmxAdditive;
- 3:
- GoochShader.BlendingMode := bmxAlphaTest50;
- 4:
- GoochShader.BlendingMode := bmxAlphaTest100;
- 5:
- GoochShader.BlendingMode := bmxModulate;
- 6:
- GoochShader.BlendingMode := bmxDestColorOne;
- 7:
- GoochShader.BlendingMode := bmxDestAlphaOne;
- end;
- end;
- procedure TFormShaderLab.cbxObjectsChange(Sender: TObject);
- begin
- // Then load models
- SetCurrentDir(Path + '\model');
- case cbxObjects.ItemIndex of
- 0:
- begin
- FreeForm.Visible := True;
- Sphere.Visible := False;
- Torus.Visible := False;
- Teapot.Visible := False;
- FreeForm.LoadFromFile('suzanne.obj');
- GlassShader.OwnerObject := FreeForm;
- end;
- 1:
- begin
- FreeForm.Visible := True;
- Sphere.Visible := False;
- Torus.Visible := False;
- Teapot.Visible := False;
- FreeForm.LoadFromFile('knot.obj');
- GlassShader.OwnerObject := FreeForm;
- end;
- 2:
- begin // teapot
- FreeForm.Visible := False;
- Sphere.Visible := False;
- Torus.Visible := False;
- Teapot.Visible := True;
- GlassShader.OwnerObject := Teapot;
- end;
- 3:
- begin
- FreeForm.Visible := True;
- Sphere.Visible := False;
- Torus.Visible := False;
- Teapot.Visible := False;
- FreeForm.LoadFromFile('rectangles.obj');
- GlassShader.OwnerObject := FreeForm;
- end;
- 4:
- begin
- FreeForm.Visible := True;
- Sphere.Visible := False;
- Torus.Visible := False;
- Teapot.Visible := False;
- FreeForm.LoadFromFile('geode.obj');
- GlassShader.OwnerObject := FreeForm;
- end;
- 5:
- begin
- FreeForm.Visible := True;
- Sphere.Visible := False;
- Torus.Visible := False;
- Teapot.Visible := False;
- FreeForm.LoadFromFile('syamil.obj');
- GlassShader.OwnerObject := FreeForm;
- end;
- 6:
- begin // torus
- FreeForm.Visible := False;
- Sphere.Visible := False;
- Teapot.Visible := False;
- Torus.Visible := True;
- GlassShader.OwnerObject := Torus;
- end;
- 7:
- begin // sphere
- FreeForm.Visible := False;
- Torus.Visible := False;
- Teapot.Visible := False;
- Sphere.Visible := True;
- GlassShader.OwnerObject := Sphere;
- end;
- end;
- end;
- //---------------------------------------------------------------------------
- procedure TFormShaderLab.chkBackgroundImgClick(Sender: TObject);
- begin
- Button11.Enabled := chkBackgroundImg.Checked;
- ScreenBackGround.Visible := chkBackgroundImg.Checked;
- if ScreenBackGround.Visible then
- Viewer.Buffer.BackgroundColor := clBlack;
- end;
- //---------------------------------------------------------------------------
- procedure TFormShaderLab.chkErosionShaderClick(Sender: TObject);
- begin
- ErosionShader.Enabled := chkErosionShader.Checked;
- if ErosionShader.Enabled then
- begin
- // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
- MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := ErosionShader
- end
- else
- MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
- end;
- //---------------------------------------------------------------------------
- procedure TFormShaderLab.chkFurRandomLengthClick(Sender: TObject);
- begin
- FurShader.RandomFurLength := chkFurRandomLength.Checked;
- end;
- procedure TFormShaderLab.chkFurShaderClick(Sender: TObject);
- begin
- FurShader.Enabled := chkFurShader.Checked;
- if FurShader.Enabled then
- begin
- // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
- MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := FurShader
- end
- else
- MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
- // GLsphere1.Material.LibMaterialName := 'ShaderMaterial'
- // else
- // GLsphere1.Material.LibMaterialName := 'MainTexture';
- end;
- //---------------------------------------------------------------------------
- procedure TFormShaderLab.chkLatticeShaderClick(Sender: TObject);
- begin
- LatticeShader.Enabled := chkLatticeShader.Checked;
- if LatticeShader.Enabled then
- begin
- // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
- MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := LatticeShader
- end
- else
- MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
- end;
- procedure TFormShaderLab.chkSEMShaderClick(Sender: TObject);
- begin
- SEMShader.Enabled := chkSEMShader.Checked;
- if SEMShader.Enabled then
- begin
- // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
- MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := SEMShader
- end
- else
- MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
- end;
- procedure TFormShaderLab.chkToonShaderClick(Sender: TObject);
- begin
- ToonShader.Enabled := chkToonShader.Checked;
- if ToonShader.Enabled then
- begin
- // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
- MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := ToonShader
- end
- else
- MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
- end;
- procedure TFormShaderLab.chkVDShaderClick(Sender: TObject);
- begin
- VertexDisplacementShader.Enabled := chkVDShader.Checked;
- if VertexDisplacementShader.Enabled then
- begin
- // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
- MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := VertexDisplacementShader
- end
- else
- MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
- end;
- //---------------------------------------------------------------------------
- procedure TFormShaderLab.EditFloatKeyPress(Sender: TObject; var Key: Char);
- begin
- if not CharInSet(Key, ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ',', '-']) then
- Key := #0;
- end;
- procedure TFormShaderLab.edtFurGravityXChange(Sender: TObject);
- begin
- if (edtFurGravityX.Text <> '') and (edtFurGravityX.Text <> '-') and (edtFurGravityX.Text <> ',')
- and (edtFurGravityX.Text <> '.') then
- FurShader.Gravity.X := StrToFloat(edtFurGravityX.Text);
- end;
- procedure TFormShaderLab.edtFurGravityYChange(Sender: TObject);
- begin
- if (edtFurGravityY.Text <> '') and (edtFurGravityY.Text <> '-') and (edtFurGravityY.Text <> ',')
- and (edtFurGravityY.Text <> '.') then
- FurShader.Gravity.Y := StrToFloat(edtFurGravityY.Text);
- end;
- procedure TFormShaderLab.edtFurGravityZChange(Sender: TObject);
- begin
- if (edtFurGravityZ.Text <> '') and (edtFurGravityZ.Text <> '-') and (edtFurGravityZ.Text <> ',')
- and (edtFurGravityZ.Text <> '.') then
- FurShader.Gravity.Z := StrToFloat(edtFurGravityZ.Text);
- end;
- procedure TFormShaderLab.chkGlassShaderClick(Sender: TObject);
- begin
- GlassShader.Enabled := chkGlassShader.Checked;
- if GlassShader.Enabled then
- begin
- // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
- MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := GlassShader
- end
- else
- MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
- end;
- procedure TFormShaderLab.chkGoochShaderClick(Sender: TObject);
- begin
- GoochShader.Enabled := chkGoochShader.Checked;
- if GoochShader.Enabled then
- begin
- // MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader.Enabled := False;
- MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := GoochShader
- end
- else
- MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
- end;
- //---------------------------------------------------------------------------
- procedure TFormShaderLab.chkIvoryShaderClick(Sender: TObject);
- begin
- IvoryShader.Enabled := chkIvoryShader.Checked;
- if IvoryShader.Enabled then
- MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := IvoryShader
- else
- MaterialLibrary.LibMaterialByName('ShaderMaterial').Shader := nil;
- end;
- procedure TFormShaderLab.LightCube2Progress(Sender: TObject; const deltaTime, newTime: Double);
- begin
- if chkLightmoving.Checked then
- LightCube2.MoveObjectAround(Camera.TargetObject, sin(newTime) * deltaTime * 20, deltaTime * 10);
- end;
- procedure TFormShaderLab.LightCube1Progress(Sender: TObject; const deltaTime, newTime: Double);
- begin
- if chkLightmoving.Checked then
- LightCube1.MoveObjectAround(Camera.TargetObject, sin(newTime) * deltaTime * 10, deltaTime * 20);
- end;
- //---------------------------------------------------------------------------
- procedure TFormShaderLab.Shape10MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- begin
- if ColorDialog.Execute then
- begin
- LatticeShader.DiffuseColor.Color := ConvertWinColor(ColorDialog.Color);
- Shape10.Brush.Color := ColorDialog.Color;
- end;
- end;
- //---------------------------------------------------------------------------
- procedure TFormShaderLab.Shape11MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- begin
- if ColorDialog.Execute then
- begin
- LatticeShader.AmbientColor.Color := ConvertWinColor(ColorDialog.Color);
- Shape11.Brush.Color := ColorDialog.Color;
- end;
- end;
- //---------------------------------------------------------------------------
- procedure TFormShaderLab.Shape12MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- begin
- if ColorDialog.Execute then
- begin
- LatticeShader.SpecularColor.Color := ConvertWinColor(ColorDialog.Color);
- Shape12.Brush.Color := ColorDialog.Color;
- end;
- end;
- procedure TFormShaderLab.Shape13MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- begin
- if ColorDialog.Execute then
- begin
- SEMShader.AmbientColor.Color := ConvertWinColor(ColorDialog.Color);
- Shape13.Brush.Color := ColorDialog.Color;
- end;
- end;
- procedure TFormShaderLab.Shape14MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- begin
- if ColorDialog.Execute then
- begin
- SEMShader.SpecularColor.Color := ConvertWinColor(ColorDialog.Color);
- Shape14.Brush.Color := ColorDialog.Color;
- end;
- end;
- //---------------------------------------------------------------------------
- procedure TFormShaderLab.Shape17MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- begin
- if ColorDialog.Execute then
- begin
- GlassShader.DiffuseColor.Color := ConvertWinColor(ColorDialog.Color);
- Shape17.Brush.Color := ColorDialog.Color;
- end;
- end;
- //---------------------------------------------------------------------------
- procedure TFormShaderLab.Shape18MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- begin
- if ColorDialog.Execute then
- begin
- ToonShader.HighlightColor.Color := ConvertWinColor(ColorDialog.Color);
- Shape18.Brush.Color := ColorDialog.Color;
- end;
- end;
- //-----------------------------------------------------------------------------
- procedure TFormShaderLab.Shape19MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- begin
- if ColorDialog.Execute then
- begin
- ToonShader.MidColor.Color := ConvertWinColor(ColorDialog.Color);
- Shape19.Brush.Color := ColorDialog.Color;
- end;
- end;
- procedure TFormShaderLab.Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- begin
- if ColorDialog.Execute then
- begin
- FurShader.ColorScale.Color := ConvertWinColor(ColorDialog.Color);
- Shape1.Brush.Color := ColorDialog.Color;
- end;
- end;
- procedure TFormShaderLab.Shape20MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- begin
- if ColorDialog.Execute then
- begin
- ToonShader.LightenShadowColor.Color := ConvertWinColor(ColorDialog.Color);
- Shape20.Brush.Color := ColorDialog.Color;
- end;
- end;
- //-----------------------------------------------------------------------------
- procedure TFormShaderLab.Shape21MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- begin
- if ColorDialog.Execute then
- begin
- ToonShader.DarkenShadowrColor.Color := ConvertWinColor(ColorDialog.Color);
- Shape21.Brush.Color := ColorDialog.Color;
- end;
- end;
- procedure TFormShaderLab.Shape22MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- begin
- if ColorDialog.Execute then
- begin
- ToonShader.OutlinetColor.Color := ConvertWinColor(ColorDialog.Color);
- Shape22.Brush.Color := ColorDialog.Color;
- end;
- end;
- procedure TFormShaderLab.Shape2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- begin
- if ColorDialog.Execute then
- begin
- FurShader.Ambient.Color := ConvertWinColor(ColorDialog.Color);
- Shape2.Brush.Color := ColorDialog.Color;
- end;
- end;
- procedure TFormShaderLab.Shape3MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- begin
- if ColorDialog.Execute then
- begin
- GoochShader.DiffuseColor.Color := ConvertWinColor(ColorDialog.Color);
- Shape3.Brush.Color := ColorDialog.Color;
- end;
- end;
- procedure TFormShaderLab.Shape4MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- begin
- if ColorDialog.Execute then
- begin
- GoochShader.WarmColor.Color := ConvertWinColor(ColorDialog.Color);
- Shape4.Brush.Color := ColorDialog.Color;
- end;
- end;
- procedure TFormShaderLab.Shape5MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- begin
- if ColorDialog.Execute then
- begin
- GoochShader.CoolColor.Color := ConvertWinColor(ColorDialog.Color);
- Shape5.Brush.Color := ColorDialog.Color;
- end;
- end;
- procedure TFormShaderLab.Shape6MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- begin
- if ColorDialog.Execute then
- begin
- GoochShader.AmbientColor.Color := ConvertWinColor(ColorDialog.Color);
- Shape6.Brush.Color := ColorDialog.Color;
- end;
- end;
- procedure TFormShaderLab.Shape7MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- begin
- if ColorDialog.Execute then
- begin
- GoochShader.SpecularColor.Color := ConvertWinColor(ColorDialog.Color);
- Shape7.Brush.Color := ColorDialog.Color;
- end;
- end;
- //-----------------------------------------------------------------------------
- procedure TFormShaderLab.shAmbientErosionMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- begin
- if ColorDialog.Execute then
- begin
- ErosionShader.AmbientColor.Color := ConvertWinColor(ColorDialog.Color);
- shAmbientErosion.Brush.Color := ColorDialog.Color;
- end;
- end;
- procedure TFormShaderLab.shSpecularErosionMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- begin
- if ColorDialog.Execute then
- begin
- ErosionShader.SpecularColor.Color := ConvertWinColor(ColorDialog.Color);
- shSpecularErosion.Brush.Color := ColorDialog.Color;
- end;
- end;
- //-----------------------------------------------------------------------------
- procedure TFormShaderLab.tbErosionAmbientFChange(Sender: TObject);
- begin
- ErosionShader.AmbientFactor := tbErosionAmbientF.Position / 100;
- lblErosionAmbientF.Caption := FloatToStrF(ErosionShader.AmbientFactor, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbErosionAnisoRChange(Sender: TObject);
- begin
- ErosionShader.AnisotropicRoughness := tbErosionAnisoR.Position / 100;
- lblErosionAnisoR.Caption := FloatToStrF(ErosionShader.AnisotropicRoughness, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbErosionDiffuseFChange(Sender: TObject);
- begin
- ErosionShader.DiffuseFactor := tbErosionDiffuseF.Position / 100;
- lblErosionDiffuseF.Caption := FloatToStrF(ErosionShader.DiffuseFactor, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbErosionFactorChange(Sender: TObject);
- begin
- ErosionShader.ErosionFactor := tbErosionFactor.Position / 100;
- lblErosionFactor.Caption := FloatToStrF(ErosionShader.ErosionFactor, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbErosionIFactor1Change(Sender: TObject);
- begin
- ErosionShader.IntensityFactor1 := tbErosionIFactor1.Position / 100;
- lblErosionIFactor1.Caption := FloatToStrF(ErosionShader.IntensityFactor1, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbErosionIFactor2Change(Sender: TObject);
- begin
- ErosionShader.IntensityFactor2 := tbErosionIFactor2.Position / 100;
- lblerosionIFactor2.Caption := FloatToStrF(ErosionShader.IntensityFactor2, ffFixed, 5, 3);
- end;
- //-----------------------------------------------------------------------------
- procedure TFormShaderLab.tbErosionScaleChange(Sender: TObject);
- begin
- ErosionShader.ErosionScale := tbErosionScale.Position / 100;
- lblErosionScale.Caption := FloatToStrF(ErosionShader.ErosionScale, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbErosionSpecularFChange(Sender: TObject);
- begin
- ErosionShader.SpecularFactor := tbErosionSpecularF.Position / 100;
- lblErosionSpecularF.Caption := FloatToStrF(ErosionShader.SpecularFactor, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbErosionSpecularRChange(Sender: TObject);
- begin
- ErosionShader.SpecularRoughness := tbErosionSpecularR.Position / 100;
- lblErosionSpecularR.Caption := FloatToStrF(ErosionShader.SpecularRoughness, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbFurDensityChange(Sender: TObject);
- begin
- FurShader.FurDensity := tbFurDensity.Position / 100;
- lblFurDensity.Caption := FloatToStrF(FurShader.FurDensity, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbFurLengthChange(Sender: TObject);
- begin
- FurShader.FurLength := tbFurLength.Position / 100;
- lblFurLength.Caption := FloatToStrF(FurShader.FurLength, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbFurLightPowerChange(Sender: TObject);
- begin
- FurShader.LightIntensity := tbFurLightPower.Position / 100;
- lblFurLightPower.Caption := FloatToStrF(FurShader.LightIntensity, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbFurMaxLengthChange(Sender: TObject);
- begin
- FurShader.MaxFurLength := tbFurMaxLength.Position / 100;
- lblFurMaxLength.Caption := FloatToStrF(FurShader.MaxFurLength, ffFixed, 5, 3);
- end;
- //-----------------------------------------------------------------------------
- procedure TFormShaderLab.tbFurPassCountChange(Sender: TObject);
- begin
- FurShader.PassCount := tbFurPassCount.Position;
- lblFurPassCount.Caption := FloatToStrF(FurShader.PassCount, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbGlassAlphaChange(Sender: TObject);
- begin
- GlassShader.Alpha := tbGlassAlpha.Position / 100;
- lblGlassAlpha.Caption := FloatToStrF(GlassShader.Alpha, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbGlassDepthChange(Sender: TObject);
- begin
- GlassShader.Depth := tbGlassDepth.Position / 100;
- lblGlassDepth.Caption := FloatToStrF(GlassShader.Depth, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbGlassMixChange(Sender: TObject);
- begin
- GlassShader.Mix := tbGlassMix.Position / 100;
- lblGlassMix.Caption := FloatToStrF(GlassShader.Mix, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbGoochAFactorChange(Sender: TObject);
- begin
- GoochShader.AmbientFactor := tbGoochAFactor.Position / 100;
- lblGoochAFactor.Caption := FloatToStrF(GoochShader.AmbientFactor, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbGoochAlphaChange(Sender: TObject);
- begin
- GoochShader.DiffuseColor.Alpha := tbGoochAlpha.Position / 100;
- lblGoochAlpha.Caption := FloatToStrF(GoochShader.DiffuseColor.Alpha, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbGoochCFactorChange(Sender: TObject);
- begin
- GoochShader.CoolFactor := tbGoochCFactor.Position / 100;
- lblGoochCFactor.Caption := FloatToStrF(GoochShader.CoolFactor, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbGoochDFactorChange(Sender: TObject);
- begin
- GoochShader.DiffuseFactor := tbGoochDFactor.Position / 100;
- lblGoochDFactor.Caption := FloatToStrF(GoochShader.DiffuseFactor, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbGoochSFactorChange(Sender: TObject);
- begin
- GoochShader.SpecularFactor := tbGoochSFactor.Position / 100;
- lblGoochSFactor.Caption := FloatToStrF(GoochShader.SpecularFactor, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbGoochWFactorChange(Sender: TObject);
- begin
- GoochShader.WarmFactor := tbGoochWFactor.Position / 100;
- lblGoochWFactor.Caption := FloatToStrF(GoochShader.WarmFactor, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbLatticeLightPowerChange(Sender: TObject);
- begin
- LatticeShader.LightPower := tbLatticeLightPower.Position / 100;
- lblLatticeLightPower.Caption := FloatToStrF(LatticeShader.LightPower, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbLatticeScaleXChange(Sender: TObject);
- begin
- LatticeShader.LatticeScale.X := tbLatticeScaleX.Position;
- lblLatticeScaleX.Caption := FloatToStrF(LatticeShader.LatticeScale.X, ffFixed, 5, 0);
- end;
- procedure TFormShaderLab.tbLatticeScaleYChange(Sender: TObject);
- begin
- LatticeShader.LatticeScale.Y := tbLatticeScaleY.Position;
- lblLatticeScaleY.Caption := FloatToStrF(LatticeShader.LatticeScale.Y, ffFixed, 5, 0);
- end;
- procedure TFormShaderLab.tbLatticeSpecularPowerChange(Sender: TObject);
- begin
- LatticeShader.SpecularPower := tbLatticeSpecularPower.Position / 100;
- lblLatticeSpecularPower.Caption := FloatToStrF(LatticeShader.SpecularPower, ffFixed, 5, 3);
- end;
- //-----------------------------------------------------------------------------
- procedure TFormShaderLab.tbLatticeThresholdXChange(Sender: TObject);
- begin
- LatticeShader.LatticeThreshold.X := tbLatticeThresholdX.Position / 100;
- lblLatticeThresholdX.Caption := FloatToStrF(LatticeShader.LatticeThreshold.X, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbLatticeThresholdYChange(Sender: TObject);
- begin
- LatticeShader.LatticeThreshold.Y := tbLatticeThresholdY.Position / 100;
- lblLatticeThresholdY.Caption := FloatToStrF(LatticeShader.LatticeThreshold.Y, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbSemAmbientFChange(Sender: TObject);
- begin
- SEMShader.AmbientFactor := tbSemAmbientF.Position / 100;
- lblSemAmbientF.Caption := FloatToStrF(SEMShader.AmbientFactor, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbSemDiffuseFChange(Sender: TObject);
- begin
- SEMShader.DiffuseFactor := tbSemDiffuseF.Position / 100;
- lblSemDiffuseF.Caption := FloatToStrF(SEMShader.DiffuseFactor, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbSemSpecularFChange(Sender: TObject);
- begin
- SEMShader.SpecularFactor := tbSemSpecularF.Position / 100;
- lblSemSpecularF.Caption := FloatToStrF(SEMShader.SpecularFactor, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbToonHighlightSizeChange(Sender: TObject);
- begin
- ToonShader.HighlightSize := tbToonHighlightSize.Position / 100;
- lblToonHighlightSize.Caption := FloatToStrF(ToonShader.HighlightSize, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbToonMidSizeChange(Sender: TObject);
- begin
- ToonShader.MidSize := tbToonMidSize.Position / 100;
- lblToonMidSize.Caption := FloatToStrF(ToonShader.MidSize, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbToonOutlineWidthChange(Sender: TObject);
- begin
- ToonShader.OutlineWidth := tbToonOutlineWidth.Position / 100;
- lblToonOutlineWidth.Caption := FloatToStrF(ToonShader.OutlineWidth, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbToonShadowSizeChange(Sender: TObject);
- begin
- ToonShader.ShadowSize := tbToonShadowSize.Position / 100;
- lblToonShadowSize.Caption := FloatToStrF(ToonShader.ShadowSize, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbVDAmbientFChange(Sender: TObject);
- begin
- VertexDisplacementShader.AmbientFactor := tbVDAmbientF.Position / 100;
- lblVDAmbientF.Caption := FloatToStrF(VertexDisplacementShader.AmbientFactor, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbVDDiffuseFChange(Sender: TObject);
- begin
- VertexDisplacementShader.DiffuseFactor := tbVDDiffuseF.Position / 100;
- lblVDDiffuseF.Caption := FloatToStrF(VertexDisplacementShader.DiffuseFactor, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbVDDispScaleChange(Sender: TObject);
- begin
- VertexDisplacementShader.DisplacementScale := tbVDDispScale.Position / 100;
- lblVDDispScale.Caption := FloatToStrF(VertexDisplacementShader.DisplacementScale, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbVDNoiseChange(Sender: TObject);
- begin
- VertexDisplacementShader.NoiseFactor := tbVDNoise.Position / 100;
- lblVDNoise.Caption := FloatToStrF(VertexDisplacementShader.NoiseFactor, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbVDNScaleChange(Sender: TObject);
- begin
- VertexDisplacementShader.NoiseScale := tbVDNScale.Position / 100;
- lblVDNScale.Caption := FloatToStrF(VertexDisplacementShader.NoiseScale, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbVDPeriodChange(Sender: TObject);
- begin
- VertexDisplacementShader.NoisePeriod := tbVDPeriod.Position / 100;
- lblVDPeriod.Caption := FloatToStrF(VertexDisplacementShader.NoisePeriod, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbVDSpecularFChange(Sender: TObject);
- begin
- VertexDisplacementShader.SpecularFactor := tbVDSpecularF.Position / 100;
- lblVDSpecularF.Caption := FloatToStrF(VertexDisplacementShader.SpecularFactor, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbVDTimeFChange(Sender: TObject);
- begin
- VertexDisplacementShader.TimeFactor := tbVDTimeF.Position / 100;
- lblVDTimeF.Caption := FloatToStrF(VertexDisplacementShader.TimeFactor, ffFixed, 5, 3);
- end;
- procedure TFormShaderLab.tbVDTurbChange(Sender: TObject);
- begin
- VertexDisplacementShader.TurbulenceFactor := tbVDTurb.Position / 100;
- lblVDTurb.Caption := FloatToStrF(VertexDisplacementShader.TurbulenceFactor, ffFixed, 5, 3);
- end;
- //-----------------------------------------------------------------------------
- procedure TFormShaderLab.FormDestroy(Sender: TObject);
- begin
- Cadencer.Enabled := False;
- FurShader.Free;
- LatticeShader.Free;
- IvoryShader.Free;
- GoochShader.Free;
- ErosionShader.Free;
- SEMShader.Free;
- VertexDisplacementShader.Free;
- GlassShader.Free;
- end;
- end.
|