Mateusz Nejman Opublikowano 19 Września 2015 Udostępnij Opublikowano 19 Września 2015 Witajcie wszyscy! Mam problem z którym nie mogę sobie poradzić od kilku dni. Rysuję sobie mapę takim kodem: Rectangle destinationRectangle = new Rectangle(0, 0, 128, 64); for (int y = 0; y < map.MapDimensions.Y; y++) { for (int x = 0; x < map.MapDimensions.X; x++) { int poprawkaX = x * v1 - y * v2 + TileOffset; int poprawkaY = x * v3 + y * v4; destinationRectangle.X = (int)mapOriginPosition.X + poprawkaX; destinationRectangle.Y = (int)mapOriginPosition.Y + poprawkaY; if (CheckVisibility(destinationRectangle)) { Point mapPosition = new Point(x, y); if (drawBase) { Rectangle sourceRectangle = new Rectangle(64*(map.BaseLayerMulti[x,y]-(int)(Math.Floor((double)(map.BaseLayerMulti[x,y]/10))*10)),(64* (int)(Math.Floor((double)(map.BaseLayerMulti[x, y] / 10)))) +32,64,32); spriteBatch.Draw(map.Texture, destinationRectangle, sourceRectangle, Color.White); } } } } I problem mam z przekonwertowaniem współrzędnych(destinationRectangle) do mapy w rzucie izometrycznym(0;0, 1;2...) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
3r3se7ven Opublikowano 19 Września 2015 Udostępnij Opublikowano 19 Września 2015 Witajcie wszyscy! Mam problem z którym nie mogę sobie poradzić od kilku dni. Rysuję sobie mapę takim kodem: ... I problem mam z przekonwertowaniem współrzędnych(destinationRectangle) do mapy w rzucie izometrycznym(0;0, 1;2...) Tak, hmm... taa... Genialne. Idziesz dobrą drogą... I zapewne za chwilę wymyślisz obracanie tego rzutu w ośmiu kierunkach... A tak, i dodasz do niego wysokości kafelków :) Być może w odwrotnej kolejności... Taaa... I gdzieś tam wyjdzie Ci zasłanianie jednych przez drugie, a po obróceniu... Gdzieś w demach wrzuciłem robociki w labiryncie robione kilka lat temu. Kod rzutowania wygląda identycznie tylko trochę się upasł. Nawet ma identyczne wartości liczbowe. Jak bardzo potrzebujesz to Ci przyślę cały projekt sobie przejrzysz gdzie dojdziesz. Sama koncepcja zrobienia tego co robisz jest chybiona w założeniach. Rzut izometryczny nie jest konwersją przestrzeni płaskiej, rzut izometryczny jest płaski i jedynie dla naszych oczu daje pozór tego czym nie jest. Musisz mapę od razu przygotować jako rzut izometryczny, a skalować fizykę, nie odwrotnie gdyż... ...gdyż rowiązanie odwrotne to po prostu zestaw funkcji upakowanych w d3d które robią to co chcesz dobrze, a nawet lepiej w przypadku izometrii dla rzutu ortogonalnego po wybranym kątem (1,1,1); Oczywiście jeśli chcesz zmarnować kilka tygodni na łażenie ścieżką, którą każdy uparcie próbuje iść :) Ale może zacznij od przeczytania tego jak działa transformacja macierzy świata, na macierz rzutu (world matrix, camera matrix, view matrix), są tam wszystkie składniki których szukasz już upakowane w funkcje. Koncepcja jednakże bardzo prawidłowa rozwojowo, tylko prowadząca na ścianę. To co napisałeś to część części szczególnego przypadku rozpisania tej macierzy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się