fProjectTextureD.pas 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. unit fProjectTextureD;
  2. interface
  3. uses
  4. Winapi.OpenGL,
  5. System.SysUtils,
  6. System.Classes,
  7. System.Types,
  8. System.Math,
  9. Vcl.Graphics,
  10. Vcl.Controls,
  11. Vcl.Forms,
  12. Vcl.ExtCtrls,
  13. GLS.Scene,
  14. GLS.VectorTypes,
  15. GLS.Objects,
  16. GLS.Texture,
  17. GLS.SceneViewer,
  18. GLS.Cadencer,
  19. GLS.VectorFileObjects,
  20. GLS.ShadowVolume,
  21. GLS.GeomObjects,
  22. GLS.Utils,
  23. GLS.FileLMTS,
  24. GLS.Context,
  25. GLS.VectorGeometry,
  26. GLS.PipelineTransformation,
  27. GLSL.ProjectedTextures,
  28. GLS.Graphics,
  29. GLS.Material,
  30. GLS.Coordinates,
  31. GLS.BaseClasses,
  32. GLS.FileTGA;
  33. type
  34. TForm1 = class(TForm)
  35. GLScene1: TGLScene;
  36. GLSceneViewer1: TGLSceneViewer;
  37. GLCamera1: TGLCamera;
  38. GLCadencer1: TGLCadencer;
  39. GLLightSource2: TGLLightSource;
  40. GLArrowLine1: TGLArrowLine;
  41. Timer1: TTimer;
  42. GLDummyCube3: TGLDummyCube;
  43. GLMaterialLibrary1: TGLMaterialLibrary;
  44. GLSLTextureEmitter1: TGLSLTextureEmitter;
  45. GLSLProjectedTextures1: TGLSLProjectedTextures;
  46. GLFreeForm1: TGLFreeForm;
  47. GLCube1: TGLCube;
  48. GLSLTextureEmitter2: TGLSLTextureEmitter;
  49. procedure GLCamera1CustomPerspective(const viewport: TRectangle; Width, Height, DPI: Integer; var viewPortRadius: Single);
  50. procedure GLCadencer1Progress(Sender: TObject; const DeltaTime, newTime: Double);
  51. procedure GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  52. procedure FormMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
  53. procedure GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  54. procedure Timer1Timer(Sender: TObject);
  55. procedure FormCreate(Sender: TObject);
  56. private
  57. mx, my: Integer;
  58. sdir: Integer;
  59. Path: TFileName;
  60. public
  61. end;
  62. var
  63. Form1: TForm1;
  64. implementation
  65. {$R *.dfm}
  66. procedure TForm1.FormCreate(Sender: TObject);
  67. var
  68. I : Integer;
  69. begin
  70. Randomize;
  71. sdir := -10;
  72. GLCamera1.CameraStyle := cscustom;
  73. Path := GetCurrentAssetPath();
  74. SetCurrentDir(Path + '\texture');
  75. GLSLProjectedTextures1.Material.Texture.Image.LoadFromFile('flare1.bmp');
  76. GLSLProjectedTextures1.Material.Texture.Disabled := False;
  77. GLSLProjectedTextures1.Material.Texture.TextureWrap := twNone;
  78. GLSLProjectedTextures1.Material.Texture.MinFilter := miLinear;
  79. GLSLProjectedTextures1.Material.Texture.MagFilter := maLinear;
  80. GLSLProjectedTextures1.UseLightmaps := True;
  81. GLCube1.Material.Texture.Image.LoadFromFile('ashwood.jpg');
  82. GLCube1.Material.Texture.Disabled := False;
  83. GLFreeForm1.LoadFromFile('groundtest.lmts'); // with persistent image
  84. GLFreeForm1.ObjectStyle := [osDirectDraw];
  85. for I := 0 to GLMaterialLibrary1.Materials.Count - 1 do
  86. GLMaterialLibrary1.Materials.Items[I].Material.MaterialOptions := [moNoLighting];
  87. end;
  88. procedure TForm1.GLCadencer1Progress(Sender: TObject; const DeltaTime, newTime: Double);
  89. var
  90. I: Integer;
  91. begin
  92. for I := 1 to glslProjectedTextures1.Emitters.Count - 1 do
  93. glslProjectedTextures1.Emitters[I].Emitter.turn(DeltaTime * (I + 1) * 10);
  94. GLSceneViewer1.Invalidate;
  95. GLArrowLine1.Position.Y := GLArrowLine1.Position.Y + sdir * DeltaTime;
  96. if GLArrowLine1.Position.Y > 20 then
  97. begin
  98. GLArrowLine1.Position.Y := 20;
  99. sdir := -10;
  100. end;
  101. if GLArrowLine1.Position.Y < 10 then
  102. begin
  103. GLArrowLine1.Position.Y := 10;
  104. sdir := 10;
  105. end;
  106. end;
  107. procedure TForm1.GLCamera1CustomPerspective(const viewport: TRectangle; Width, Height, DPI: Integer; var viewPortRadius: Single);
  108. begin
  109. CurrentGLContext.PipelineTransformation.ProjectionMatrix^ :=
  110. CreatePerspectiveMatrix(GLCamera1.GetFieldOfView(Width)/2, Width / Height,
  111. GLCamera1.NearPlaneBias, GLCamera1.DepthOfView);
  112. end;
  113. procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  114. begin
  115. if ssLeft in Shift then
  116. begin
  117. GLCamera1.MoveAroundTarget(my - Y, mx - X);
  118. mx := X;
  119. my := Y;
  120. end;
  121. end;
  122. procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
  123. begin
  124. GLCamera1.AdjustDistanceToTarget(Power(1.1, WheelDelta / 120));
  125. end;
  126. procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  127. begin
  128. mx := X;
  129. my := Y;
  130. end;
  131. procedure TForm1.Timer1Timer(Sender: TObject);
  132. begin
  133. Caption := 'GLSL Projected Texture ' +GLSceneViewer1.FramesPerSecondText();
  134. end;
  135. end.