OpenGL > Rotation von Polygonen
-
hmm...scheint so als ob du dir selbst rotationsmatrizen basteln müsstest :), da du für sowas die die momentane rotationsmatrix von polygon 1 bräuchtest
bye
apo
-
Scheint so als hättest du mich wirklich verstanden.
Aber ist dieser Umstand denn wirklich notwendig, d.h. bietet OpenGL keine Möglichkeit das Ganze einfacher zu lösen?
-
da kann ich dir leider auch nich weiterhelfen
stehe selbst an den anfängen von opengl
bye
tt
-
Hat jemand ein Stück Quellcode, wo man durch Tasteneingabe ein Dreieck, Quadrat oder sonstwas um seine eigenen Achsen rotieren lassen kann?
-
du willst doch einfach nur das dein objekt sich dreht wenn du eine taste drückst, und stehen bleibt wenn du sie los lässt oder?
wenn ja, dann setz einfach ein glLoadIdentity() vor die rotate funktion,
dann müsste das so klappen.ich hoffe ich konnte dir helfen
MfG
Stefan
-
Ne, so einfach ist das nicht.
Mein Problem scheint am sogenannten gimbal lock zu liegen, weshalb ich gerade dabei bin, mir Quaternionen anzuschauen, mit dem man dieses Problem umgehen kann.
-
was ist wenn du die einzelnen Rotationen hintereinander Durführst?
glRotatef (x_winkel, 1,0,0);
glRotatef (y_winkel, 0,1,0);
glRotatef (z_winkel, 0,0,1);
-
Ne, bringt nix, hab' ich schon probiert.
-
Tobias Dallmann schrieb:
Ne, bringt nix, hab' ich schon probiert.
Dann hast du glaub ich was falsch gemacht.
-
Hallo,
Ich lasse mein Objekt mit der Maus rotieren. Du musst halt nur die Funktionen für deine Tastatursteuerung übertragen. Fertig. Aus.
void __fastcall TForm1::OpenGL1GLInit(TObject *Sender) { ... //definiere Objekt ... } void __fastcall TForm1::OpenGL1GLPaint(TObject *Sender) { ... glRotatef (GLfloat(rot_y), 1.0, 0.0, 0.0 ); glRotatef (GLfloat(rot_x), 0.0, 1.0, 0.0 ); glCallList(1); glLoadIdentity(); glFlush(); } void __fastcall TForm1::OpenGL1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if ( enabled ) //Maustaste gedrückt { rot_x = rot_x + (X - last_x); rot_y = rot_y + (Y - last_y); last_x = X; last_y = Y; OpenGL1->Repaint(); } }
-
Hi, bin zwar auch noch nicht lange bei OpenGL. aber normal zeichnet man Polygone in dem man ihre Pos und Rotation festhält und dann in jedem Frame erst macht glLoadIdentity() und anschließend die komplette Rotatiion mit den gespeicherten Werten wiederherstellt. Ein Tastendruck bewirkt dann das die Werte für die Rotation sich einfach verändern..
du scheinst das so zu machen daß ein Tastendruck unmittelbar eine Rotation bewirkt, dann kannst du aber eben den Rotationswinkel nicht mehr nachvollziehen nach mehreren Rotationen, was ja genau dein Problem ist, wenn ich das richtig kapiert hab
also machs einfach wie oben gesagt und schon sollte es funzen..oder spricht irgendwas gegen die obere Möglichkeit?
ansonsten könntes du auch einfach den Call von glRotate mit lauter nullen machen, das sollte eigentlich acuh bewirken, daß nix weiter rotiert wird