Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Інститут комп’ютерних наук та інформаційних технологій
Кафедра автоматизованих систем управління
РОБОТА З ГРАФІКОЮ
Лабораторна робота № 2
з дисципліни
" Об‘єктно орієнтоване програмування"
Текст програми:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, OpenGL, Glaux, DGlut, StdCtrls;
type
GLObject = (SolidICOSAHEDRON);
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormCreate(Sender:
mc:array[1..3]of GLFloat;
DC : HDC;
hrc: HGLRC;
Angle : GLfloat;
i: integer;
procedure DrawScene(Tx, Ty, Tz, Angle, Rx, Ry, Rz,
Red, Green, Blue : GLdouble; MyObject : GLObject);
procedure SetDCPixelFormat;
public
{ Public declarations }
end;
var
Form1: TForm1;
MyObject : GLObject;
implementation
procedure TFOrm1.DrawScene(Tx, Ty, Tz, Angle, Rx, Ry, Rz,
Red, Green, Blue : GLdouble; MyObject : GLObject);
begin
glRotatef(Angle, Rx, Ry, Rz);
glTranslated(Tx,Ty,Tz);
glColor3d(Red,Green,Blue);
case MyObject of
SolidIcosahedron : auxSolidIcosahedron (2);
end;
end;
{$R *.dfm}
procedure OutText (txt : PChar);
begin
glPushAttrib(GL_ALL_ATTRIB_BITS);
glListBase(1000);
glCallLists(Length (txt), GL_UNSIGNED_BYTE, txt);
glPopAttrib;
end;
procedure TForm1.FormCreate(Sender: TObject);
const
pos : Array [0..3] of GLFloat = (3.0, 3.0, 3.0, 1.0);
dir : Array [0..2] of GLFloat = (-1.0, -1.0, -1.0);
begin
Angle := 0;
DC := GetDC (Handle);
SetDCPixelFormat;
hrc := wglCreateContext (DC);
wglMakeCurrent (DC, hrc);
glMatrixMode (GL_PROJECTION);
glFrustum (-1, 1, -1, 1, 1, 8);
glMatrixMode (GL_MODELVIEW);
wglUseFontOutlines(canvas.handle, 0, 255, 1000, 0, 0.10,WGL_FONT_POLYGONS, nil);
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
glLightfv(GL_LIGHT0, GL_POSITION, @pos);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, @dir);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
Timer1.Interval := 25;
Timer1.Enabled := True;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
glClearColor (1,0.8, 0.2, 1);
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glPushMatrix;
DrawScene(1, 0, 1,Angle, -1, -1, 0,
0, 0.5, 1,SolidIcosahedron);
glPopMatrix;
SwapBuffers(DC);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Timer1.Enabled:=False;
wglMakeCurrent(0, 0);
wglDeleteContext(hrc);
ReleaseDC (Handle, DC);
DeleteDC (DC);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Angle := Angle + 1.0;
If (Angle >= 360.0) then
Angle := 0.0;
InvalidateRect(Handle, nil, False);
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If Key = VK_ESCAPE then Close;
InvalidateRect(Handle, nil, False);
end;
procedure TForm1.SetDCPixelFormat;
var
pfd : TPixelFormatDescriptor;
nPixelFormat : Integer;
begin
FillChar (pfd, SizeOf (pfd), 0);
pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
nPixelFormat := ChoosePixelFormat (DC, @pfd);
SetPixelFormat (DC, nPixelFormat, @pfd);
end;
end.
Висновок:
На даній лабораторній роботі навчився створювати графічні компоненти у серидoвищі Delphi.