Animal Crossing ma unikalny sposób przewijania mapy świata: gdy postać porusza się w dół, świat toczy się w kółko na górze, jakby przykleił się do tekturowej tuby:
Ten film pokazuje, jak się porusza.
Jak mogę stworzyć ten efekt?
Animal Crossing ma unikalny sposób przewijania mapy świata: gdy postać porusza się w dół, świat toczy się w kółko na górze, jakby przykleił się do tekturowej tuby:
Ten film pokazuje, jak się porusza.
Jak mogę stworzyć ten efekt?
Odpowiedzi:
Po zagraniu Deathspank eksperymentowałem trochę, co ma podobny efekt. Chociaż nigdy nie zagłębiłem się w to wystarczająco, aby sprawdzić, czy można go dostroić, aby działał bardzo dobrze, jedną z możliwości jest po prostu modyfikowanie elementów w module cieniującym wierzchołków na podstawie głębokości. Działa funkcja mapowania cos (głębokość) na modyfikację osi Y. Możesz to ustawić tak, aby świat nie tylko opadał w oddali, ale także, jeśli był bliżej niż na pewnej głębokości, dzięki czemu świat jest wyjątkowo okrągły. Możesz zrobić to samo dla wartości osi X, aby wyglądała na bardziej kulistą. Nie jestem pewien, czy tak właśnie robią takie gry; moje eksperymenty dały niezadowalające wyniki, ale nie bawiłem się zbytnio stosunkami, więc może to być tak proste, jak zmiana tempa wypadania, aby było lepiej.
Wygląda na to, że po prostu bierze „płaski świat” i odwzorowuje na współrzędne cylindryczne . Zasadniczo owijanie świata w cylinder. Zrobiłem coś podobnego z płaskim światem, ale owinąłem to kulą:
Sposób, w jaki to zrobiłem dla kuli, jest podobny do tego, w jaki zrobiłbyś to dla cylindra. Wybierz odpowiedni promień (ρ lub „rho” we współrzędnych cylindrycznych) dla swojego świata. Dla każdego wierzchołka weź współrzędne XZ swojego świata (zakładając, że Y jest wysokością), a następnie ukryj się do współrzędnych cylindrycznych, używając XZ i promienia plus Y. Jeśli nie dodasz Y, otrzymasz płaski cylinder. Następnie wróć do współrzędnych kartezjańskich, aby narysować grę.
Chcesz przejść ze świata płaskiego do cylindrycznego.
Obrót wokół osi x (w jednorodnych współrzędnych) wygląda następująco:
| 1 0 0 0 |
Rx = | 0 ca -sa 0 |
| 0 sa ca 0 |
| 0 0 0 1 |
Gdzie:
ca = cos(angle) and sa = sin(angle)
Aby obliczyć kąt, spójrz na obraz. Pi / 2 anuluje się, a Ty pozostaniesz z:
angle = offset_from_character.z - radius
Spójrz również na obraz. Kąt rzutowanego punktu zależy od poziomej odległości od znaku, odległość od kuli zależy od pionu.
new_position = character_position - vec3(0,radius,0) + Rx * vec3(0,radius+_old_position.y,0)
pamiętajcie, aby zabić rzeczy, które są nad horyzontem, w przeciwnym razie cały świat się zawinie.
Oświadczenie: Nie testowałem tego i nie jestem ekspertem w dziedzinie matematyki, ale odpowiedź brzmi mniej więcej tak. Niech ktoś mnie poprawi, jeśli się mylę.