Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Unit1;
- interface
- uses
- Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
- Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls , OpenGl,
- Vcl.ComCtrls;
- type
- TMainForm = class(TForm)
- btnStart: TButton;
- btnStop: TButton;
- timer: TTimer;
- TrackBar1: TTrackBar;
- TrackBar2: TTrackBar;
- TrackBar3: TTrackBar;
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure FormPaint(Sender: TObject);
- procedure btnStartClick(Sender: TObject);
- procedure btnStopClick(Sender: TObject);
- procedure timerTimer(Sender: TObject);
- private
- DC:HDC; // контекст пристрою
- hrc:HGLRC; // контекст відтворення
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- MainForm: TMainForm;
- implementation
- {$R *.dfm}
- procedure SetDCPixelFormat(hdc : HDC);
- var
- pfd : TPixelFormatDescriptor; // об’єкт структури формату пікселя
- nPixelFormat : Integer;
- begin
- FillChar(pfd, SizeOf (pfd), 0);
- //встановлення значень прапорців: підтримка OpenGL та подвійна буферизація
- pfd.dwFlags:=PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
- //спроба підібрати найближчий формат пікселя по заданих критеріях
- nPixelFormat:=ChoosePixelFormat (hdc, @pfd);
- // встановлення формату пікселя контексту пристрою
- SetPixelFormat(hdc, nPixelFormat, @pfd);
- end;
- procedure TMainForm.btnStartClick(Sender: TObject);
- begin
- glEnable (GL_LIGHTING); // встановлення властивостей освітлення
- glEnable (GL_LIGHT0);
- glClearColor( 1, 1, 0, 1);
- glEnable (GL_DEPTH_TEST); // встановлення режиму перевірки глибини
- glEnable (GL_COLOR_MATERIAL); // встановлення властивостей кольору
- glColor3f(1.0, 0.0, 1.0); //пурпурный
- timer.enabled:=true;
- end;
- procedure TMainForm.btnStopClick(Sender: TObject);
- begin
- timer.enabled:=false;
- end;
- procedure TMainForm.FormCreate(Sender: TObject);
- begin
- DC:=GetDC (Handle); // отримання контексту пристрою (форми)
- SetDCPixelFormat(DC); // встановлення формату пікселя
- hrc := wglCreateContext(DC); // створення нового контексту відтворення
- wglMakeCurrent(DC, hrc); // задання поточного контексту відтворення
- glClearColor (0.7, 5.0, 6.0, 8.0); // задання кольору фону у форматі RGBA
- glMatrixMode (GL_PROJECTION); // встановлення поточної матриці перетворення координат
- // для побудови об’ємного зображення
- glLoadIdentity; // ініціалізація матриці
- glFrustum (-1, 1, -1, 1, 3, 40); // домножує матрицю на матрицю перспективи
- glMatrixMode (GL_MODELVIEW);
- glLoadIdentity;
- glTranslatef(0.0, 0.0, -8.0); // домножує матрицю на матрицю перетворення
- end;
- procedure TMainForm.FormDestroy(Sender: TObject);
- begin
- wglMakeCurrent(0, 0); // звільнення поточного контексту відтворення
- wglDeleteContext(hrc); // знищення контексту відтворення
- ReleaseDC(Handle, DC); // звільнення контексту пристрою
- DeleteDC(DC); // видалення вказаного контексту пристрою
- end;
- procedure TMainForm.FormPaint(Sender: TObject);
- begin
- glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); // очищення буфера
- glBegin(GL_QUADS); // початок примітива (грані куба)
- glNormal3f(0.0, 0.0, 1.0); // задання вектора нормалі
- glVertex3f(1.0, 1.0, 1.0); // задання координат вершин
- glVertex3f(-1.0, 1.0, 1.0);
- glVertex3f(-1.0, -1.0, 1.0);
- glVertex3f(1.0, -1.0, 1.0);
- glEnd; // завершення примітиву
- glBegin(GL_QUADS);
- glNormal3f(-1.0, 0.0, 0.0);
- glVertex3f(-1.0, 1.0, 1.0);
- glVertex3f(-1.0, 1.0, -1.0);
- glVertex3f(-1.0, -1.0, -1.0);
- glVertex3f(-1.0, -1.0, 1.0);
- glEnd;
- glBegin(GL_QUADS);
- glNormal3f(1.0, 0.0, -1.0);
- glVertex3f(1.0, -1.0, -1.0);
- glVertex3f(1.0, -1.0, 1.0);
- glVertex3f(1.0, 1.0, 1.0);
- glVertex3f(1.0, 1.0, -1.0);
- glEnd;
- glBegin(GL_QUADS);
- glNormal3f(0.0, 0.0, -1.0);
- glVertex3f(1.0, -1.0, 1.0);
- glVertex3f(1.0, -1.0, -1.0);
- glVertex3f(-1.0, -1.0, -1.0);
- glVertex3f(-1.0, -1.0, 1.0);
- glEnd;
- glBegin(GL_QUADS);
- glNormal3f(0.0, 0.0, -1.0);
- glVertex3f(-1.0, -1.0, -1.0);
- glVertex3f(-1.0, 1.0, -1.0);
- glVertex3f(1.0, 1.0, -1.0);
- glVertex3f(1.0, -1.0, -1.0);
- glBegin(GL_QUADS);
- glNormal3f(0.0, 0.0, -1.0);
- glVertex3f(-1.0, 1.0, -1.0);
- glVertex3f(-1.0, 1.0, 1.0);
- glVertex3f(1.0, 1.0, 1.0);
- glVertex3f(1.0, 1.0, -1.0);
- glEnd;
- end;
- procedure TMainForm.timerTimer(Sender: TObject);
- var x , y, z : real ;
- begin
- x:= TrackBar1.Position;
- y := TrackBar2.Position;
- z:= TrackBar3.Position;
- glRotatef(x, 1.0, 0.0, 0.0); // повертання матриці проти годинникової
- glRotatef(y, 0.0, 1.0, 0.0); // стрілки на кут навколо вектора від
- glRotatef(z, 0.0, 0.0, 1.0); // початкової точки
- SwapBuffers(DC); // обмін фронтального і зворотного буферів
- InvalidateRect(Handle, nil, False); // перемальовування форми
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement