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

Aktuelle Zeit: Fr Jul 18, 2025 05:04

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



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: WorldPosition eines Punktes?
BeitragVerfasst: Sa Mai 07, 2005 18:53 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

mal wieder (wie so oft in letzter Zeit) ein mathe problem... aww.. ich sollte vektorrechnung lernen *seufzt*

Also... ich transformiere meine ModelMatrix fleißig via glTranslate, glRotate etc... am ende zeichne ich einfach einen punkt (glVertex3f(0, 0, 0);)..

wie bekomme ich da jetzt die WorldKoordinaten raus..?? Also die koordinaten an die ich den punkt zeichnen müßte wenn ich nicht die glTranslate/glRotate sachen mache, damit er trotzdem an der selben stelle ist...

ich dachte es würde reichen wenn ich die Koordinate von meinem punkt mit der aktuellen ModelMatrix multipliziere... aber irgendwas stimmt da noch nicht...

*schaut hoffnungsvoll und hilfesuchend*

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 07, 2005 21:41 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
ja das stimmt nicht, denn das was du da herausbekommst, ist genau in die verkehrte richtung geschoben und gedreht. du musst das mit der inversen Matrix der Modelviewmatrix machen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 08, 2005 16:53 
Offline
DGL Member

Registriert: Sa Jan 22, 2005 21:10
Beiträge: 225
Ehm, was genau willst du?

World-Space nach Eye-space oder Eye-Space nach World-Space?

Wenn du einen Punkt in Bezug auf die Kamera hast, und ihn im WorldSpace haben willst, dann wie schon gesagt mit der Inversen.
Wenn du aber das nachahmen willst, was OGL macht, also
Zitat:
die koordinaten an die ich den punkt zeichnen müßte wenn ich nicht die glTranslate/glRotate sachen mache,

berechnen willst, dann musst du es mit der normalen Modelview-Matrix machen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 08, 2005 17:22 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

danke :)

Das mit der invertierten Matrix dürfte das sein was ich brauch :)

Jetzt hab ich nurnoch ein problem... wie invertiere ich eine matrix??? *g*
Ich hab grad ein wenig gegoogelt, aber irgendwie nix wirkliches gefunden...

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 08, 2005 18:13 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Sehr mathematische Erklärung:
http://de.wikipedia.org/wiki/Matrix_(Mathematik)#Die_inverse_Matrix
Also in meinen Shadern setz ich einfach ein Minus vor den Vektor...

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 08, 2005 21:39 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
La_Boda, so einfach ist es leider nicht - ein Minus genügt nur gelegentlich ;-)
Es gibt eine Determinantenformel zum Invertieren einer Matrix - die funktioniert immer - einfach danach suchen und ide entsprechenden Determinanten errechnen. Für reine 3x3 Drehmatrizen geht es aber auch einfacher: Es genügt die Matrix zu transponieren, also Spalten zu Zeilen zu machen. Wenn du also eine reine Drehmatrix hast, genügt das bereits. Und wenn du deine Modelviewmatrix genau anschaust, dann hast du diese 3x3 Drehmatrix im linken oberen Eck - dann musst du dir noch gedanken zum Vershciebungsvektor in der rechten Spalte machen. (da genügt dann ein Minus ;-)). Aber achtung: Streckungen und andere Spässe darfst du nicht machen, sonst funktioniert dieser Trick nicht!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 12, 2005 14:05 
Offline
DGL Member

Registriert: Mi Aug 28, 2002 17:03
Beiträge: 37
Wohnort: ABG
Hi!
OpenGL speichert die Matrix nicht Zeilenvektor für Zeilenvektor sondern Spaltenvektor für Spaltenvektor ab. Liegt event daran, das bei dir falsche Ergebnise heraus kommen. OpenGL (version 2.0 glaube ich aber erst) hat Befehle zum laden transponierter Matrizen. (Transponiert heißt praktisch hier, das Zeilen- Spaltenvektoren ausgetauscht werden)

Wenn ich ein Punkt 0, 0, 0 mit glTranslate(3, 4, 5) verschiebe, kommt da der neue Punkt im Worldspace mit 3, 4, 5 heraus. Warum wollt ihr da die inverse Matrix mit -3, -4, -5?
mfg olli

_________________
Programmieren beginnt im Kopf und endet im Compiler


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 12, 2005 16:00 
Offline
DGL Member

Registriert: Sa Jan 22, 2005 21:10
Beiträge: 225
Ich weiß ja nicht, was genau du damit machen willst, aber wenn dir das alles zu viel Aufwand ist, dann gibts auch immer noch das gute alte gluUnproject.

_________________
[18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay

hi, i'm a signature viruz, plz set me as your signature and help me spread :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 12, 2005 16:38 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
gluUnproject? Liefert das denn nicht einen 3D-Punkt zurück bei Übergabe eines 2D-Punktes? Was Aya will, ist die Koordinaten eines Punktes, der mithilfe von glTranslate und glRotate bewegt wurde. Und zwar in einer Form, die es ermöglicht, den Punkt an der exakt selben Stelle anzuzeigen, bloß ohne glTranslatef usw. zu verwenden. Jedenfalls schließe ich das aus der Beschreibung.

Ich denke mal, mit der invertierten Matrix dürfte Aya richtig bedient sein. Klingt jedenfalls so, als ob es das Richtige wäre ;)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 12, 2005 18:07 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Da müßte doch eigentlich ganz normal mit der ModelView Matrix multipliziert werden. Die enthält ja dann die Transformationen die man vorher mit glRotate/glTranslate/glScale angewandt hat. Die OpenGL Matrix wird spaltenweise gespeichert. Vielleicht hast du ja das falsch gemacht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 12, 2005 22:01 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

umh sorry, vergessen zu posten das ich es geschafft habe *g* Das mit der Invertierten matrix war das was ich brauchte.

Um nochmal zu erklären was ich vorhatte, bzw gemacht habe... ich habe in meiner engine die objekte bisher einfach via glTranslate, glRotate etc an die stelle gepackt wo sie sein sollten... jedes objekt hatte nne festen translate wert etc.. also die position im raum war klar definiert in einer VertexVariable...

nun hab ich in meiner Engine eingebaut das Objekte auch geparented sein können, sprich sich nichtmehr im WorldSpace bewegen, sondern im ObjectSpace... da ich jetzt keine eindeutige positionierung des objektes im WorldSpace hatte.. aber für das FrustumCulling brauche ich die WorldPosition, da ich das Frustum nicht jedesmal neu berechnen möchte... :)

Im endeffekt hab ich jetzt einfach alle glTranslate's etc rausgeschmissen und durch eigene Matritzen ersetzt... dadurch kann ich anhand der Matritze jedes Objektes einfach sehen wo es sich genau befindet :)

Au'revoir,
Aya


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


Wer ist online?

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