Advertisement
daniv1

Untitled

Apr 6th, 2018
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 5.62 KB | None | 0 0
  1. unit Unit1;
  2. interface
  3.  
  4. uses
  5.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  6.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls , OpenGl,
  7.   Vcl.ComCtrls;
  8. type
  9.   TMainForm = class(TForm)
  10.     btnStart: TButton;
  11.     btnStop: TButton;
  12.     timer: TTimer;
  13.     TrackBar1: TTrackBar;
  14.     TrackBar2: TTrackBar;
  15.     TrackBar3: TTrackBar;
  16.     procedure FormCreate(Sender: TObject);
  17.     procedure FormDestroy(Sender: TObject);
  18.     procedure FormPaint(Sender: TObject);
  19.     procedure btnStartClick(Sender: TObject);
  20.     procedure btnStopClick(Sender: TObject);
  21.     procedure timerTimer(Sender: TObject);
  22.   private
  23. DC:HDC; // контекст пристрою
  24. hrc:HGLRC; // контекст відтворення
  25.     { Private declarations }
  26.   public
  27.     { Public declarations }
  28.   end;
  29.  
  30. var
  31.   MainForm: TMainForm;
  32.  
  33. implementation
  34.  
  35. {$R *.dfm}
  36. procedure SetDCPixelFormat(hdc : HDC);
  37. var
  38. pfd : TPixelFormatDescriptor; // об’єкт структури формату пікселя
  39. nPixelFormat : Integer;
  40. begin
  41. FillChar(pfd, SizeOf (pfd), 0);
  42. //встановлення значень прапорців: підтримка OpenGL та подвійна буферизація
  43. pfd.dwFlags:=PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
  44. //спроба підібрати найближчий формат пікселя по заданих критеріях
  45. nPixelFormat:=ChoosePixelFormat (hdc, @pfd);
  46. // встановлення формату пікселя контексту пристрою
  47. SetPixelFormat(hdc, nPixelFormat, @pfd);
  48. end;
  49. procedure TMainForm.btnStartClick(Sender: TObject);
  50. begin
  51. glEnable (GL_LIGHTING); // встановлення властивостей освітлення
  52. glEnable (GL_LIGHT0);
  53. glClearColor( 1, 1, 0, 1);
  54. glEnable (GL_DEPTH_TEST); // встановлення режиму перевірки глибини
  55. glEnable (GL_COLOR_MATERIAL); // встановлення властивостей кольору
  56. glColor3f(1.0, 0.0, 1.0); //пурпурный
  57. timer.enabled:=true;
  58. end;
  59.  
  60. procedure TMainForm.btnStopClick(Sender: TObject);
  61. begin
  62. timer.enabled:=false;
  63. end;
  64.  
  65. procedure TMainForm.FormCreate(Sender: TObject);
  66. begin
  67. DC:=GetDC (Handle); // отримання контексту пристрою (форми)
  68. SetDCPixelFormat(DC); // встановлення формату пікселя
  69. hrc := wglCreateContext(DC); // створення нового контексту відтворення
  70. wglMakeCurrent(DC, hrc); // задання поточного контексту відтворення
  71. glClearColor (0.7, 5.0, 6.0, 8.0); // задання кольору фону у форматі RGBA
  72. glMatrixMode (GL_PROJECTION); // встановлення поточної матриці перетворення координат
  73. // для побудови об’ємного зображення
  74. glLoadIdentity; // ініціалізація матриці
  75. glFrustum (-1, 1, -1, 1, 3, 40); // домножує матрицю на матрицю перспективи
  76. glMatrixMode (GL_MODELVIEW);
  77. glLoadIdentity;
  78. glTranslatef(0.0, 0.0, -8.0); // домножує матрицю на матрицю перетворення
  79. end;
  80. procedure TMainForm.FormDestroy(Sender: TObject);
  81. begin
  82.    wglMakeCurrent(0, 0); // звільнення поточного контексту відтворення
  83. wglDeleteContext(hrc); // знищення контексту відтворення
  84. ReleaseDC(Handle, DC); // звільнення контексту пристрою
  85. DeleteDC(DC); // видалення вказаного контексту пристрою
  86. end;
  87.  
  88. procedure TMainForm.FormPaint(Sender: TObject);
  89. begin
  90.       glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); // очищення буфера
  91. glBegin(GL_QUADS); // початок примітива (грані куба)
  92. glNormal3f(0.0, 0.0, 1.0); // задання вектора нормалі
  93. glVertex3f(1.0, 1.0, 1.0); // задання координат вершин
  94. glVertex3f(-1.0, 1.0, 1.0);
  95. glVertex3f(-1.0, -1.0, 1.0);
  96. glVertex3f(1.0, -1.0, 1.0);
  97. glEnd; // завершення примітиву
  98. glBegin(GL_QUADS);
  99. glNormal3f(-1.0, 0.0, 0.0);
  100. glVertex3f(-1.0, 1.0, 1.0);
  101. glVertex3f(-1.0, 1.0, -1.0);
  102. glVertex3f(-1.0, -1.0, -1.0);
  103. glVertex3f(-1.0, -1.0, 1.0);
  104. glEnd;
  105. glBegin(GL_QUADS);
  106. glNormal3f(1.0, 0.0, -1.0);
  107. glVertex3f(1.0, -1.0, -1.0);
  108. glVertex3f(1.0, -1.0, 1.0);
  109. glVertex3f(1.0, 1.0, 1.0);
  110. glVertex3f(1.0, 1.0, -1.0);
  111. glEnd;
  112. glBegin(GL_QUADS);
  113. glNormal3f(0.0, 0.0, -1.0);
  114. glVertex3f(1.0, -1.0, 1.0);
  115. glVertex3f(1.0, -1.0, -1.0);
  116. glVertex3f(-1.0, -1.0, -1.0);
  117. glVertex3f(-1.0, -1.0, 1.0);
  118. glEnd;
  119. glBegin(GL_QUADS);
  120. glNormal3f(0.0, 0.0, -1.0);
  121. glVertex3f(-1.0, -1.0, -1.0);
  122. glVertex3f(-1.0, 1.0, -1.0);
  123. glVertex3f(1.0, 1.0, -1.0);
  124. glVertex3f(1.0, -1.0, -1.0);
  125.  
  126. glBegin(GL_QUADS);
  127. glNormal3f(0.0, 0.0, -1.0);
  128. glVertex3f(-1.0, 1.0, -1.0);
  129. glVertex3f(-1.0, 1.0, 1.0);
  130. glVertex3f(1.0, 1.0, 1.0);
  131. glVertex3f(1.0, 1.0, -1.0);
  132. glEnd;
  133. end;
  134.  
  135. procedure TMainForm.timerTimer(Sender: TObject);
  136. var x , y, z : real ;
  137. begin
  138. x:= TrackBar1.Position;
  139. y := TrackBar2.Position;
  140. z:= TrackBar3.Position;
  141. glRotatef(x, 1.0, 0.0, 0.0); // повертання матриці проти годинникової
  142. glRotatef(y, 0.0, 1.0, 0.0); // стрілки на кут навколо вектора від
  143. glRotatef(z, 0.0, 0.0, 1.0); // початкової точки
  144. SwapBuffers(DC); // обмін фронтального і зворотного буферів
  145. InvalidateRect(Handle, nil, False); // перемальовування форми
  146. end;
  147.  
  148. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement