Also wie man es mit unterschiedlich dicken Zylindern macht kann ich dir leider auch nicht sagen ...

Ich persönlich verwende für Kugel immer eine kleine Prozedur, welche ich mal im Delphigl-Forum entdeckt habe:
Delphi-Quellcode:
procedure DrawSphere(CX, CY, CZ, Radius : GLFloat; N : Integer);
var
i,j : Integer;
theta1,theta2,theta3 : GLFloat;
X, Y, Z, px, py, pz : GLFloat;
begin
if Radius < 0 then
Radius :=-Radius;
if n < 0 then
n := -n;
if (n < 4) or (Radius <= 0) then
begin
glBegin(GL_POINTS);
glVertex3f(CX, CY, CZ);
glEnd;
exit;
end;
for j := 0 to n div 2 -1 do
begin
theta1 := J*2*PI/N - PI/2;
theta2 := (J+1)*2*PI/n - PI/2;
glBegin(GL_TRIANGLE_STRIP);
for i := 0 to n do
begin
theta3 := i*2*PI/N;
x := cos(theta2) * cos(theta3);
y := sin(theta2);
z := cos(theta2) * sin(theta3);
px := CX + Radius*x;
py := CY + Radius*y;
pz := CZ + Radius*z;
glNormal3f(X,Y,Z);
glTexCoord2f(1-I/n, 2*(J+1)/n);
glVertex3f(px,py,pz);
X := cos(theta1) * cos(theta3);
Y := sin(theta1);
Z := cos(theta1) * sin(theta3);
px := CX + Radius*X;
py := CY + Radius*Y;
pz := CZ + Radius*Z;
glNormal3f(X,Y,Z);
glTexCoord2f(1-i/n, 2*j/n);
glVertex3f(px,py,pz);
end;
glEnd;
end;
end;
cx, cy und cz sind dabei der Mittelpunkt, der Radius sollte klar sein und "n" gibt an, wie genau das Gebilde einer Kugel angenähert wird (je größer "n", umso besser sieht die Kugel aus, aber umso rechenaufwendiger wird das ganze auch).
Hoffe das hilft dir weiter
Mein neuer, 13 Teiliger Open GL - Kurs (Samples in Delphi):
www.dcw-group.net
Neu! Ein großer Teil der Demos nach
Kylix übersetzt!
Neu! Teil 2b: Initialisierung von
OpenGL unter Kylix ist fertig!