3D-Matrix Berechnngsproblem
-
Danke fürs Anklicken
Ich hab ein rein Theoretisches Problem und es gibt mit Sicherheit wieder so eine einfache Lösung nur ich komm einfach nicht drauf.
Ich will wissen wie ich aus einer Kamera Matrix (Richtungsvektoren und Positionsvektor) die Position bestimmen kann die X Meter entfernt in der Richtung der Kamera liegt.
Hoffe das mir da jemand evtl. helfen kann.
-
Kannst du deine Frage nochmal in verständlichem Deutsch formulieren?
Du willst aus einer Matrix eine Position bestimmen?? Eine Matrix hat nichts mit Positionen oder sowas zu tun.(Nebenbei: Ist das eigentlich cooler, wenn man Denglisch a la Richtungsvectoren und Objects anstatt einfach Richtungsvektoren und Objekte schreibt?
)
-
OK im beschreiben bin ich nicht so der Held ist mir schon klar.
Habe im 1. Post mal die Rechtschreibfehler behobenAlso die Matrix die ich habe ist eine Kamera Matrix und die zeigt ja mit ihren 3 Richtungen ja auch irgendwo hin ausgehend von der Position.
Wie berechne ich nun die Position die sagen wir mal 100m weit entfernt der Kamera Richtung ist.
Also im Prinzip aus den 3 Richtungen der Matrix 1 Richtungsvektor umrechnen.Ich kann es leider nicht besser erklären sorry
-
Die Kamera hat 3 Vectoren, einen den Nach-Oben Vector, die Position und den Punkt auf den sie schaut. Aus Position und Blickpunkt kannst du ansich schon eine Richtung ablesen und errechnen. Wenn du einen Punkt haben willst der dahinter liegt hilft interpolieren, dabei musst du aber auch die umrechnung beachten, das Koordinatensystem kennt keine Meter, nur Einheiten.
Nehmen wir mal an 1 Einheit=1 Meter, du hast eine Kamera die auf (0,0,0) sitzt und auf (0,0,10) schaut. nun willst du den Punkt der 100m vond er Kamera entfernt, also 90m hinter dem Punkt auf dem sie schaut liegt. Da gilt folgende Formel: (B-A)*C+A. B ist der Punkt auf den die Kamera schaut, A ist die Kameraposition und C ist ein floatwert. Hier ist aber die verrechnung wichtig. Ist der wert 0 ist das Ergebniss A, ist der Wert 1 ist das Ergebniss B, bei größer 1 liegt er hinter B, bei kleiner 0 vor A. In meinem Beispiel würdest du für C 10.0f einsetzen, somit würdest du dann (0,0,100) herausbekommen. Aber wie gesagt beachte die Verrechnung für C, nutze also ggf für den Blickpunkt einen Wert der sich gut verrechnen lässt (zB Position+Normalisierter Richtungsvector aus Position und Blickpunkt).
-
Es gibt 2 Möglichkeiten:
1. Du hast die Vektoren, die das Kamerasystem bilden (z.B. Eye, At, Up): dann kannst du mit simpler Vektoralgebra all deine gesuchten Infos errechnen.
2. Du hast ausschließlich eine fertige Viewmatrix V. V^-1 transformiert (0,0,0) im Viewkoordinatensystem auf Eye und einen Vektor (0,0,z) auf einen Vektor entlang der Achse Eye -> At. Folglich sollte z.B. das hier einen Punkt in Weltkoordinaten ergeben, der 10 Einheiten von der Kamera in Richtung Blickrichtung liegt: (0,0,0)*V^-1 + (0,0,10)*V^-1
-
Habe im 1. Post mal die Rechtschreibfehler behoben
Ich sehe immernoch welche
. (Die beiden Poster über mir haben dir mehr geholfen als du dich mit deinen Fragen agestrengt hast, also poste ich jetzt keine Antwort)
-
Scheint irgendwie höhere Mathematik zu sein oder es will einfach nicht in mein Schädel rein evtl sogar beides!
So hier mal eine gefüllte Matrix wie ich sie habe
_11 = -0.9871 _12 = 0.0000 _13 = 0.1603 _14 = 0.0000 <-ändert sich bei links/rechts
_21 = 0.0430 _22 = 0.9633 _23 = 0.2651 _24 = 0.0000 <-ändert sich bei hoch/runter
_31 = -0.1544 _32 = 0.2686 _33 = -0.9508 _34 = 0.0000 <-ändert sich bei jeder mausbewegung
_41 = -43.5276 _42 = 43.8300 _43 = -14.2545 _44 = 1.0000 <- Das ist die PositionIch kann aufgrund meiner geringen Erfahrung mit dem 3D-Kram nicht bestimmen um was für eine Kamera Matrix es sich hier handelt.
für mich sehen diese 3 Zeilen aber aus wie Bogenzahlen die irgendeinen winkel bestimmen.wenn jemand hier einen Link parat hätte der diese Sache ausführlich erklärt könnte ich evtl diese Frage ja für mich selbst beantworten. Die Matrix Erklärungen die ich bis jetzt gefunden habe waren aber nur für Objekte und die für die Kamera scheinen bei mir nicht anwendbar zu sein oder ich bin einfach nur zu blöd dafür
Trotzdem Danke für die Antworten die bereits gepostet wurden auch wenn ich damit nichts anfangen kann
-
Tetsuo schrieb:
Scheint irgendwie höhere Mathematik zu sein oder es will einfach nicht in mein Schädel rein evtl sogar beides!
meinEN Schädel. Sorry, ich kann diesen Fehler echt nicht mehr sehen!
Tetsuo schrieb:
Ich kann aufgrund meiner geringen Erfahrung mit dem 3D-Kram nicht bestimmen um was für eine Kamera Matrix es sich hier handelt.
Eine Kameramatrix ist eine stink normale Matrix, die, wie eben jede Matrix, eine lineare Abbildung repräsentiert.
Tetsuo schrieb:
für mich sehen diese 3 Zeilen aber aus wie Bogenzahlen die irgendeinen winkel bestimmen.
Was sollen Bogenzahlen sein?
Generell kann die Viewmatrix verschieden aussehen. Das hängt von mehreren Dingen ab (wie du genau dein Kamerasystem aufgebaut hast, ob LH oder RH etc.). Am allgemeinsten kann man wohl sagen: Die Viewmatrix ist eine Komposition aus Translation T (die das Kamerakoordinatensystem in den Ursprung verschiebt) und Basiswechsel B (vom Welt- ins Kamerakoordinatensystem). Sehr schön sieht man das z.B. bei der LH-Viewmatrix in DirectX:
http://msdn.microsoft.com/en-us/library/bb205342(VS.85).aspx
In der letzten Zeile steht immer das negative Skalarprodukt aus Eye mit den 3 Achsen. Ist auch klar, weil T die Einheitsmatrix ist, wobei in der letzten Zeile die Translation steht, sprich (-EyeX, -EyeY, -EyeZ, 1). T wird ja multipliziert mit B, wobei in den Spalten von der Orthonormalmatrix B die Achsen des Kamerakoordinatensystems stehen. Beim Multiplizieren von T mit B bildest du also im Grunde 3mal das Skalarprodukt (Zeile der Translation von T) mit den Spalten (=Kameraachsen) von B: dot(-Eye, Axis) = -dot(Eye,Axis).Tetsuo schrieb:
Die Matrix Erklärungen die ich bis jetzt gefunden habe waren aber nur für Objekte und die für die Kamera scheinen bei mir nicht anwendbar zu sein oder ich bin einfach nur zu blöd dafür
Du hast offenbar noch grobe Verständnisprobleme mit Matrizen und linearen Abbildungen. Eigne dir da erstmal die Grundlagen an, bevor du versuchst irgendwelche Positionen relativ zur Kamera ausrechnen zu wollen.
Tetsuo schrieb:
Trotzdem Danke für die Antworten die bereits gepostet wurden auch wenn ich damit nichts anfangen kann
Wie gesagt, wenn du damit nichts anfangen kannst => Lineare Algebra Grundlagen aneignen.