Ich mache eine hinter den Kulissen 3D-Simulation beim Rendern der Welt in meiner 2D-isometrischen Engine. Ich habe noch nie eine isometrische Engine gemacht, und meine Matrix Mathe ist im Allgemeinen rostig, also habe ich Probleme.Unprojected ein on-Screen-Punkt zurück zu einer isometrisch projizierten Welt
Ich habe eine Projektions-Matrix, die in ihrer einfachsten Form ist dies:
0.7 0.35 0
0 -0.87 0
-0.71 0.35 1
Ein paar Zeichen umgedreht werden, weil meine Motoren Koordinatensystem ist 0,0 in der oberen linken, mit + X auf die rechts/Osten und + Z nach Süden.
nun die Umkehrung davon ist:
1.4080 0.5670 0.0000
0.0000 -1.1490 0.0000
1.0000 0.8050 1.0000
nun diese Matrizen meist Arbeit.
Zum Beispiel
WC: 500,0,500 = Screen: -1.44, 350, 500 (X und Y korrekt ist)
WC: 0,0,500 = Screen: -355, 175, 500 (X und Y ist korrekt wieder)
Aber jetzt, wenn Sie in die andere Richtung gehen müssen, Sie nicht mehr über den praktischen Z-Wert, so
Screen: -1,44, 350, 0 = WC: -2, -402,97, 0 (. Also, Müll)
Und vieles mehr - sobald ich den Z-Wert nicht mehr haben, Ich kann die Weltkoordinaten nicht von den Bildschirmkoordinaten abrufen.
Was ist die Problemumgehung hier?
EDIT
Ich möchte darauf hinweisen, dass der Punkt der unproject ist ein Strahl für Maus picking zu bekommen ..
Es scheint, wie es ist nur meine falschen Eindruck von dem, was ich war, das zu tun war Einschrauben ich hier oben.
Irgendwelche Hinweise darauf, wie Sie bis hierher gekommen sind, wäre er sehr hilfreich! Ich versuche, etwas Ähnliches herauszufinden - eine 3D-Simulation hinter dem Vorhang, während 2D gerendert wird. –
Ich konnte es herausfinden - Innerhalb von XNA können Sie diese Matrizen einfach mit Matrix.CreateOrthographic usw. Funktionen erstellen. –