Einzelnen Beitrag anzeigen

Benutzerbild von Mr_T
Mr_T

Registriert seit: 7. Jun 2002
Ort: Eilsum
136 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Kugel aus Zylinderschichten konstruieren [OpenGL]

  Alt 14. Mär 2004, 16:41
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!
  Mit Zitat antworten Zitat