Статья: OpenGL и Delphi на практике
x1e,y1e:Single;
x0b,y0b:Single;
x0e,y0e:Single;
t0,t1:Single;
dt:single;
begin
t0:=-3;t1:=3;
dt:=0.06;
while t0<=t1 do
begin
x0b:=a*sin(t0)*sin(t0)*sin(t0)*sin(t0)*cos(t0);
y0b:=a*abs(sin(t0)*cos(t0));
x0e:=a*sin(t0+dt)*sin(t0+dt)*sin(t0+dt)*sin(t0+dt)*cos(t0+dt);
y0e:=a*abs(sin(t0+dt)*cos(t0+dt));
x1b:=b*sin(t0)*sin(t0)*sin(t0)*sin(t0)*cos(t0);
y1b:=b*abs(sin(t0)*cos(t0));
x1e:=b*sin(t0+dt)*sin(t0+dt)*sin(t0+dt)*sin(t0+dt)*cos(t0+dt);
y1e:=b*abs(sin(t0+dt)*cos(t0+dt));
glBegin(GL_TRIANGLE_STRIP);
glNormal((x0b+x1e)/2,(y0b+y1e)/2,(r1+r0)/2);
glVertex3f(x0b,y0b,r0);
glVertex3f(x0e,y0e,r0);
glVertex3f(x1e,y1e,r1);
glVertex3f(x1b,y1b,r1);
glEnd;
t0:=t0+dt;
end;
end;
procedure DrawFace(A,R:Single;Normal:Boolean);