Ребята, мне написали программу в Паскале котрая выводит конус который вращается вокруг оси(X,Y,Z), входными данными являются высота, радиус, ось вращения, сторона вращения, помогите написать что за что отвечает в этой программе. Вот текст программы
unit Unit_Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OpenGL, StdCtrls, ExtCtrls, Spin;
type
TMainForm = class (TForm)
Panel: TPanel;
RadioGroupDir: TRadioGroup;
RadioGroupAxis: TRadioGroup;
Timer: TTimer;
SpinEdit1: TSpinEdit;
Label1: TLabel;
SpinEdit2: TSpinEdit;
Label2: TLabel;
procedure FormPaint(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure TimerTimer(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
procedure SpinEdit2Change(Sender: TObject);
private
hrc: HGLRC;
angleX, angleY, angleZ: Integer;
A,B:integer;
quadObj:GLUquadricObj;
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 );
pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
nPixelFormat := ChoosePixelFormat(hdc, @pfd);
SetPixelFormat(hdc, nPixelFormat, @pfd);
end ;
procedure TMainForm.FormCreate(Sender: TObject);
begin
SetDCPixelFormat(Canvas.Handle);
hrc := wglCreateContext(Canvas.Handle);
A:=SpinEdit1.Value;
B:=SpinEdit2.Value;
quadObj:=gluNewQuadric;
gluQuadricDrawStyle(quadObj,GLU_FILL);
gluQuadricOrientation(quadObj,GLU_INSIDE);
end ;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
wglDeleteContext(hrc);
end ;
procedure TMainForm.FormPaint(Sender: TObject);
begin
wglMakeCurrent(Canvas.Handle, hrc);
glViewPort(0 , 0 , ClientWidth-Panel.ClientWidth, ClientHeight);
glClearColor(0 .0 , 0 .0 , 0 .0 , 1 .0 );
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
glFrustum(-1 , 1 , -1 , 1 , 4 , 10 );
glMatrixMode (GL_MODELVIEW);
glLoadIdentity;
glTranslatef(0 .0 , 0 .0 , -8 .0 );
glColor3f(0 .0 , 0 .0 , 1 .0 );
glBegin(GL_LINES);
glNormal3f(0 .0 , 0 .0 , 2 .0 );
glVertex3f(0 .0 , 0 .0 , 0 .0 );
glVertex3f(1 .7 , 0 .0 , 0 .0 );
glVertex3f(0 .0 , 0 .0 , 0 .0 );
glVertex3f(0 .0 , 1 .7 , 0 .0 );
glVertex3f(0 .0 , 0 .0 , 0 .0 );
glVertex3f(-1 .0 , -1 .0 , 1 .0 );
glEnd;
glColor3f(1 .0 , 1 .0 , 0 .0 );
glPushMatrix;
glTranslatef(1 .7 ,0 ,0 );
glRotatef(90 ,0 ,1 ,0 );
gluCylinder(quadObj,0 .05 ,0 .0 ,0 .1 ,10 ,10 );
glPopMatrix;
glPushMatrix;
glTranslatef(-1 .0 ,-1 .0 ,1 .0 );
glRotatef(-30 ,-1 ,1 ,1 );
gluCylinder(quadObj,0 .05 ,0 .0 ,0 .1 ,10 ,10 );
glPopMatrix;
glPushMatrix;
glTranslatef(0 .0 ,1 .7 ,0 .0 );
glRotatef(-90 ,1 ,0 ,0 );
gluCylinder(quadObj,0 .05 ,0 .0 ,0 .1 ,10 ,10 );
glPopMatrix;
glColor3f(1 .0 , 0 .0 , 0 .0 );
glRotatef(angleX+20 , 1 .0 , 0 .0 , 0 .0 ); // поворот объекта - ось X
glRotatef(angleY, 0 .0 , 1 .0 , 0 .0 ); // поворот объекта - ось Y
glRotatef(angleZ, 0 .0 , 0 .0 , 1 .0 ); // поворот объекта - ось Z
glRotatef(90 , -1 .0 , 0 .0 , 0 .0 );
gluCylinder(quadObj,0 .01 *B,0 .0 ,0 .01 *A,10 ,10 );
gluQuadricOrientation(quadObj,GLU_INSIDE);
gluDisk(quadObj,0 .0 ,0 .01 *B,10 ,10 );
gluQuadricOrientation(quadObj,GLU_OUTSIDE);
SwapBuffers(Canvas.Handle);
wglMakeCurrent(0 , 0 );
end ;
procedure TMainForm.TimerTimer(Sender: TObject);
const
delta = 6 ;
var
d_angle: Integer;
begin
if RadioGroupDir.ItemIndex = 0 then
d_angle := delta
else
d_angle := -delta;
case RadioGroupAxis.ItemIndex of
0 : begin
angleX := (angleX + d_angle) mod 360 ;
angleY := 0 ;
angleZ := 0 ;
end ;
1 : begin
angleX := 0 ;
angleY := (angleY + d_angle) mod 360 ;
angleZ := 0 ;
end ;
2 : begin
angleX := 0 ;
angleY := -30 ;
angleZ := (angleZ + d_angle) mod 360 ;
end ;
3 : begin
angleX := (angleX + d_angle) mod 360 ;
angleY := (angleY + d_angle) mod 360 ;
angleZ := (angleZ + d_angle) mod 360 ;
end ;
end ;
InvalidateRect(Handle, nil , False);
end ;
procedure TMainForm.SpinEdit1Change(Sender: TObject);
begin
A:=SpinEdit1.Value;
end ;
procedure TMainForm.SpinEdit2Change(Sender: TObject);
begin
B:=SpinEdit2.Value;
end ;
end .
Заранее благодарен.