Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 08:12

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Gekippter Kreis
BeitragVerfasst: Sa Aug 06, 2005 05:58 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 09, 2005 13:48
Beiträge: 117
Wohnort: Sankt Augustin
Hallo,

und schon wieder bin ich mit meinem mathematischen Latein am Ende.

Ich möchte einen Kreis z.B. um die y-Achse zeichnen und diesen kippen. Sein maximaler y-Wert soll z.B.
in der -x Richtung um die Einheit 1 höher sein als sein Mittelpunkt in der y-Achse und sein minimaler y-Wert
in der +x Richtung um 1 niedriger als sein Mittelpunkt in der y-Achse.

Der u.a. Code funktioniert, aber der Kreis ist nicht parallel zur z-Achse ausgerichtet.

Code:
  1.  var
  2.   slices, i: integer;
  3.   A, A1, B, B1, Radius, Angle: TGLdouble;
  4.   V1, V2: TGLvector;
  5. begin
  6.     .
  7.     .
  8.     .
  9.     Radius := 10.5;
  10.     Angle := 180;
  11.     Slices := 180;
  12.     for i := 1 to Slices do
  13.     begin
  14.       A := 2 * PI * i / Slices;
  15.       B := 2 * PI * (i+1) / Slices;
  16.       A1 := 2 * PI * i / Slices;
  17.       B1 := 2 * PI * (i+1) / Slices;
  18.       A1 := A1 + Angle;
  19.       B1 := B1 + Angle;
  20.       V1.x := sin(A)*Radius;
  21.       V1.y := cos(A)*Radius;
  22.       V1.z := cos(A1)*Radius;
  23.       V2.x := sin(B)*Radius;
  24.       V2.y := cos(B)*Radius;
  25.       V2.z := cos(B1)*Radius;
  26.       glBegin(GL_LINES);
  27.         glVertex3fv(@V1);
  28.         glVertex3fv(@V2);
  29.       glEnd;
  30.     end;
  31.     .
  32.     .
  33.     .
  34. end;


Kann mir da jemnd helfen?

Moderiert von Lossy eX: Pascal Tags hinzugefügt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 06, 2005 09:24 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
bitte benutze doch die Pascal-tags! Oben in deinem Antwort-schreiben-Fenster gibt es ein paar Schaltflächen für Formatierung. Die darfst du alle hernehmen!

Code:
  1.  
  2. // So sieht Code doch viel schöner aus, oder?
  3.  


und sollte es nicht reichen, den Kreis einfach zu drehen?

Code:
  1.  
  2. glrotatef(45,0,0);           // nachfolgendes Rendering um 45° um die x-Achse drehen
  3. rendercircle(5,1,V3(0,0,0)); // 5 Segmente, Radius 1, Offset 0|0|0
  4. glrotatef(-45,0,0);         // Drehung wieder normalisieren
  5.  


angenommen rendercircle zeichnet einen Kreis, der genau waagerecht liegt, kannst du ihn mit glrotate einfach drehen.

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 06, 2005 11:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also Rotieren ist ja nicht neigen. Aber wenn das gehen sollte solltest du das nehmen.

Das Neigen ist einfacher als du denkst, da du bereits alle benötigten Werte hast. Du berechnest ja den Y Wert und den kannst du mit dem Dreisatz ins Verhältnis mit dem Radius und deiner Maximalneigung setzen. Dann bekommst du raus um wie viel du den X Wert verschieben musst. Ich hoffe es war halbwegs verständlich.

PS: Du solltest das glBegin und glEnd nur ein mal aufrufen. Und dann evtl mit GL_LINELOOP arbeiten und den letzten Wert zwischenspeichern. So unnötige arbeit vermeiden die eh gleich ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 06, 2005 14:43 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 09, 2005 13:48
Beiträge: 117
Wohnort: Sankt Augustin
Hallo,

danke für die Tipps aber das ist nicht was ich suche. Ich habe vergessen zu sagen, dass der Kreis nur ein Teil eines größeren Objekts ist, das ich zeichnen möchte. Ich möchte zwei Kreise konstruieren die beliebig im Raum liegen und diese dann mit QUADS verbinden, damit ich eine geschlossene Röhre bekomme. Das zeichnen des Kreises ist also eigentlich gar nicht nötig sondern ich brauche nur die Berechnungsformeln. Ich habe ihn nur gezeichnet um zu sehen, ob meine Berechnungen stimmen.

Wenn mir da also jemand helfen könnte, wäre das toll.

Danke!!!!![/pascal]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 06, 2005 16:49 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Wurde das nicht im Beitrag "Schiefer Kegel" beantwortet. Das was du jetzt sagst klingt für mich Haar genau so!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 06, 2005 19:47 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 09, 2005 13:48
Beiträge: 117
Wohnort: Sankt Augustin
Das mit dem schiefen Kegel ist eine andere Sache. Bei diesem Kegel stehen die beiden Kreise immer parallel zueinander und der obere Kreis ist halt nur ein bisschen kleiner als der untere. Ausserdem ist eine Seite der beiden Kreise immer rechtwinklig zu den Kreisen ausgerichtet. Hier ging es also nur darum den einen Kreis ein bisschen aus der Mitte zu verschieben und die Punkte der beiden Kreise zu verbinden um eine geschlossene Röhre zu erzeugen.

Jetzt geht es darum zwei Kreise beliebig zu "kippen" und so zu verbinden, dass eine geschlossene Röhre entsteht.

Am besten wäre es, wenn ich einen Kreis um eine beliebig im Raum liegende Achse zeichnen könnte, da die Achsen beider Kreise bekannt sind. Dann könnte ich sie mit Flächen verbinden und hätte eine Röhre.

Es geht aber auch, dass ich die geschlossene Röhre im Nullpunkt erzeuge (mit gekippten Kreisen) und dann an den vorgesehenen Punkt verschiebe und so rotiere, dass die Röhre die gewünschte Lage einnimmt.

Ich hoffe, dass das weiterhilft und nicht nur verwirrt...



Danke


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 07, 2005 00:57 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also wenn ich dich richtig verstanden habe, dann kann ich dir diese Methode anbieten. Ist aber betimmt nicht die Performanteste:

Du Konstruierst die mittels glRotate und glTranslate eine Matrix für den einen Kreis.
Du holst die die Matrix mit glGetFloatv(GL_MODELVIEW)
Du multiplizierst deine Punkte vom Kreis mit der Matrix und Speicherst das Ergebnis in nem Feld

Du setzt die ModelviewMatrix zurück.
Du wiederholst die Schritte für den 2 Kreis.

Du setzt die ModelviewMatrix zurück.
Du verbindest die Koordinaten die in den Array stehen und zeichnest deine Röhre.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 17 Queries | GZIP : On ]