OpenGL: X,Y und Z drehen
-
Hi!!!
Im Moment arbeite ich gerade an einem Programm, dass Cad-Dateien darstellt und sie rotieren, skalieren verschieben lässt. Das klappt auch soweit wirklich gut. Das ganz läuft mit dem C++ Builder und Open GL.
Ich habe jetzt jedoch folgendes Problem:
Es handelt sich dabei ums Rotieren. Das Objekt lässt sich in meinem Programm durch die Maus rotieren. Wenn ich meine Maus nach links bzw. recht drehe, rotiert das Objekt um die Y-Achse, nach oben oder unten rotiert es um die X Achse.
Jedoch gibt es da ja auch noch die Z-Achse. Um die sollte ja auch noch gedreht werden und das nur mit der Maus, ohne Hilfe der Tastatur... Es soll so ähnlich laufen wie bei "Profi" Software wie Rhinoceros. Leider habe ich dafür absolut keine Idee. Gibt es denn da eine Möglichkeit unter Open GL? Vielleicht hatte hier ja schon mal jemand ein ähnliches Problem und kann mir eine Lösung geben. Schön wäre es, mit Code, das hilft mir nämlich am besten...Danke sehr
Gruß
Blubbermann
-
Irgendwie ist dein Problem unklar - suchst du eine Eingabemöglichkeit (dann vielleicht die rechte MT, bzw. die Mittlere, oder die Linke und Rechte gleichzeitig), suchst du den Weg in der Rotationsmatrix, um das Objekt zu drehen, oder suchst du die Formel, um einen Punkt einfach so, auf der Z-Achse zu drehen?
M.T.
-
naja, ich gebe zu, war vielleicht ein wenig unklar, aber danke, dass du nochmal nachfragst...
das problem ist folgendes: ich drehe das cad-objekt in meiner matrix nur um die x bzw y achse, also so:
glRotatef(anglex,1.0,0.0,0.0); glRotatef(angley,0.0,1.0,0.0);
das ganze läuft mit mousebewegung ab...
die z-achse wird dabei nicht berücksichtigt. ich suche jetzt eine möglichkeit, um um die z-achse zu drehen. das ganze soll aber ohne berücksichtigung von tastatur oder ähnlichem laufen, sondern nur mit der mouse. jedoch habe ich keine idee, wie ich das umsetzen kann...
hoffe, dass das etwas deutlicher war... ein beispiel, das auch um z dreht ist die software rhinoceros...
[ Dieser Beitrag wurde am 07.05.2003 um 16:05 Uhr von blubbermann editiert. ]
-
Du benutzt nicht die linke, sondern die rechte MT und drehst um die Maus-X-Bewegung ...
... aber am Besten find ich's im UT2k3 Editor - L MT = x-Achse / R MT = z-Achse L+R MT = y-Achse
M.T.
-
ich hätte vielleicht noch erwähnen sollen, dass alle MT besetzt sind. die linke ist zum rotieren, die rechte zum skalieren und die mittlere zum verschieben des objekts...
-
Dann kannst du nur Kombinieren (ist aber doof), verwende doch einfach die Strg-Taste zur Umschaltung
M.T.
-
tja, was soll ich sagen, dass mache ich ja, find ich aber doof
hätte lieber eine andere lösung, und ich weiß, dass es eine gibt! ich kenne mehrere programme, die die lösung anwenden...
-
Dann kopiere diese Methode von den Programmen ...
*witz* oder kauf dir eine 3D-Maus
/witz
M.T.
-
Hallo,
also ich habe mir mal die Steuerung von Milkshape angesehen (was andres hatte ich nicht da). Da wird beim nach rechts und links bewegen der Maus um die Y-Achse gedreht, und beim nach oben und unten bewegen um die X Achse der Kamera (also der Right-Vektor). Mit der Steuerung kann man alle rotationen erreichen, also das objekt von allen seiten sehen.
Hoffentlich hilft das etwas ...
-
ne, leider nicht wirklich, aber der dreht auch nicht nur um x und y, sondern auch um z! aber trotrdem danke
meiner meinung nach müsste man nach jeder drehung (also jedesmal, wenn die links mousetaste neu gedrückt wird) eine neue ebene erstellen, das objekt also als neue ebene ansehen...kann es aber nicht umsetzen, schade eigentlich
ist hier denn kein opengl spezi der mein problem versteht
-
Mal ne ganz andere Sache - was hat das eigentlich mit OGL zu tun? Das benutzt du doch nur zum Anzeigen. Deine Frage ist eigentlich ganz allgemeines Interface-Design.
M.T.
-
Hi, ihr könnt ja mal unter folgenden Links das Programm anschauen. Vielleicht ist dann auch deutlicher, was das Problem ist. Am deutlichsten wird es beim Motiv bjoern.cad.
-
Die Dateien sind beschädigt ... sagt zumindet WinRAR
M.T.
-
-
[scherz]Wenn du jetzt noch Morphing einbaust hast du ne super Grafikdemo ;)[/scherz]
1. Warum flimmert das so grausam?
2. Warum bleibt immer die voherige Ansicht bestehen, bis man mit LMT bestätigt?
3. Warum kann man L+R MT gleichzeitig benutzen (cooler Effekt)?Auf Frage 3 bezogen - du könntest prüfen, welche Taste zuerst gedrückt wurde und dann, wenn die jeweils andere MT zusätzlich gedrückt wird, auf die Z-Achse umschalten.
M.T.
-
also zu deinen fragen:
1. bis jetzt hatte ich noch nicht gemerkt, dass es grausam flimmert! habe es schon auf einigen rechnern getestet, aber da geht es eigentlich...
2. verstehe die frage nicht so ganz, aber man kann das objekt (in dem fall "bjoern") nur mit gedrückter LMT bewegen...
3. Das ist eigentlich so gewollt, also dass man auch alle drei tasten gleichzeitig benutzen kann...ich bin aber auch kein profi. ist das erste mal, dass ich mit opengl gearbeitet habe...daher sind bugs bzw. fehler zu entschuldigen
-
Das könnte daran liegen, dass du den BackBuffer nicht richtig löschst. Ich hab hier in der Firma einen uralten Intel-Grafik-Chip, der entschuldigt leider gar nichts, aber mit dem Teil findet man super Fehler in bestimmten grafischen Programmen ... ich kann dir auch mal nen Screen schicken (Mail-Adresse erforderlich)
M.T.
-
blubbermann2002@yahoo.de, gerade erstellt
-
Jetzt hab ich herausgefunden, woran das liegt - du malst die neue Ansicht immer auf einen Buffer - oder? Dann werden die beiden Buffer (der neue und der alte) immer abwechseld dargestellt - daher das Flimmern.
Deswegen ist es auch unmöglich dieses Bleiben der alten Ansicht auf einen Screen zu bringen.M.T.
-
Ich verstehe Dein Problem überhaupt nicht wirklich:
Mit LMT hoch-runter - drehst Du um die X-Achse
Mit LMT links-rechts - drehst Du um die Y-Achse (oder umgekehrt)Mit RMT hoch-runter - zoomst Du ran oder raus
Da kannst Du doch
Mit RMT links-rechts - um die Z-Achse drehen...!?!?
-
Hi!
Habe mein Problem leider immer noch nicht lösen können (habe mich auch erst um was anderes gekümmert)!
Jedoch bin ich nun schon einen Schritt weiter. Ich habe entdeckt, dass er auch um Z dreht, jedoch häng es davon ab, welche Rotierung ich als erste vornehme. Hier ein Beispiel.
glRotatef(angley,0.0,1.0,0.0); //Rotieren Y glRotatef(anglex,1.0,0.0,0.0); //Rotieren X
in diesem Fall rotiert er sämtliche Bewegungen, also mit der Mouse nach links oder rechts, korrekt.
schreibe ich es so:
glRotatef(anglex,1.0,0.0,0.0); //Rotieren X glRotatef(angley,0.0,1.0,0.0); //Rotieren Y
rotiert er sämtliche Bewegungen, also mit der Mouse nach oben oder unten, korrekt. Jetzt muss ich es nur unter einen 'Hut' bringen. Leider weiß ich nicht mehr weiter.