![]() |
Kugel aus Zylinderschichten konstruieren [OpenGL]
Guten Tag
ich hab mal wieder ne Frage: und zwar will ich eine Kugel mit OpenGL erzeugen. dazu habe ich mir einen Zylinder mit 2 variablen Radien für oben und untenm programmiert und das in 'ne while-Schleife gepackt, um daraus 'ne Kugel zu bauen. das Problem ist allerdings, das ich nicht weiß, wie ich die radien und die Dicke der Schichten konfigurieren muss, damit daraus'ne Kugel wird. Gruß Rob |
Re: Kugel aus Zylinderschichten konstruieren [OpenGL]
Hallo!
Erstmal, machst du das mit 'reinem' OpenGl oder mit irgendeiner Komponente? Die Dicke der Schichten musst du selber entscheiden bzw von der Größe abhängig machen, da sie ja nur die Unterteilungen beeinflussen, sprich wie rund deine Kugel dann aussieht. Wenn ich dich richtig verstanden habe dann möchtest du die Entfernung der (am Beispiel Erde) Breitenkreise von der Gerade durch die Pole wissen, oder? Wenn das so ist und du die 'Unterteilungsdicke weißt', dann kannst du das mit relativ simpler Trigonometrie ausrechnen. ( 90° Winkel ist immer einer da, eine Gerade ist die Höhe über Mittelpunkt und eine der Radius, die Dritte dann der Radius deines Zylinders) Ich hoffe, dass ich keinen allzugroßen Quatsch geschrieben habe. mfg mandumoal |
Re: Kugel aus Zylinderschichten konstruieren [OpenGL]
Das ergibt dann eine Kugel mit einem Poly-Muster wie die Längen-Breiten-Gerade der Erde. Es ist IMHO schöner eine Kugel aus regelmäßigen Dreiecken zu bauen. Dazu gibt es bestimmt auch irgendwo eine Formel oder einen Algo... :gruebel:
|
Re: Kugel aus Zylinderschichten konstruieren [OpenGL]
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:
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).
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; Hoffe das hilft dir weiter :hi: |
Re: Kugel aus Zylinderschichten konstruieren [OpenGL]
Hallo,
wenn du eine Kugel aus mehreren Zylindern zusammensetzten willst: Ich würde ersteinmal empfehlen eine gerade Anzahl von Zylindern zu nehmen. In der Mitte haben die dann die Dicke, wie die Kugel den Durchmesser hat. Stell dir nun die Kugel so gedreht vor, dass die Kegel jeweils senkrecht stehen, dass also die Berührflächen der Einzelnen Zylinder Parallel zu einer Tischfläche vor dir wären. Geh davon aus, dass der Mittelpunkt der Kugel im Koordinatenursprung liegt (0,0,0). Betrachte nun irgendeinen Punkt, auf der Kugel, sagen wir (x,y,z), dann gilt x^2+y^2+z^2=r^2, wobei r der Radius der Kugel ist. Das folgt aus dem Satz von Pythagoras. Die Radien der einzelnen Zylinder kannst du nun so ausrechnen: setzte z=0 und y auf den gewünschten Wert. Dann setz das in die Gleichung oben ein, dann erhältst du x und das ist gleichzeitig der Radius des Zylinders an der Stelle. Grüße Seniman |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz