fCullingD.pas 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. unit fCullingD;
  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. Vcl.Imaging.Jpeg,
  14. GLS.Scene,
  15. GLS.Objects,
  16. GLS.Cadencer,
  17. GLS.VectorFileObjects,
  18. GLS.SceneViewer,
  19. GLS.Texture,
  20. GLS.Material,
  21. GLS.Coordinates,
  22. GLS.BaseClasses,
  23. GLS.RenderContextInfo,
  24. GLS.FileMD2,
  25. GLS.Utils, GLS.SimpleNavigation;
  26. type
  27. TFormCulling = class(TForm)
  28. Viewer: TGLSceneViewer;
  29. GLScene: TGLScene;
  30. GLCadencer: TGLCadencer;
  31. GLCamera1: TGLCamera;
  32. GLLightSource1: TGLLightSource;
  33. DCTarget: TGLDummyCube;
  34. Timer1: TTimer;
  35. DCSpheres: TGLDummyCube;
  36. DCActors: TGLDummyCube;
  37. ACReference: TGLActor;
  38. GLMaterialLibrary: TGLMaterialLibrary;
  39. Panel2: TPanel;
  40. Label1: TLabel;
  41. RBNone: TRadioButton;
  42. RBObject: TRadioButton;
  43. RBHierarchical: TRadioButton;
  44. Label2: TLabel;
  45. RBActors: TRadioButton;
  46. RBSpheres: TRadioButton;
  47. GLSimpleNavigation1: TGLSimpleNavigation;
  48. procedure GLCadencerProgress(Sender: TObject; const deltaTime, newTime: Double);
  49. procedure Timer1Timer(Sender: TObject);
  50. procedure FormCreate(Sender: TObject);
  51. procedure RBNoneClick(Sender: TObject);
  52. procedure RBSpheresClick(Sender: TObject);
  53. private
  54. public
  55. end;
  56. var
  57. FormCulling: TFormCulling;
  58. implementation
  59. {$R *.DFM}
  60. procedure TFormCulling.FormCreate(Sender: TObject);
  61. var
  62. i, j: Integer;
  63. newSphere: TGLSphere;
  64. newActor: TGLActor;
  65. begin
  66. var Path: TFileName := GetCurrentAssetPath();
  67. SetCurrentDir(Path + '\modelext');
  68. // Actors are used as standalone, med-polycount objects
  69. // that aren't T&L friendly (all geometry must be sent to
  70. // the hardware at each frame)
  71. ACReference.LoadFromFile('waste.md2');
  72. for i := -3 to 3 do
  73. for j := -3 to 3 do
  74. begin
  75. newActor := (DCActors.AddNewChild(TGLActor) as TGLActor);
  76. newActor.Assign(ACReference);
  77. newActor.Position.SetPoint(i * 10, 0, j * 10);
  78. newActor.CurrentFrame := (i + 2) + (j + 2) * 5;
  79. end;
  80. GLMaterialLibrary.Materials[0].Material.Texture.Image.LoadFromFile('waste.jpg');
  81. // Spheres are used as standalone, high-polycount objects
  82. // that are highly T&L friendly
  83. for i := -4 to 4 do
  84. for j := -4 to 4 do
  85. begin
  86. newSphere := (DCSpheres.AddNewChild(TGLSphere) as TGLSphere);
  87. newSphere.Position.SetPoint(i * 5, 0, j * 5);
  88. newSphere.Slices := 32;
  89. newSphere.Stacks := 32;
  90. end;
  91. ACReference.Visible := False;
  92. end;
  93. procedure TFormCulling.RBSpheresClick(Sender: TObject);
  94. begin
  95. DCActors.Visible := RBActors.Checked;
  96. DCSpheres.Visible := RBSpheres.Checked;
  97. end;
  98. procedure TFormCulling.GLCadencerProgress(Sender: TObject; const deltaTime, newTime: Double);
  99. begin
  100. Viewer.Invalidate;
  101. end;
  102. procedure TFormCulling.Timer1Timer(Sender: TObject);
  103. begin
  104. Viewer.ResetPerformanceMonitor;
  105. end;
  106. procedure TFormCulling.RBNoneClick(Sender: TObject);
  107. begin
  108. if RBObject.Checked then
  109. GLScene.VisibilityCulling := vcObjectBased
  110. else if RBHierarchical.Checked then
  111. GLScene.VisibilityCulling := vcHierarchical
  112. else
  113. GLScene.VisibilityCulling := vcNone;
  114. end;
  115. end.