fLiningShader.pas 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. unit fLiningShader;
  2. interface
  3. uses
  4. System.SysUtils,
  5. System.Classes,
  6. Vcl.Graphics,
  7. Vcl.Controls,
  8. Vcl.Forms,
  9. Vcl.Dialogs,
  10. Vcl.StdCtrls,
  11. Vcl.ExtCtrls,
  12. GLS.Scene,
  13. GLS.Objects,
  14. GLS.SceneViewer,
  15. GLS.Texture,
  16. GLS.GeomObjects,
  17. GLSL.LineShaders,
  18. GLS.Material,
  19. GLS.Coordinates,
  20. GLS.BaseClasses;
  21. type
  22. TFormLiningShader = class(TForm)
  23. GLScene1: TGLScene;
  24. GLSceneViewer1: TGLSceneViewer;
  25. GLCamera1: TGLCamera;
  26. GLLightSource1: TGLLightSource;
  27. Torus1: TGLTorus;
  28. Sphere1: TGLSphere;
  29. GLMaterialLibrary1: TGLMaterialLibrary;
  30. GLAnnulusOutlined: TGLAnnulus;
  31. GLAnnulusPink: TGLAnnulus;
  32. GLCubeGreen: TGLCube;
  33. GLCubeTransparent: TGLCube;
  34. GLOutlineShader1: TGLOutlineShader;
  35. GLHiddenLineShader1: TGLHiddenLineShader;
  36. GLHiddenLineShader2: TGLHiddenLineShader;
  37. GLHiddenLineShader3: TGLHiddenLineShader;
  38. GLHiddenLineShader4: TGLHiddenLineShader;
  39. Panel1: TPanel;
  40. CheckBox1: TCheckBox;
  41. GroupBox1: TGroupBox;
  42. CheckBox2: TCheckBox;
  43. CheckBox3: TCheckBox;
  44. Label1: TLabel;
  45. CheckBox4: TCheckBox;
  46. Label2: TLabel;
  47. Label3: TLabel;
  48. GLHiddenLineShader5: TGLHiddenLineShader;
  49. GLAnnulusDotted: TGLAnnulus;
  50. Bevel1: TBevel;
  51. Panel2: TPanel;
  52. CheckBox5: TCheckBox;
  53. CheckBox6: TCheckBox;
  54. Bevel2: TBevel;
  55. procedure GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton;
  56. Shift: TShiftState; X, Y: Integer);
  57. procedure GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState;
  58. X, Y: Integer);
  59. procedure CheckBox1Click(Sender: TObject);
  60. procedure CheckBox2Click(Sender: TObject);
  61. procedure CheckBox3Click(Sender: TObject);
  62. procedure CheckBox4Click(Sender: TObject);
  63. procedure CheckBox5Click(Sender: TObject);
  64. procedure CheckBox6Click(Sender: TObject);
  65. public
  66. mx, my: Integer;
  67. end;
  68. var
  69. FormLiningShader: TFormLiningShader;
  70. // --------------------------------------
  71. implementation
  72. // --------------------------------------
  73. {$R *.dfm}
  74. procedure TFormLiningShader.CheckBox1Click(Sender: TObject);
  75. begin
  76. GLOutlineShader1.Enabled := CheckBox1.Checked;
  77. end;
  78. procedure TFormLiningShader.CheckBox2Click(Sender: TObject);
  79. begin
  80. GLHiddenLineShader2.Enabled := CheckBox2.Checked;
  81. end;
  82. procedure TFormLiningShader.CheckBox3Click(Sender: TObject);
  83. begin
  84. GLHiddenLineShader2.Solid := CheckBox3.Checked;
  85. end;
  86. procedure TFormLiningShader.CheckBox4Click(Sender: TObject);
  87. begin
  88. with GLHiddenLineShader2.BackLine do
  89. if CheckBox4.Checked then
  90. Pattern := $FF00 // bit pattern
  91. else
  92. Pattern := $FFFF;
  93. end;
  94. procedure TFormLiningShader.CheckBox5Click(Sender: TObject);
  95. begin
  96. GLHiddenLineShader2.SurfaceLit := CheckBox5.Checked;
  97. end;
  98. procedure TFormLiningShader.CheckBox6Click(Sender: TObject);
  99. begin
  100. if CheckBox6.Checked then
  101. GLHiddenLineShader2.ShadeModel := smFlat
  102. else
  103. GLHiddenLineShader2.ShadeModel := smSmooth;
  104. end;
  105. //
  106. // Classic mouse movement bits
  107. //
  108. procedure TFormLiningShader.GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton;
  109. Shift: TShiftState; X, Y: Integer);
  110. begin
  111. mx := X;
  112. my := Y;
  113. end;
  114. procedure TFormLiningShader.GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState;
  115. X, Y: Integer);
  116. begin
  117. if Shift = [ssLeft] then
  118. GLCamera1.MoveAroundTarget(my - Y, mx - X)
  119. else if Shift = [ssRight] then
  120. GLCamera1.RotateTarget(my - Y, mx - X);
  121. mx := X;
  122. my := Y;
  123. end;
  124. end.