fDynCubemap.pas 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. unit fDynCubemap;
  2. interface
  3. uses
  4. Winapi.OpenGL,
  5. System.SysUtils,
  6. System.Classes,
  7. Vcl.Graphics,
  8. Vcl.Controls,
  9. Vcl.Forms,
  10. Vcl.Dialogs,
  11. Vcl.ExtCtrls,
  12. Vcl.StdCtrls,
  13. GLS.Objects,
  14. GLS.Scene,
  15. GLS.VectorTypes,
  16. GLS.SceneViewer,
  17. GLS.SkyDome,
  18. GLS.Cadencer,
  19. GLS.GeomObjects,
  20. GLS.Context,
  21. GLS.Coordinates,
  22. GLS.BaseClasses;
  23. type
  24. TFormDynCubeMap = class(TForm)
  25. GLScene1: TGLScene;
  26. GLSceneViewer1: TGLSceneViewer;
  27. GLMemoryViewer1: TGLMemoryViewer;
  28. GLCamera1: TGLCamera;
  29. GLLightSource1: TGLLightSource;
  30. Torus1: TGLTorus;
  31. CubeMapCamera: TGLCamera;
  32. Sphere1: TGLSphere;
  33. Cylinder1: TGLCylinder;
  34. Teapot1: TGLTeapot;
  35. SkyDome1: TGLSkyDome;
  36. Cube1: TGLCube;
  37. GLCadencer1: TGLCadencer;
  38. Timer1: TTimer;
  39. Panel1: TPanel;
  40. CBDynamic: TCheckBox;
  41. LabelFPS: TLabel;
  42. procedure GLSceneViewer1MouseDown(Sender: TObject;
  43. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  44. procedure GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState;
  45. X, Y: Integer);
  46. procedure Timer1Timer(Sender: TObject);
  47. procedure GLCadencer1Progress(Sender: TObject; const deltaTime,
  48. newTime: Double);
  49. procedure GLSceneViewer1BeforeRender(Sender: TObject);
  50. private
  51. procedure GenerateCubeMap;
  52. public
  53. mx, my : Integer;
  54. CubmapSupported : Boolean;
  55. cubeMapWarnDone : Boolean;
  56. end;
  57. var
  58. FormDynCubeMap: TFormDynCubeMap;
  59. //===================================
  60. implementation
  61. //===================================
  62. {$R *.dfm}
  63. procedure TFormDynCubeMap.GenerateCubeMap;
  64. begin
  65. // Don't do anything if cube maps aren't supported
  66. if not CubmapSupported then begin
  67. if not cubeMapWarnDone then
  68. ShowMessage('Your graphics hardware does not support cube maps...');
  69. cubeMapWarnDone:=True;
  70. Exit;
  71. end;
  72. // Here we generate the new cube map, from CubeMapCamera (a child of the
  73. // teapot in the scene hierarchy)
  74. with Teapot1 do begin
  75. // hide the teapot while rendering the cube map
  76. Visible:=False;
  77. // render cube map to the teapot's texture
  78. GLMemoryViewer1.RenderCubeMapTextures(Material.Texture);
  79. // teapot visible again
  80. Material.Texture.Disabled:=False;
  81. Visible:=True;
  82. end;
  83. end;
  84. procedure TFormDynCubeMap.GLCadencer1Progress(Sender: TObject; const deltaTime,
  85. newTime: Double);
  86. begin
  87. if CBDynamic.Checked then begin
  88. // make things move
  89. Teapot1.Position.Y:=2*Sin(newTime);
  90. Torus1.RollAngle:=newTime*15;
  91. // generate the cube map
  92. GenerateCubeMap;
  93. end;
  94. GLSceneViewer1.Invalidate;
  95. end;
  96. // Standard issue mouse movement
  97. procedure TFormDynCubeMap.GLSceneViewer1MouseDown(Sender: TObject;
  98. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  99. begin
  100. mx:=x;
  101. my:=y;
  102. end;
  103. procedure TFormDynCubeMap.GLSceneViewer1MouseMove(Sender: TObject;
  104. Shift: TShiftState; X, Y: Integer);
  105. begin
  106. if Shift<>[] then begin
  107. GLCamera1.MoveAroundTarget(my-y, mx-x);
  108. mx:=x;
  109. my:=y;
  110. end;
  111. end;
  112. procedure TFormDynCubeMap.Timer1Timer(Sender: TObject);
  113. begin
  114. LabelFPS.Caption:=Format('%.1f FPS', [GLSceneViewer1.FramesPerSecond]);
  115. GLSceneViewer1.ResetPerformanceMonitor;
  116. end;
  117. procedure TFormDynCubeMap.GLSceneViewer1BeforeRender(Sender: TObject);
  118. begin
  119. CubmapSupported := GL.ARB_texture_cube_map;
  120. GLSceneViewer1.BeforeRender := nil;
  121. end;
  122. end.