Robię zasłonę za symulacją 3d podczas renderowania świata w moim izometrycznym silniku 2d. Nigdy wcześniej nie robiłem silnika izometrycznego, a moja macierzowa matematyka jest ogólnie zardzewiała, więc mam problemy.Unprojecting na ekranie wskazuje na izometrycznie rzutowany świat
mam macierz projekcji, która w swej najprostszej postaci jest to:
0.7 0.35 0
0 -0.87 0
-0.71 0.35 1
Kilka znaków są odwrócone, ponieważ moje silniki układu współrzędnych 0,0 w lewym górnym rogu, a + x do prawo/wschód i + Z na południu.
Teraz odwrotność czyli:
1.4080 0.5670 0.0000
0.0000 -1.1490 0.0000
1.0000 0.8050 1.0000
Teraz te macierze głównie praca.
Przykładowo
WC: 500,0,500 = ekranu: -1,44, 350, 500 (X i Y są poprawne)
WC: 0,0,500 = ekranu: -355, 175, 500 (X i Y znów są poprawne)
Ale teraz, jeśli chcesz przejść w drugą stronę, nie masz już tej przydatnej wartości Z, więc
ekranu: -1,44, 350, 0 = WC: -2, -402,97, 0 (. Więc, śmieci)
i wiele więcej - tak szybko, jak ja nie mają już tej wartości oo Nie mogę odzyskać światowych współrzędnych z ekranów.
Co to jest obejście?
EDIT
muszę podkreślić, że punktem unproject jest uzyskanie ray do podnoszenia myszki ..
Wydaje się, że to tylko moje błędne przekonanie o tym, co robiłem, który został wkręcania mnie tutaj.
Wszelkie wzmianki o tym, jak się tu dostałeś, byłyby bardzo pomocne! Próbuję wymyślić coś podobnego - symulację 3D za kurtyną podczas renderowania 2D. –
Udało mi się to rozgryźć - wewnątrz XNA można łatwo tworzyć te macierze za pomocą funkcji Matrix.CreateOrthographic, itp. –