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

Aktuelle Zeit: Di Jun 04, 2024 10:32

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Jul 20, 2012 13:01 
Offline
DGL Member

Registriert: Di Jun 26, 2012 08:15
Beiträge: 10
Programmiersprache: C#
Hey hey,

ich überlege, wie ich ein Objekt auf einem rotierenden Objekt rotieren lassen kann. Beispiel: Man hat eine Scheibe, auf der am Rand 3 Kugeln postiert sind. Die Scheibe soll rotieren. Die Kugeln sollen sich dabei mit bewegen und zusätzlich sich um die eigene Achse drehen.

Bin schon eine ganze Weile am Suchen, finde aber keine Idee für mein Problem. Vielleicht suche ich mit den falschen Suchwörtern. Könnt ihr mir einen Ansatz geben?

Ich scheiter leider auch schon bei der Grundidee.
Wenn der Mittelpunkt der Scheibe genau auf dem 0 Punkt des Koordinatensystems liegt, rotiert sie um die eigene Achse (bspw. y Achse). Die Kugeln kann ich mit Translate auf den Rand der Scheibe bewegen und sie ebenfalls um ihren Mittelpunkt rotieren lassen. Aber wie kann ich die Kugeln mit der Scheibe mitdrehen lassen?

Viele Grüße
Chris


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Jul 20, 2012 13:23 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2067
Programmiersprache: C++
Du scheinst die Bewegungen bei OpenGL noch nicht verstanden zu haben.
  1. Du bewegst dich zum Mittelpunkt der Scheibe,
  2. drehst du dich entsprechend dem aktuellen Winkel der Scheibe,
  3. zeichnest die Scheibe,
  4. bewegst dich zur Position der Kugel (aus Sicht des Ursprungs der Scheibe ohne Berücksichtigung der Rotation, die wurde ja schon berücksichtigt),
  5. drehst dich entsprechend dem Winkel der Kugel,
  6. zeichnest die Kugel

Für die anderen Kugel kannst du entweder die Schritte 6-4 in umgekehrter Reihenfolge (und Vorzeichen) ausführen oder glPop und glPush benutzen.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jul 23, 2012 06:38 
Offline
DGL Member

Registriert: Di Jun 26, 2012 08:15
Beiträge: 10
Programmiersprache: C#
Hi,

ja du hast schon recht, dass ich das Prinzip noch nicht ganz verstanden habe.
Ich erklär mal, wie es bei mir im src bisher ausschaut:

Alle 3d Objekte sind ein eigenes Objekt. Die Objekte werden in einer Klasse Szene aufgerufen und gerendert:
Code:
  1.  
  2. GL.Translate(data.Position.X, data.Position.Y, data.Position.Z);
  3. GL.Rotate(data.Rotation.X, 1.0f, 0.0f, 0.0f);
  4. GL.Rotate(data.Rotation.Y, 0.0f, 1.0f, 0.0f);
  5. GL.Rotate(data.Rotation.Z, 0.0f, 0.0f, 1.0f);
  6. GL.Scale(data.Size.X, data.Size.Y, data.Size.Z);
  7. GL.CallList(glDisplayList);
  8.  


So, nicht alle meine 3d Objekte haben ihren Ursprung genau in ihrem Mittelpunkt. Ich lade meine 3d Objekte aus STL Files. Jetzt müsste ich ja erst einmal die Koordinaten aus dem STL File so verschieben, dass das Objekt wenigstens schon mal genau bei 0,0,0 (ich lade mir eine Matrix4 als Perspektive) in OpenGL geladen wird, oder? Wenn ja, wie finde ich denn den Mittelpunkt eines beliebigen 3d Objekts heraus?

Wenn ich jetzt die Scheibe drehen lasse (mit Rotate) und danach das meine Kugel zum Rand der Scheibe verschiebe (mit Translate) und danach mit Rotate drehen lassen, bleibt die Kugel ja trotzdems stehen. Sie rotiert auf der Stelle. So erwarte ich das ehrlich gesagt auch. Hast du das so gemeint?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jul 23, 2012 10:09 
Offline
DGL Member

Registriert: Di Jun 26, 2012 08:15
Beiträge: 10
Programmiersprache: C#
Ok .. problem ist wohl gelöst:

Ich berechne mir beim einlesen jetzt den Mittelpunkt meines Polygons (Mittelpunkt_X:=Summe_aller_Vertices(x1..xn)/Anzahl Vertices;Mittelpunkt_Y:=Summe_aller_Vertices(y1..yn)/Anzahl Vertices,Mittelpunkt_Z:=Summe_aller_Vertices(z1..zn)/Anzahl Vertices).
Dann verschiebe ich das Polygon einmalig in die Mitte.

Nun kommt OpenGL dran und zwar so, wie du es mir oben gesagt hattest. Zu bedenken ist halt das folgende, was ich nicht gewusst hatte / mir nicht im klaren war:

Zitat:
Wenn T die Translationsmatrix ist, R die Rotationsmatrix und A die alte Matrix auf dem Matritzenstapel, dann steht auf dem Stapel nun: (ATR).
Wird nun ein Punkt v transformiert, so geschiecht dies durch: (ATR)v.
Wenn man jetzt ein paar Klammern entsprechend der Assoziativitätsregeln bei Matrizen etwas umstellt, steht da: A(T(Rv)). Das macht die Sache etwas einfach zum Nachvollziehen.
v wird also erst rotiert, dann bewegt und dann ge-A't. Man kann so erkennen, dass die Transformation, die zuerst auf den Punkt ausgeführt werden soll, als letztes bei OpenGL spezifiziert werden muss (sei es durch MultMatrix oder durch die Helferfunktionen).


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 31 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.009s | 14 Queries | GZIP : On ]