2
0

ProjectTextureFm.pas 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. unit ProjectTextureFm;
  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. public
  60. end;
  61. var
  62. Form1: TForm1;
  63. implementation
  64. {$R *.dfm}
  65. procedure TForm1.FormCreate(Sender: TObject);
  66. var
  67. I : Integer;
  68. begin
  69. Randomize;
  70. sdir := -10;
  71. GLCamera1.CameraStyle := cscustom;
  72. SetGLSceneMediaDir();
  73. GLSLProjectedTextures1.Material.Texture.Image.LoadFromFile('flare1.bmp');
  74. GLSLProjectedTextures1.Material.Texture.Disabled := False;
  75. GLSLProjectedTextures1.Material.Texture.TextureWrap := twNone;
  76. GLSLProjectedTextures1.Material.Texture.MinFilter := miLinear;
  77. GLSLProjectedTextures1.Material.Texture.MagFilter := maLinear;
  78. GLSLProjectedTextures1.UseLightmaps := True;
  79. GLCube1.Material.Texture.Image.LoadFromFile('ashwood.jpg');
  80. GLCube1.Material.Texture.Disabled := False;
  81. GLFreeForm1.LoadFromFile('groundtest.lmts');
  82. GLFreeForm1.ObjectStyle := [osDirectDraw];
  83. for I := 0 to GLMaterialLibrary1.Materials.Count - 1 do
  84. GLMaterialLibrary1.Materials.Items[I].Material.MaterialOptions := [moNoLighting];
  85. end;
  86. procedure TForm1.GLCadencer1Progress(Sender: TObject; const DeltaTime, newTime: Double);
  87. var
  88. I: Integer;
  89. begin
  90. for I := 1 to glslProjectedTextures1.Emitters.Count - 1 do
  91. glslProjectedTextures1.Emitters[I].Emitter.turn(DeltaTime * (I + 1) * 10);
  92. GLSceneViewer1.Invalidate;
  93. GLArrowLine1.Position.Y := GLArrowLine1.Position.Y + sdir * DeltaTime;
  94. if GLArrowLine1.Position.Y > 20 then
  95. begin
  96. GLArrowLine1.Position.Y := 20;
  97. sdir := -10;
  98. end;
  99. if GLArrowLine1.Position.Y < 10 then
  100. begin
  101. GLArrowLine1.Position.Y := 10;
  102. sdir := 10;
  103. end;
  104. end;
  105. procedure TForm1.GLCamera1CustomPerspective(const viewport: TRectangle; Width, Height, DPI: Integer; var viewPortRadius: Single);
  106. begin
  107. CurrentGLContext.PipelineTransformation.ProjectionMatrix^ :=
  108. CreatePerspectiveMatrix(GLCamera1.GetFieldOfView(Width)/2, Width / Height,
  109. GLCamera1.NearPlaneBias, GLCamera1.DepthOfView);
  110. end;
  111. procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  112. begin
  113. if ssLeft in Shift then
  114. begin
  115. GLCamera1.MoveAroundTarget(my - Y, mx - X);
  116. mx := X;
  117. my := Y;
  118. end;
  119. end;
  120. procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
  121. begin
  122. GLCamera1.AdjustDistanceToTarget(Power(1.1, WheelDelta / 120));
  123. end;
  124. procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  125. begin
  126. mx := X;
  127. my := Y;
  128. end;
  129. procedure TForm1.Timer1Timer(Sender: TObject);
  130. begin
  131. Caption := 'GLSL Projected Texture ' +GLSceneViewer1.FramesPerSecondText();
  132. end;
  133. end.