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

Aktuelle Zeit: Fr Jul 18, 2025 01:27

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



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Rotation und Mausachsen
BeitragVerfasst: Fr Mär 31, 2006 12:55 
Offline
DGL Member

Registriert: Mi Mär 29, 2006 15:02
Beiträge: 6
Hi all,

ich probiere jetzt seit 3 Tagen eine Rotation auf meinen Körper hinzubekommen.
Das klappt solange ich nur um 2 Achsen rotieren möchte.

Nun wollte ich, wie es in CAD-Tools üblich ist rotieren lassen, aber ich bekomme das einfach nicht hin.

Was ich tue ist folgendes.
Ich zeichne meinen Körper (es ist immer nur einer) in der Mitte des Weltkoordinatensystems und möchte dann so rotieren, wenn eine Achse auf mich zeigt er um die anderen beiden rotiert.
Also:
wenn x auf mich zeigt um y und z.
wenn y auf mich zeigt um x und z
und wenn z auch mich zeigt um x und y.

Und alle zwischenstufen natürlich.

Ich habe schon erkannt, das das mit den glRotatef-Funktionen nicht klappt, da er die Koordinatensystem mitrotiert.

Was ich nicht hinbekomme ist, wie ich in abhängigkeit der beiden Mausparameter x und y eine Rotationsmatrix aufbauen kann, mit der ich die Rotation per glMultMatrix selbst vornehmen kann.

Wäre für Eure hilfe dankbar.

Gruss
gottie


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 31, 2006 14:06 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich bin mir nicht sicher, ob das was du beschreibst nicht einfacher ist als du denkst.

Wenn die Z-Achse auf dich zeigt, und das Objekt sich in der X-Y-Ebene drehen soll, heißt dass, das sich das Objekt um die Z-Achse drehen muss.

Das ist das erste.


Um zu verhindern, dass sich das Koordinatensystem mitdreht, musst du vor dem Rotieren glPushMatrix aufrufen, und nachdem du das Objekt gezeichnet hast wieder glPopMatrix.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 31, 2006 14:57 
Offline
DGL Member

Registriert: Mi Mär 29, 2006 15:02
Beiträge: 6
Tu ich ja!

Wie gesagt ich spiele son seit 3 Tagen damit rum.

Das globale Koordinatensystem lasse ich fest stehen. Rotiere also nur noch das Objekt.
Mein Problem ist die Dynamik.

Sprich:

Wenn die lokale z-Achse auf mich zeigt, soll er um globale x-y-Drehen.
Wenn die lokale y-Achse auf mich zeigt, soll er um global x-z-Drehen.
Wenn die lokale x-Achse auf mich zeigt, soll er um global y-z-Drehen.

Und natürlich die kombinatorik aus allem. Sprich die Zwischenstufen auch.

Ich schaffe es immer nur um zwei der drei Vorgaben zu drehen.
Hab jetzt die dritte Drehung auf die rechte Maustaste gelegt.

Ein einfaches Beispiel zu testen.
Zeichnet ein Quader mit ungleichen Kantenlängen und probiert nun mit den zwei Mausachsen und einer Maustaste alle lagen des Quaders durch Rotation zu erreichen.
Ihr werdet immer einen Fall haben, den Ihr nicht erreichen könnt (z.B. ein der flachen Seiten wird man niemals aufrecht zum stehen bekommen).
Alle Beispiele die ich irgendwie zu Rotation gefunden habe decken genau das nicht ab. Die gängigen 3D-Viewer schon und ich weiß nicht wie die das schaffen.

Ich hoffe das mein Problem ein wenig klarer geworden ist.

Gruss
gottie


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 31, 2006 15:25 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also so genau kann ich dir jetzt nicht sagen was du machen musst. Habe da gerade nicht den Kopf dazu um mich da reinzuversetzen. Aber die Rotation ist extrem Reihenfolgenabhängig. In einigen 3D Betrachtern ist die Reihenfolge zum Beispiel so, dass du irgendwie nie hinbekommst, dass das Objekt immer nach Oben zeigt. Dabei würde es ausreichen die X und Y Rotation umzudrehen. Damit wäre das Handling schlagartig besser. So hat man in einigen Betrachtern das Problem, dass irgendwann die Objekte so etwas von Schief im Raum stehen, dass man den nur neustarten kann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 31, 2006 15:42 
Offline
DGL Member

Registriert: Mi Mär 29, 2006 15:02
Beiträge: 6
Hi Lossy,

ich habe auch Deine Beiträge dazu gelesen, aber auch da wird sich nur mit der Rotation um zwei Achsen beschäfftigt (in Abhängigkeit der beiden Maustasten)

Zweitens:
Du glaubst nich wie quer man Modelle drehen kann. Mittlerweile habe ich alle erdenklichen Einstellungen durch.
Global drehen um eine Achse, lokal um eine andere.
Ich bin jetzt wieder zurück gegangen, so das ich global gar nicht mehr drehe, sondern nur noch lokal und wie gesagt, die dritte Achse liegt bei mir jetzt auf der rechten Maustaste.
Die Reihenfolgenunterscheidung habe ich auch schon durch.

So der Test wie folgt:

lokale Rotation um erst x, dann y: Rotiert korrekt relativ zum globalen Koordinatensystem um x, aber nicht um y.
lokale Rotation um erst y, dann x: Rotiert korrekt relativ zum globalen Koordinatensystem um y, aber nicht um x.

So das eine kombination der beiden in Abhängigkeiten (siehe mein letztes Posting) doch die Lösung liefern sollte, aber das tut es nicht.

Leider finde ich auch im WWW keine Beispiele, die sich mit dieser Tatsache beschäftigen. Da ich hier aber Visualisierer habe die genau das Verhalten wiederspiegeln, ist natürlich mein Ehrgeiz geweckt, das doch auch irgendwie hinzubekommen. Besonders da meine Kunden ein solches Verhalten erwarten.

Falls jemand einen Link dazu hat, immer her damit.

Gruss
Stefan


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 31, 2006 23:28 
Offline
DGL Member

Registriert: Mi Mär 22, 2006 20:16
Beiträge: 22
Wohnort: Wuppertal
Du meinst, das die Achsen nicht mitrotiert werden sollen?
Die Rätsels Lösung ist, das glMultMatrix() und glRotate() immer mit der Formel A = A * B dreht.

Mich hat das Problem auch mal interessiert und bin auf eine Lösung gestoßen: für ein anderes Drehverhalten muss man mit A = B * A drehen. Das konnte ich bei meinem 3D-Spiel gutgebrauchen.

Im Anhang ist ein Demoprogramm samt Quelltext, das ein Quarder zeigt, den man mit 4 Methoden drehen kann: A = A * B; A = B * A und Open-GL's interne glMultMatrix()-Funktion, und auch der normalen glRotateF()-Funktion (beide arbeiten mit A = A * B).
Insgesamt 3x mit A = A * B und einmal mit A = B * A (anderes Drehverhalten)

Vielleicht ist es ja das, was du suchst.

Wie man OpenGL beibringt, es andersherum zu machen, hab ich auch nicht herausgefunden (weiß das jemand anders?), deswegen hatte ich mal meine eigene Matrix-Funktionen geschrieben, die das dann macht, sorum ich will.

PS die Bedienung des Demo-Programmes ist einfach:
Über die Bildfläche fahren, Maustaste gedrückt halten und drehen:
Linke Maustaste: X,Y-Achse
Rechte Maustaste: Z-Achse


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Zuletzt geändert von Noop am Fr Mär 31, 2006 23:31, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 03, 2006 07:36 
Offline
DGL Member

Registriert: Mi Mär 29, 2006 15:02
Beiträge: 6
Hi Noop,

ich habe mir Dein Beispiel angeschaut und es ist genau das was ich will.
Komisch, das es so ziemlich das einzige Beispiel ist, bei dem eine solche Art der Rotation mal implementiert ist.

Da ich aus der C++-Ecke komme, werd ich mal probieren deinen Code zu verstehen und in meinem Tool umzusetzen.
Wenn ich Fragen hab meld ich mich bestimmt hier nochmal.

Gruss und vielen Dank
gottie


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 03, 2006 13:50 
Offline
DGL Member

Registriert: Mi Mär 29, 2006 15:02
Beiträge: 6
Hi,

ich danke Euch für eure Unterstützung. Nun funktioniert es so wie ich es wollte.

Danke[/code]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 19, 2006 11:38 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Na das ist doch nett, wenn sich die Leute bedanken ;)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 21, 2006 19:49 
Offline
DGL Member

Registriert: So Apr 16, 2006 18:11
Beiträge: 27
:lol: :lol: :lol: :lol: ...danke Noop...dank deines Beispiels hast du auch mir geholfen, habe schon lange danach gesucht.

Noch mal besten Dank...


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.022s | 15 Queries | GZIP : On ]