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

Aktuelle Zeit: Sa Jul 19, 2025 02:16

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Koordinatensystem "richtig" rotieren
BeitragVerfasst: Mi Dez 30, 2009 13:46 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 23, 2007 18:03
Beiträge: 49
Wohnort: Dortmund-Scharnhorst
Hallo zusammen,

ich hab ein kleines Rotationsproblem mit meinem Projekt. Ich möchte gerne nur ein Koordinatensystem zeichnen und dieses um X,Y und Z Achse rotieren lassen können.

Soweit klingts ja ganz einfach, klappt auch einigermaßen nur will sich mein Koordinatensystem nicht "richtig" rotieren lassen.

Hier mal mein Code

Code:
  1.  
  2. //Das alles steht in meiner render prozedur
  3.  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  4.  
  5.   glMatrixMode(GL_PROJECTION);
  6.   glLoadIdentity;
  7.   gluPerspective(45.0, pRender.Width/pRender.Height, NearClipping, FarClipping);
  8.  
  9.   glMatrixMode(GL_MODELVIEW);
  10.   glLoadIdentity;
  11.  
  12.  
  13.   glTranslatef(0, 0, -Zoom); //Zoom gibt an wie nah ich dem ursprung sein möchte
  14.  
  15.  
  16.   //Hier soll die Drehung um die Achsen geschehen
  17.   glRotatef(YDrehung,0,1,0);
  18.   glRotatef(XDrehung,1,0,0);
  19.   glRotatef(ZDrehung,0,0,1);
  20.  
  21.  
  22.  //Zeichnen der Achsen
  23.   glBegin(GL_LINES);
  24.     //X-Achse
  25.     glcolor3f(0,1,0);
  26.     glVertex3f(-1000, 0, 0);
  27.     glVertex3f( 1000, 0, 0);
  28.     //Y-Achse
  29.     glcolor3f(0,0,1);
  30.  
  31.     glVertex3f(0, -1000, 0);
  32.     glVertex3f(0,  1000, 0);
  33.     //Z-Achse
  34.     glcolor3f(1,0,0);
  35.     glVertex3f(0, 0, -1000);
  36.     glVertex3f(0, 0,  1000);
  37.   glEnd;
  38.  


Das Verhalten ist nun dies: Egal wie mein System gerade im Raum liegt die Drehung um die Z-Achse klappt immer perfekt. Ändere ich die Reihenfloge der Drehungen so dass zB zuletzt um die X-Achse gedreht wird, so klappt diese Drehung immer perfekt (unter perfekt verstehe ich hier, dass wenn man den Drehwinkel ändert, die Achse für den Betrachter stillsteht und nur die anderen beiden sich bewegen).

Aus dem was ich bisher weis, denke ich mal dass der Aufruf von gltranslatef nicht korrekt ist. Er müsste wohl hinter die Rotation kommen, da sich ja mein Ursprung sonst verschiebt. Allerdings lande ich dann irgendwo im nichts und die Rotationen funktionieren noch immer nicht korrekt.

Bin dankbar für jedwede Hilfe

Gruß

Basti

_________________
Those who fear the dark never saw what light can do...

Bedecke deinen Himmel Zeus...

Fetter grüne du Laub...


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Dez 30, 2009 14:08 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

hilft dir das weiter? Das dreht das Objekt um die OpenGL Achsen.
X-Achse: Q, W
Y-Achse: A, S
Z-Achse: Y, X

€: Das die Rotation nich funzt liegt daran, das die die Matrix ja vorher schon mit einer anderen Drehung manipuliert hast. Deshalb musst du die die Achsen selbst zurechtdrehen und dann nur noch so übergeben (siehe Code).

MfG Bergmann.


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

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Dez 30, 2009 14:58 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 23, 2007 18:03
Beiträge: 49
Wohnort: Dortmund-Scharnhorst
Das sieht vom Ergebnis ziemlich genau nach dem aus was ich habe, allerdings möchte ich gerne das die Achse um die man dreht (angenommen man dreht immer nur um eine Achse gleichzeitig) für den Betrachter stehenbleibt.

_________________
Those who fear the dark never saw what light can do...

Bedecke deinen Himmel Zeus...

Fetter grüne du Laub...


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Dez 30, 2009 16:54 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
Jann1k hat geschrieben:
Das sieht vom Ergebnis ziemlich genau nach dem aus was ich habe, allerdings möchte ich gerne das die Achse um die man dreht (angenommen man dreht immer nur um eine Achse gleichzeitig) für den Betrachter stehenbleibt.


komisch, was du beschreibst macht Bergmanns Beispiel doch?
Sieht das bei dir anders aus als so? Wenn ja, warum? wenn nein, was genau willst du anders haben?
http://file1.npage.de/003341/04/bilder/achsenstillstand.gif

winke

Wölfchen


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Dez 30, 2009 18:31 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

ich glaub nich das es das gleiche is. Ich hatte das Problem mit Wölfchen auch erst. Vlt wird es mit dem neuen Code etwas deutlicher. Die Achse um die gedreht wird bleibt stehen. Die Striche sind jetzt meine Achsen, ich hab aber noch keine Ahnung wie ich die OpenGL-Achsen jetzt so ausrichte, das du meine Achsen als Achsen des Koordinatensystems nehmen kannst. Sprich die Achsen werden richtig gezeichnet, aber die Objekte sind noch an der falschen Stelle...

MfG Bergmann.


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

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Dez 30, 2009 23:56 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 23, 2007 18:03
Beiträge: 49
Wohnort: Dortmund-Scharnhorst
camera2 ist genau das was ich erreichen wollte, egal wie das System liegt, eine Achse bleibt immer stehen, beim Würfel ist es mir vorgekommen, dass sich alle drei Achsen bewegt haben, dankeschön ich mach mich mal ans Code verstehn ^^

_________________
Those who fear the dark never saw what light can do...

Bedecke deinen Himmel Zeus...

Fetter grüne du Laub...


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Dez 31, 2009 01:31 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
OK, wenn du Fragen hast frag. Und wenn du ne Möglichkeit gefunden hast, die ModelMatrix so zu manipulieren, das die VertexKoordinaten in deinem KoordinatenSystem liegen sag bescheid, das hab ich nämlich auch noch net hin bekommen un das interessiert mich...

€: Ich habs grad nochma durchprobiert, und ich werd nich schlau drauß. Wenn ich die Achsen die ich selbst berechnet hab zeichne, dann haut alles hin, aber wenn ich mich dann mit gluLookAt auf die z-Achse setz, müsste ich ja durch zeichnen einer Linie in x-Richtung (1,0,0) die gleiche Linie bekommen wie wenn ich vor dem gluLookAt die Achse zeichne, oder nicht?!

Code:
  1.   //Achesn zeichnen
  2.   glTranslatef(1,0,0);
  3.   glBegin(GL_LINES);
  4.     glColor3f(1,0,0); glVertex3f(0,0,0); glVertex3fv(@XAxis.vec[0]);
  5.     glColor3f(0,1,0); glVertex3f(0,0,0); glVertex3fv(@YAxis.vec[0]);
  6.     glColor3f(0,0,1); glVertex3f(0,0,0); glVertex3fv(@ZAxis.vec[0]);
  7.   glEnd;
  8.   glTranslatef(-2,0,0);
  9.  
  10.   //cam auf KoordinatenSystem legen
  11.   gluLookAt(            0,             0,             0,
  12.             -ZAxis.vec[0], -ZAxis.vec[1], -ZAxis.vec[2],
  13.             -YAxis.vec[0], -YAxis.vec[1], -YAxis.vec[2]);
  14.  
  15.   //Achsen zeichnen
  16.   glBegin(GL_LINES);
  17.     glColor3f(1,0,0); glVertex3f(0,0,0); glVertex3f(1,0,0);
  18.     glColor3f(0,1,0); glVertex3f(0,0,0); glVertex3f(0,1,0);
  19.     glColor3f(0,0,1); glVertex3f(0,0,0); glVertex3f(0,0,1);
  20.   glEnd;

Is aber nich so. Die beiden KoordinatenSysteme unterscheiden sich voneinander! Hat jmd ne Idee, der n bisl mehr Erfahrung hat als wir?! ^^

Vlt sollten wir auch erstma klarstellen, wie Jann1k das haben will. Willst du dich um die Achsen deine KoordinatenSystems drehen (das jetzt das Problem darstellt), oder reicht es dir dein kompletes KoordinatenSystem um das OpenGL-KoordinatenSystem zu drehen (was ja jetzt schon geht)?! Bring ma Licht ins dunkel^^

MfG Bergmann


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

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Dez 31, 2009 16:53 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 23, 2007 18:03
Beiträge: 49
Wohnort: Dortmund-Scharnhorst
Ich weiß nicht wo der unterschied zwischen "meinem" KS und dem OGL KS besteht, ich möchte allerdings ein Koordinatensystem haben um dessen Achsen ich mich drehen kann(bzw das KS)

_________________
Those who fear the dark never saw what light can do...

Bedecke deinen Himmel Zeus...

Fetter grüne du Laub...


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Dez 31, 2009 17:34 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

den unterschied siehst du in dem Prog oben. Rechts wird immer um die Achsen deines KS gedreht, egal wie es im raum liegt.
links wird immer um das OpenGL KS gedreht. Kann könnte dass Problem jetzt lösen, indem man beim Drehen alles Punkte die in deinem KS liegen mit dreht und dann einfach zeichnet, aber das is denk ich ma sehr performanceraubend. Wie ich das OpenGL KS so manipulier, das es identisch mit deinem KS is weiß ich immer noch nich. Hab schon haufen Sachen ausprobiert, aber so richtig wills net -.-

MfG

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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.011s | 15 Queries | GZIP : On ]