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

Aktuelle Zeit: Sa Jul 19, 2025 21:41

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Aug 26, 2005 10:29 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 03, 2003 18:38
Beiträge: 33
Hallo Freunde,

hab ein komplexes Problem und wollte die Profis um Rat fragen.

Also ich habe einen Vektor v(x,y,z,w), dieser liegt in Objektkoordinaten vor und soll in Weltkoordinaten überführt werden.
Dazu lade ich zunächst die Einheits ModelView Matrix mit:
Code:
  1.  
  2.     glMatrixMode(GL_MODELVIEW);
  3.     glLoadIdentity();
  4.  

Die Matrix ist nun die Einheitsmatrix (Hauptdiagonale mit einsen gefüllt).

Anschließend führe ich meine Transformationen auf der Modelview Matrix aus:

Code:
  1.  
  2.     glTranslatef(GetTranslation()->x(), GetTranslation()->y(), GetTranslation()->z());
  3.     glScalef(GetScale()->x(), GetScale()->y(), GetScale()->z());
  4.     glRotatef(GetValueRotation(), GetRotation()->x(), GetRotation()->y(), GetRotation()->z());
  5.  


Die so entstandene Matrix pack ich dann in ein Feld mit 16 Elementen, da die ModelViewMatrix das Format 4x4 hat.
Code:
  1.  
  2.       GLfloat M[16];
  3.       glGetFloatv(GL_MODELVIEW_MATRIX, M);
  4.  


Laut Red Book würde sich der Vektor v in Weltkoordinaten (v_world) aus MVM* v ergeben.
v_world= M[16] *v

in Code augedrückt also so:
Code:
  1.  
  2.         //x_Komponente berechnen
  3.     v_world[0]= M [0]*v[0] + M [1]*v[1] + M [2]*v[2] + M [3]*v[3];
  4.     //y_Komponente berechnen
  5.         v_world[1]= M [4]*v[0] + M [5]*v[1] + M [6]*v[2] + M [7]*v[3];
  6.     //z_Komponente berechnen
  7.         v_world[2]= M [8]*v[0] + M [9]*v[1] + M[10]*v[2] + M[11]*v[3];
  8.      //w_Komponente berechnen
  9.         v_world[3]= M[12]*v[0] + M[13]*v[1] + M[14]*v[2] + M[15]*v[3];    
  10.  


Das ist der Plan und seine Umsetzung. Leider funktioniert der Plan nich so wie ich mir das vorstelle.
Hat jemand im OGL Olymp eine Ahnung wie ich die Nuss knacken könnte. Denn eigentlich ist das ja ein grundlegendes Problem.
MFG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 26, 2005 11:46 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hehe...nicht ganz...

Durch deine Transformationen hast du (wenn ich das richtig gesehen habe) den Koordinaten ursprung an die stelle geschoben, wo der Vektor hin soll. Jetzt nimmst du dieses Koordinatensystem und zeichnest diesbezüglich deinen Vektor...das ist natürlich dann nicht richtig, weil du ihn quasi "doppelt" verschiebst.

Du musst nach den ganzen Tranformationen den Vektor einfach an der Stelle (0,0,0) zeichnen. Dann sollte er an der von dir gewünschten Position sein. (Hoffe ich 8) )

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 26, 2005 13:56 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
der punkt dürfte sein, dass du in dem code davon ausgehst, dass die Matrix Zeilenweise abgespeichert ist, ogl Matrizen aber spaltenweise abgespeichert sind. demnach müsste das eher so aussehen:

Code:
  1. v_world[0]= M [0]*v[0] + M [4]*v[1] + M [8]*v[2] + M [12]*v[3];
  2.  


@Flash: wieso soll er den vektor um ihn von objecktspace nach worldspace zu transformieren an die position 0 0 0 zeichnen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: mmmmmmhhhhh
BeitragVerfasst: Fr Aug 26, 2005 19:35 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 03, 2003 18:38
Beiträge: 33
Hey dudes...

@ Flash danke für den Hinweis aber ich benötige den Vektor nicht zum zeichnen, sondern für eine Berechnung.
ich will mit einer Bereichssuche die Verbindungen zwischen Objekten ermitteln, falls eine Verbindung besteht.
Dazu benötige ich den Vektor in Weltkoordinaten. Also keine Angst ich bin mir über das Prinzip der Postmultiplikation von Matrizen und der Statusmaschine OGL im klaren.

@ Grizzly, also einen Teilerfolg konnte ich mit deinem Hinweis schon erzielen. Denn deiner Aussage nach habe ich meine Matrix einfach transponiert (Zeilen und Spalten getauscht). Nun die Translation funktioniert exakt. Skalierung auch in Ordnung, nur leider funzt die Rotation nich.

Hatte noch niemand hier ein ähnliches Problem.? Falls doch, bitte gebt mir das Wissen welches den Knoten in meinem Hirn entfernt . Das drückt so....... :roll:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 26, 2005 19:42 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Suchst du vielleicht das?
http://wiki.delphigl.com/index.php/GluProject

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 26, 2005 19:50 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
Das einzige was mir dazu einfällt wär, dass die rotationsachse bei glrotatef nicht so ist, wie sie seien sollte, wenn es erstmal in der Matrize steht, kann sich das ja wohl kaum noch anders verhalten


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: THX
BeitragVerfasst: Mo Aug 29, 2005 11:02 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 03, 2003 18:38
Beiträge: 33
Moin Leute,

die Sache funktioniert so wie das hier besprochen wurde. Sehr geil, der Fehler lag bei meiner Bereichssuche.
Diese muss den minimal Vektor und den maximal Vektor des gesuchten Bereichs übergeben bekommen.
Wenn man allerdings die Transformierten Vektoren nicht nach min und max sortiert kann das auch nich funzen.
Jedenfalls ermittelt die oben beschriebene Methode die exakten Weltkoordinaten der Vektoren. (Habs auf Millimeterpapier geprüft); :wink: :wink:

Der OGL Olymp war mal wieder Allwissend. Tausend Dank an alle Poster.


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 » OpenGL


Wer ist online?

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