Question

Je suis en train de faire un derrière les rideaux de simulation 3D tout en rendant le monde dans mon moteur 2d isométrique. Je ne l'ai jamais fait un moteur isométrique avant, et mes calculs de matrice est rouillée en général si je rencontre des problèmes.

I ai une matrice de projection, qui, dans sa forme la plus simple est la suivante:

 0.7       0.35     0
 0        -0.87     0
-0.71      0.35     1

Quelques signes sont parce que mes moteurs feuilleta système de coordonnées est 0,0 dans la partie supérieure gauche, avec + X à droite / est et + Z au sud.

Maintenant, l'inverse de c'est:

1.4080  0.5670   0.0000
0.0000 -1.1490   0.0000
1.0000  0.8050   1.0000

Maintenant, ces matrices la plupart du temps travail.

Par exemple

WC: 500,0,500 = écran: -1,44, 350, 500 (X et Y sont correctes)

WC: 0,0,500 = écran: -355, 175, 500 (X et Y sont corrects à nouveau)

Mais, maintenant, si vous avez besoin d'aller dans l'autre sens, vous ne disposez plus que la valeur de Z à portée de main, donc

écran: -1,44, 350, 0 = WC: -2, -402,97, 0 (. Ainsi, les ordures)

et bien plus encore -. Dès que je n'ai plus que la valeur de Z, je ne peux pas récupérer le monde coords des coords écran

Quelle est la solution ici?

EDIT

Je tiens à souligner que le point de la unproject est d'obtenir un rayon pour la cueillette de la souris ..

Il semble que c'est juste ma perception erronée de ce que je faisais qui me vissant ici.

Était-ce utile?

La solution

Comme vous le découvriez, votre conversion dans l'espace 3D nécessite une sorte de coordonnée Z à aucun sens du tout.

Je vous suggère de faire la transformation inverse deux fois . Une fois avec une coordonnée Z près de l'écran (le plus proche de l'observateur), et une fois avec une coordonnée Z à l'arrière de votre scène 3D. Ces deux points 3D vous donnerait une ligne 3D, qui occuperait toutes les positions « derrière » ce point 2D.

Autres conseils

vous ne pouvez pas. vous projetez sur l'écran qui perd des informations.

Si vous y pensez, plusieurs coordonnées 3D se projeter sur le même point sur l'écran, et tout en sachant que coordonnées d'écran ne suffit pas pour récupérer les coordonnées d'origine.

[modifier] regardant vos coordonnées d'écran, vous leur donnez tous les z-valeur 0. qui signifie que les dernières colonnes de votre matrice de projection doit avoir tous les zéros, ce qui rend cette matrice non inversible.

Chaque pixel sur l'écran représente une ligne de l'œil du spectateur dans le monde imaginaire 3D derrière l'écran. Vous devez recouper cette ligne avec tous les objets qui peuvent se cacher dans ce monde afin d'obtenir les coordonnées 3D.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top