fCelShadingD.pas 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. unit fCelShadingD;
  2. interface
  3. uses
  4. Winapi.Windows,
  5. Winapi.OpenGL,
  6. System.SysUtils,
  7. System.Classes,
  8. System.Math,
  9. Vcl.Graphics,
  10. Vcl.Controls,
  11. Vcl.Forms,
  12. Vcl.Dialogs,
  13. Vcl.Imaging.Jpeg,
  14. GLS.Scene,
  15. GLScene.VectorTypes,
  16. GLScene.VectorGeometry,
  17. GLS.Cadencer,
  18. GLS.SceneViewer,
  19. GLS.VectorFileObjects,
  20. GLS.AsyncTimer,
  21. GLS.GeomObjects,
  22. GLS.Texture,
  23. GLS.Objects,
  24. GLS.Material,
  25. GLS.Coordinates,
  26. GLS.BaseClasses,
  27. GLS.FileMD2,
  28. GLS.XCollection,
  29. GLScene.Utils,
  30. GLSL.ShapeShaders;
  31. type
  32. TFormCelShading = class(TForm)
  33. GLScene1: TGLScene;
  34. GLSceneViewer1: TGLSceneViewer;
  35. GLMaterialLibrary1: TGLMaterialLibrary;
  36. GLCadencer1: TGLCadencer;
  37. GLCamera1: TGLCamera;
  38. GLDummyCube1: TGLDummyCube;
  39. GLLightSource1: TGLLightSource;
  40. GLActor1: TGLActor;
  41. AsyncTimer1: TGLAsyncTimer;
  42. GLTexturedCelShader: TGLCelShader;
  43. GLColoredCelShader: TGLCelShader;
  44. GLTorus1: TGLTorus;
  45. procedure GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  46. X, Y: Integer);
  47. procedure GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  48. procedure FormCreate(Sender: TObject);
  49. procedure AsyncTimer1Timer(Sender: TObject);
  50. procedure GLCadencer1Progress(Sender: TObject; const deltaTime, newTime: Double);
  51. private
  52. public
  53. mx, my, lx, ly: Integer;
  54. end;
  55. var
  56. FormCelShading: TFormCelShading;
  57. implementation
  58. {$R *.dfm}
  59. procedure TFormCelShading.FormCreate(Sender: TObject);
  60. begin
  61. var Path: TFileName := GetCurrentAssetPath();
  62. SetCurrentDir(Path + '\modelext');
  63. GLActor1.LoadFromFile('waste.md2');
  64. var
  65. r: Single := GLActor1.BoundingSphereRadius;
  66. GLActor1.Scale.SetVector(2.5 / r, 2.5 / r, 2.5 / r);
  67. GLActor1.AnimationMode := aamLoop;
  68. GLMaterialLibrary1.Materials[0].Material.Texture.Image.LoadFromFile('wastecell.jpg');
  69. end;
  70. procedure TFormCelShading.GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton;
  71. Shift: TShiftState; X, Y: Integer);
  72. begin
  73. mx := X;
  74. my := Y;
  75. lx := X;
  76. ly := Y;
  77. end;
  78. procedure TFormCelShading.GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState;
  79. X, Y: Integer);
  80. begin
  81. mx := X;
  82. my := Y;
  83. end;
  84. procedure TFormCelShading.AsyncTimer1Timer(Sender: TObject);
  85. begin
  86. FormCelShading.Caption := Format('GLScene Cel Shading - %.2f FPS',
  87. [GLSceneViewer1.FramesPerSecond]);
  88. GLSceneViewer1.ResetPerformanceMonitor;
  89. end;
  90. procedure TFormCelShading.GLCadencer1Progress(Sender: TObject; const deltaTime, newTime: Double);
  91. begin
  92. if IsKeyDown(VK_LBUTTON) then
  93. begin
  94. GLCamera1.MoveAroundTarget(ly - my, lx - mx);
  95. lx := mx;
  96. ly := my;
  97. end;
  98. GLTorus1.TurnAngle := 15 * Sin(newTime * 5);
  99. GLTorus1.PitchAngle := 15 * Cos(newTime * 5);
  100. end;
  101. end.