Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Інститут комп’ютерних наук та інформаційних технологій
Кафедра автоматизованих систем управління
 
РОБОТА З ГРАФІКОЮ
Лабораторна робота № 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.