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

Aktuelle Zeit: Sa Jul 19, 2025 23:40

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Matrixrotation von Objekten
BeitragVerfasst: Do Jan 07, 2010 11:29 
Offline
DGL Member

Registriert: Fr Jan 16, 2009 13:36
Beiträge: 75
Hallo an alle Helfenden,

also ich habe ein blödes Roationsproblem. Ich möchte gerne zwei Zylinder drehen, dass dieser wie ein ring um eine Kugel gelegt wird. Zu diesem Zylinder möchte ich einen zweiten senkrecht zu dem ersten um die Kugel legen, so dass diese beiden Zylinder sich an zwei Punkten Kreuzen. Dies habe ich auch schon in GLScene hinbekommen, indem ich den einzelnen Zylindern meine Rotationsmatrix übergeben habe. Das hat super geklappt. Jetzt möchte ich jedoch weg von GLScene und das ganze in OpenGL implementieren. Jedoch hakt es momentan an einer Sache, nämlich der MatrixMultiplikation. Ich habe hier für glMultMatrixf verwendet. Jedoch bekomme ich bei exakt denselben Rotationmatrizen komplett andere Ergebnisse. Habe ich irgendetwas bei der Matrixmultiplikation falsch gemacht? Mein Source Code sieht wie folgt aus:

Code:
  1.  
  2. glScalef(3,3,3);
  3.    glObj2 := gluNewQuadric;
  4.    gluQuadricDrawStyle(glObj2 ,GLU_FILL);
  5.    glColor4f(0.5,0.5,0.5,0.5);
  6.    gluSphere(glObj2,1,64,64);
  7.  
  8.  
  9.    for i:=0 to 1 do
  10.    begin
  11.  
  12.       //glTranslatef(0,0,0);
  13.       glPushMatrix;
  14.       glObj := gluNewQuadric;
  15.       glColor4f(1,0,0,0.1);
  16.       glMultMatrixf(@FCylinderMatrix[i]);
  17.       gluCylinder(glObj,1,1,height,32,32);
  18.       glPopMatrix;
  19.    end;
  20.  


Ich bin für jeglichen Tip sehr dankbar,

Heavenssake007


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Matrixrotation von Objekten
BeitragVerfasst: Do Jan 07, 2010 11:44 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Wie sieht den deine Matrix aus? Je nach dem wie die du die Matrix erstellt hast musst du sie möglicherweise transponieren.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Matrixrotation von Objekten
BeitragVerfasst: Do Jan 07, 2010 12:36 
Offline
DGL Member

Registriert: Fr Jan 16, 2009 13:36
Beiträge: 75
Wow die Antwort war echt fix.

Also, die eine Matrix sieht so aus: (0,1,0,0;-1,0,0,0;0,0,1,0;0,0,0,1);
und die andere so: (1,0,0,0;0,0,-1,0;0,1,0,1);

Das mit dem transponieren hab ich ausprobiert. Ändert jedoch nichts an dem Problem. :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Matrixrotation von Objekten
BeitragVerfasst: Do Jan 07, 2010 14:00 
Offline
DGL Member
Benutzeravatar

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

wenn ich das richtig verstanden habwillst du sowas ähnliches wie Coolcats User-Bild, oder?
Warummachst du das nich einfach mit glRotatef un rechnest dann die Winkel hoch um weiter zu drehen? Ich denk ma das is einfacher als die Matrix. Kann aber auch sein das ich das nur so empfinde, weil ich Matricenrechnung nich mag :P

MfG Bergmann

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Matrixrotation von Objekten
BeitragVerfasst: Do Jan 07, 2010 14:20 
Offline
DGL Member

Registriert: Fr Jan 16, 2009 13:36
Beiträge: 75
Also ich habe abgesehen von diesen senkrechten Zylindern noch ein paar weitere, die jedoch symmetrisch zueinander liegen. Diese übergebe ich wie gesagt in GLScene als Matrix und dachte dies könnte ich hier auch tun. Ich bin auch nicht unbedingt der Fan der Matrizenrechnung, denke jedoch, dass dies über kurz oder lang mehr Möglichkeiten einräumt als nur über glRotatef zu gehen. Wie komme ich denn von meiner Rotationsmatrix auf die Parameter von GLRotatef? Die senkrechten Zylinder funktionieren. Diese habe ich über diese Matrixmultiplikation erhalten. Jedoch diese symmetrischen Ringe nicht. Habe ich vielleicht irgendetwas ausser acht gelassen? Muss ich irgendeine Matrix nochmal zurücksetzen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Matrixrotation von Objekten
BeitragVerfasst: Do Jan 07, 2010 16:42 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Das mit dem transponieren hab ich ausprobiert. Ändert jedoch nichts an dem Problem. :(

War auch nur ein Schuss ins blaue, beliebter Fehler wenn man mit eigenen Matrix-Daten arbeitet. Bei einer puren Rotationsmatrix ändert das auch nur die Drehrichtung...bei komplizierteren Matrizen ist das aber wichtig.

Zitat:
Wie komme ich denn von meiner Rotationsmatrix auf die Parameter von GLRotatef?

Machbar, aber keine gute Idee....GLRotatef würde ja dann wieder die gleiche Matrix produzieren.

Zitat:
Also, die eine Matrix sieht so aus: (0,1,0,0;-1,0,0,0;0,0,1,0;0,0,0,1);
und die andere so: (1,0,0,0;0,0,-1,0;0,1,0,1);

Ich nehme an die Zahlen stehen in dieser Reihenfolge im Speicher? Die erste ist ok, bei der zweiten Matrix fehlt aber was? In jedem Fall darf die Matrix keinen Translationsanteil geben, sonst würde es Probleme mit dem glScalef(3,3,3); geben. Ansonsten sehe ich nicht was da schief gehen könnte.

Zitat:
Muss ich irgendeine Matrix nochmal zurücksetzen?

Liegt daran was du sonst noch so machst.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Matrixrotation von Objekten
BeitragVerfasst: Di Jan 12, 2010 12:01 
Offline
DGL Member

Registriert: Fr Jan 16, 2009 13:36
Beiträge: 75
So, habe das Problem gelöst. Es lag nicht notgedrungen bei OpenGL. Ich hatte bei der Berechnung meiner Matrix einen Fehler gemacht. Einige Zylinder mit eigentlich unterschiedlichem Winkel zueinander, lagen aufeinander, da ich die falsche Drehachse verwendet habe. Ich hatte z verwendet obwohl es y war. In GLScene scheint diese Umwandlung automatisch zu erfolgen, in OpenGL muss ich da selber Hand anlegen. Vielen Dank für die Hilfe


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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.007s | 15 Queries | GZIP : On ]