Screen Koordinaten in Weltcoordinaten

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Matthias Gubisch
Establishment
Beiträge: 472
Registriert: 01.03.2009, 19:09

Screen Koordinaten in Weltcoordinaten

Beitrag von Matthias Gubisch »

So und gleich das nächste Problem hier.

Ich überlege gerade wie ich Screenkoordinaten in Weltkoordinaten umwandeln könnte ohne die View Matrix oder deren Inverse zu haben.
Was ich weis ist der UpVector, die Kamera Position, und der LookAt-Punkt.
Ausserdem kenne ich noch die Fenstergröße und den Öffnungswinkel der Kamera.

Da ich leider an die Matritzen nicht so einfach rankomme, bin ich schon die ganze Zeit am überlegen ob es noch einen andere Methode gibt ausser den Weg über die Inverse der ViewProjection Matrix, aus meinen Pixelcoordinaten Weltkoordinaten zu bekommen.
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: Screen Koordinaten in Weltcoordinaten

Beitrag von Artificial Mind »

Die View-Matrix kannst du eindeutig aus Up, Position und LookAt berechnen, die Projection-Matrix aus Fenstergröße + FOV (Öffnungswinkel), wo ist denn das Problem, an die Matrizen zu kommen?

Du kannst natürlich das, was die Matrizen tun, auch "per Hand" berechnen, eine Matrix-Inverse brauchst du da glaube ich nicht.
Matthias Gubisch
Establishment
Beiträge: 472
Registriert: 01.03.2009, 19:09

Re: Screen Koordinaten in Weltcoordinaten

Beitrag von Matthias Gubisch »

Wie ich die berechnen kann ist mir bekannt, ich frag mich nur ob ich das wirklich muss, oder ab die ganze Sache einfacher geht wenn man die Matritzen nicht bereits hat.
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: Screen Koordinaten in Weltcoordinaten

Beitrag von Artificial Mind »

Wenn du weißt, wie du die Matrizen berechnest, dann mach doch einfach mal die Matrixmultiplikation mit Zettel und Stift und lass halt alle Variablen drin ;)
Die geschlossene Form, die du danach bekommst, ist schon ziemlich optimal dann.
Matthias Gubisch
Establishment
Beiträge: 472
Registriert: 01.03.2009, 19:09

Re: Screen Koordinaten in Weltcoordinaten

Beitrag von Matthias Gubisch »

Args da hätt ich auch selbst draufkommen können.
Danke...
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Benutzeravatar
Jonathan
Establishment
Beiträge: 2395
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Screen Koordinaten in Weltcoordinaten

Beitrag von Jonathan »

Also so wie ich das sehe, müsstest du die beiden Matrizen jeweils mit einem Funktionsaufruf erstellen können und hast deine gesamte Rechnung dann in ungefähr 3-4 Zeilen fertig.
Wenn du alles von Hand machen willst, hast du hinter her eine komplizierte Formel da stehen, bei der man sich leicht vertippen kann und die später kein Mensch mehr nachvollziehen kann. Sicher, sie wäre wohl minimal schneller, aber wenn du diese Rechnung nicht zig tausend mal pro Frame machst, dürfte der Unterschied kaum messbar sein, und dann wäre ich wirklich für die einfache und robuste Lösung.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Screen Koordinaten in Weltcoordinaten

Beitrag von Krishty »

Das geht natürlich alles davon aus, dass man auch tatsächlich Matrizen nutzt, um die Geometrie zu transformieren. Benutzt man andere Systeme (z.B. Integer-Versatz und Quaternion-Rotation für Fälle wie riesige Welten ohne Gleitkommaprobleme), kann man das auch nicht einfach in zwei Matrizen umwandeln und die invertieren. Es kann also durchaus sinnvoll sein, eine händische Invertierung durchzuführen.

Was noch keiner gesagt hat: Du kannst Bildschirmkoordinaten nicht in Weltkoordinaten umwandeln, weil dir die Tiefenkoordinate fehlt. Wenn du die Tiefenkoordinate hast, fehlen dir immernoch Entfernung der Near und Far Clipping Planes; es sei denn, du verwendest unendliche Tiefenpufferung. Ohne Tiefenkoordinate bekommst du höchstens einen Richtungsvektor, den du für eine Strahl-Welt-Kollisionsprüfung nutzen kannst.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Matthias Gubisch
Establishment
Beiträge: 472
Registriert: 01.03.2009, 19:09

Re: Screen Koordinaten in Weltcoordinaten

Beitrag von Matthias Gubisch »

So wie ich euch verstehe ist es die Version über die Matritzen tatsächlich die einfachste Möglichkeit.
So funktioniert es jezt auch, wollt nur sichergehen dass es nicht eine simplere Möglichkeit gibt :)

@Krishty: Dass mir hier die Tiefenkoordinate fehlt ist durchaus bekannt, aber mit dem Richtungsvektor kann ich ja dann wieder weitermachen :)
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Antworten