Міністерство освіти і науки України
Національний університет “Львівська Політехніка”
кафедра САПР
Звіт
до лабораторної роботи № 4
по темі: “Двовимірні побудови з використанням OpenGL засобами BORLAND DELPHI”
з курсу “ Геометричне моделювання у конструюванні інженерних об’єктів і систем”
Львів 2008
3. ЗАВДАННЯ
4. ТЕКСТ ПРОГРАМИ
Unit Unit1;
interface
Uses
Windows, Messages, Forms, Classes, Controls, ExtCtrls, ComCtrls, StdCtrls, Dialogs, sysutils,
OpenGL;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
hrc:HGLRC;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormPaint(Sender: TObject);
begin
wglMakeCurrent(Canvas.Handle,hrc);
glViewPort (0, 0,ClientWidth,ClientHeight);
glClearColor (0.95, 0.95, 0.95, 1.0);
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (0, 0, 0);
glBegin (GL_TRIANGLES);
glVertex2f(-1,-1);
glVertex2f(-1,1);
glVertex2f(-0.1,0);
glEnd;
wglMakeCurrent(0,0);
end;
procedure SetDCPixelFormat (hdc : HDC);
var
pfd : TPixelFormatDescriptor;
nPixelFormat : Integer;
begin
FillChar (pfd, SizeOf (pfd),0);
nPixelFormat:= ChoosePixelFormat (hdc, @pfd);
SetPixelFormat (hdc, nPixelFormat, @pfd);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetDCPixelFormat(Canvas.Handle);
hrc:=wglCreateContext(Canvas.Handle);
end;
procedure TForm1.FormDestroy(Sender: TObject);
Begin
wglDeleteContext(hrc);
End;
procedure TForm1.FormPaint(Sender: TObject);
begin
wglMakeCurrent(Canvas.Handle,hrc);
glViewPort (0, 0,ClientWidth,ClientHeight);
glClearColor (1.0, 1.0, 0.9, 1.0);
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (0, 0, 0);
glBegin(GL_LINE_LOOP);
glVertex2f(-1.0,0.0);
glVertex2f(1.0,0.0);
glEnd;
glBegin(GL_LINE_LOOP);
glVertex2f(0.0,-1.0);
glVertex2f(0.0,1.0);
glEnd;
if (Form1.CheckBox1.Checked) or (Form1.CheckBox2.Checked) or (Form1.CheckBox3.Checked) or (Form1.CheckBox4.Checked) then
begin
if Form1.CheckBox1.Checked then
begin
A:=-1;
glColor3f(0.65, 0, 0);
krok:=(2-(-2))/20;
t:=-2;
x:=2*t-sqr(t);
y:=A*t-sqr(t)*t;
x:=x/zoom;
y:=y/zoom;
xprev:=x;
yprev:=y;
while t<=2.0 do
begin
t:=t+krok;
x:=2*t-sqr(t);
y:=A*t-sqr(t)*t;
x:=x/zoom;
y:=y/zoom;
glBegin(GL_LINE_LOOP);
glVertex(xprev,yprev);
glVertex(x,y);
glEnd;
xprev:=x;
yprev:=y;
end;
end;
if Form1.CheckBox2.Checked then
begin
A:=0;
glColor3f(0, 0.65, 0);
krok:=(2-(-2))/20;
t:=-2;
x:=2*t-sqr(t);
y:=A*t-sqr(t)*t;
x:=x/zoom;
y:=y/zoom;
xprev:=x;
yprev:=y;
while t<=2.0 do
begin
t:=t+krok;
x:=2*t-sqr(t);
y:=A*t-sqr(t)*t;
x:=x/zoom;
y:=y/zoom;
glBegin(GL_LINE_LOOP);
glVertex(xprev,yprev);
glVertex(x,y);
glEnd;
xprev:=x;
yprev:=y;
end;
end;
if Form1.CheckBox3.Checked then
begin
A:=1;
glColor3f(0, 0, 0.65);
krok:=(2-(-2))/20;
t:=-2;
x:=2*t-sqr(t);
y:=A*t-sqr(t)*t;
x:=x/zoom;
y:=y/zoom;
xprev:=x;
yprev:=y;
while t<=2.0 do
begin
t:=t+krok;
x:=2*t-sqr(t);
y:=A*t-sqr(t)*t;
x:=x/zoom;
y:=y/zoom;
glBegin(GL_LINE_LOOP);
glVertex(xprev,yprev);
glVertex(x,y);
glEnd;
xprev:=x;
yprev:=y;
end;
end;
if Form1.CheckBox4.Checked then
begin
A:=3;
glColor3f(0.25, 0.5, 0.75);
krok:=(2-(-2))/20;
t:=-2;
x:=2*t-sqr(t);
y:=A*t-sqr(t)*t;
x:=x/zoom;
y:=y/zoom;
xprev:=x;
yprev:=y;
while t<=2.0 do
begin
t:=t+krok;
x:=2*t-sqr(t);
y:=A*t-sqr(t)*t;
x:=x/zoom;
y:=y/zoom;
glBegin(GL_LINE_LOOP);
glVertex(xprev,yprev);
glVertex(x,y);
glEnd;
xprev:=x;
yprev:=y;
end;
end;
end;
wglMakeCurrent(0,0);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;
end.