fPawnD.pas 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. unit fPawnD;
  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.StdCtrls,
  12. Vcl.ComCtrls,
  13. Vcl.ExtCtrls,
  14. Vcl.Imaging.JPeg,
  15. GLS.Scene,
  16. GLS.Objects,
  17. GLS.Texture,
  18. GLS.Extrusion,
  19. GLS.SceneViewer,
  20. GLS.Coordinates,
  21. GLS.BaseClasses,
  22. GLScene.Utils;
  23. type
  24. TFormPawn = class(TForm)
  25. GLScene1: TGLScene;
  26. GLSceneViewer1: TGLSceneViewer;
  27. GLCamera1: TGLCamera;
  28. GLLightSource1: TGLLightSource;
  29. DummyCube1: TGLDummyCube;
  30. RotationSolid1: TGLRevolutionSolid;
  31. Timer1: TTimer;
  32. Panel1: TPanel;
  33. Label1: TLabel;
  34. CheckBox1: TCheckBox;
  35. CheckBox2: TCheckBox;
  36. CheckBox3: TCheckBox;
  37. CheckBox4: TCheckBox;
  38. Label3: TLabel;
  39. TrackBar2: TTrackBar;
  40. Label4: TLabel;
  41. TrackBar3: TTrackBar;
  42. Label2: TLabel;
  43. TrackBar1: TTrackBar;
  44. LabelTri: TLabel;
  45. procedure GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  46. X, Y: Integer);
  47. procedure GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  48. procedure FormCreate(Sender: TObject);
  49. procedure CheckBox1Click(Sender: TObject);
  50. procedure CheckBox2Click(Sender: TObject);
  51. procedure CheckBox3Click(Sender: TObject);
  52. procedure TrackBar1Change(Sender: TObject);
  53. procedure CheckBox4Click(Sender: TObject);
  54. procedure Timer1Timer(Sender: TObject);
  55. procedure TrackBar2Change(Sender: TObject);
  56. procedure TrackBar3Change(Sender: TObject);
  57. private
  58. PathToData: TFileName;
  59. public
  60. mx, my: Integer;
  61. end;
  62. var
  63. FormPawn: TFormPawn;
  64. implementation
  65. {$R *.DFM}
  66. procedure TFormPawn.FormCreate(Sender: TObject);
  67. begin
  68. PathToData := GetCurrentAssetPath();
  69. SetCurrentDir(PathToData + '\texture');
  70. RotationSolid1.Material.Texture.Image.LoadFromFile('ashwood.jpg');
  71. end;
  72. procedure TFormPawn.CheckBox1Click(Sender: TObject);
  73. begin
  74. if CheckBox1.Checked then
  75. RotationSolid1.SplineMode := lsmCubicSpline
  76. else
  77. RotationSolid1.SplineMode := lsmLines;
  78. end;
  79. procedure TFormPawn.CheckBox2Click(Sender: TObject);
  80. begin
  81. if CheckBox2.Checked then
  82. RotationSolid1.Normals := nsSmooth
  83. else
  84. RotationSolid1.Normals := nsFlat;
  85. end;
  86. procedure TFormPawn.CheckBox3Click(Sender: TObject);
  87. begin
  88. RotationSolid1.Material.Texture.Disabled := not CheckBox3.Checked;
  89. end;
  90. procedure TFormPawn.CheckBox4Click(Sender: TObject);
  91. begin
  92. if CheckBox4.Checked then
  93. RotationSolid1.Material.Texture.TextureMode := tmModulate
  94. else
  95. RotationSolid1.Material.Texture.TextureMode := tmDecal;
  96. end;
  97. procedure TFormPawn.TrackBar1Change(Sender: TObject);
  98. begin
  99. RotationSolid1.StopAngle := TrackBar1.Position;
  100. if TrackBar1.Position = 360 then
  101. RotationSolid1.Parts := RotationSolid1.Parts - [rspStartPolygon, rspStopPolygon]
  102. else
  103. RotationSolid1.Parts := RotationSolid1.Parts + [rspStartPolygon, rspStopPolygon];
  104. end;
  105. procedure TFormPawn.TrackBar2Change(Sender: TObject);
  106. begin
  107. RotationSolid1.Slices := TrackBar2.Position;
  108. end;
  109. procedure TFormPawn.TrackBar3Change(Sender: TObject);
  110. begin
  111. RotationSolid1.Division := TrackBar3.Position;
  112. end;
  113. procedure TFormPawn.Timer1Timer(Sender: TObject);
  114. begin
  115. LabelTri.Caption := Format('%d Triangles', [RotationSolid1.TriangleCount]);
  116. end;
  117. procedure TFormPawn.GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton;
  118. Shift: TShiftState; X, Y: Integer);
  119. begin
  120. mx := X;
  121. my := Y;
  122. end;
  123. procedure TFormPawn.GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  124. begin
  125. if Shift <> [] then
  126. GLCamera1.MoveAroundTarget(my - Y, mx - X);
  127. mx := X;
  128. my := Y;
  129. end;
  130. end.