fTransparency.pas 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. unit fTransparency;
  2. interface
  3. uses
  4. Winapi.OpenGL,
  5. System.SysUtils,
  6. System.Classes,
  7. System.Math,
  8. Vcl.Graphics,
  9. Vcl.Controls,
  10. Vcl.Forms,
  11. Vcl.Dialogs,
  12. Vcl.ExtCtrls,
  13. GLS.Scene,
  14. GLS.Objects,
  15. Vcl.StdCtrls,
  16. GLS.Cadencer,
  17. GLS.Behaviours,
  18. GLS.Texture,
  19. GLS.VectorGeometry,
  20. GLS.SceneViewer,
  21. GLS.GeomObjects,
  22. GLS.Coordinates,
  23. GLS.BaseClasses,
  24. GLS.Material,
  25. GLS.RenderContextInfo;
  26. type
  27. TForm1 = class(TForm)
  28. GLSceneViewer1: TGLSceneViewer;
  29. GLScene1: TGLScene;
  30. GLCamera1: TGLCamera;
  31. GLLightSource1: TGLLightSource;
  32. Cone1: TGLCone;
  33. DCCentral: TGLDummyCube;
  34. CentralSphere: TGLSphere;
  35. Torus1: TGLTorus;
  36. OrbitingSphere1: TGLSphere;
  37. GLCadencer1: TGLCadencer;
  38. BaseDummyCube: TGLDummyCube;
  39. OrbitingSphere2: TGLSphere;
  40. Panel1: TPanel;
  41. Label1: TLabel;
  42. Label2: TLabel;
  43. RBSTC: TRadioButton;
  44. RBTSC: TRadioButton;
  45. RBTCS: TRadioButton;
  46. Label3: TLabel;
  47. CBAdditive: TCheckBox;
  48. CBSorting: TCheckBox;
  49. procedure RBSTCClick(Sender: TObject);
  50. procedure RBTSCClick(Sender: TObject);
  51. procedure RBTCSClick(Sender: TObject);
  52. procedure CBAdditiveClick(Sender: TObject);
  53. procedure CBSortingClick(Sender: TObject);
  54. procedure GLCadencer1Progress(Sender: TObject; const deltaTime,
  55. newTime: Double);
  56. private
  57. //
  58. end;
  59. var
  60. Form1: TForm1;
  61. implementation
  62. {$R *.DFM}
  63. procedure TForm1.RBSTCClick(Sender: TObject);
  64. begin
  65. // we have 3 objects, move up twice and we're on the top !
  66. CentralSphere.MoveUp;
  67. CentralSphere.MoveUp;
  68. end;
  69. procedure TForm1.RBTSCClick(Sender: TObject);
  70. begin
  71. // we have 3 objects, move down twice and we're on the top,
  72. // then once down, we're in the middle !
  73. CentralSphere.MoveUp;
  74. CentralSphere.MoveUp;
  75. CentralSphere.MoveDown;
  76. end;
  77. procedure TForm1.RBTCSClick(Sender: TObject);
  78. begin
  79. // we have 3 objects, move down twice and we're on the bottom !
  80. CentralSphere.MoveDown;
  81. CentralSphere.MoveDown;
  82. end;
  83. procedure TForm1.CBAdditiveClick(Sender: TObject);
  84. begin
  85. // adjust blending mode for both orbiting spheres
  86. if CBAdditive.Checked then
  87. OrbitingSphere1.Material.BlendingMode:=bmAdditive
  88. else OrbitingSphere1.Material.BlendingMode:=bmTransparency;
  89. OrbitingSphere2.Material.BlendingMode:=OrbitingSphere1.Material.BlendingMode;
  90. end;
  91. procedure TForm1.CBSortingClick(Sender: TObject);
  92. begin
  93. // adjust sorting on the parent object
  94. if CBSorting.Checked then
  95. BaseDummyCube.ObjectsSorting:=osRenderFarthestFirst
  96. else BaseDummyCube.ObjectsSorting:=osNone;
  97. end;
  98. procedure TForm1.GLCadencer1Progress(Sender: TObject; const deltaTime,
  99. newTime: Double);
  100. var
  101. alpha : Double;
  102. begin
  103. // move the spheres
  104. alpha:=DegToRad(newTime*60);
  105. OrbitingSphere1.Position.SetPoint(1.5*cos(alpha), 1.5*sin(alpha), 1.5*sin(alpha));
  106. alpha:=alpha+PI/2;
  107. OrbitingSphere2.Position.SetPoint(1.5*cos(alpha), 1.5*sin(alpha), 1.5*sin(alpha));
  108. end;
  109. end.