Перетинання тварин має унікальний спосіб прокрутки карти світу: Коли персонаж рухається вниз, світ котиться вгорі і знову, як би приклеєний до картонної трубки:
Це відео показує, як воно рухається.
Як я можу створити цей ефект?
Перетинання тварин має унікальний спосіб прокрутки карти світу: Коли персонаж рухається вниз, світ котиться вгорі і знову, як би приклеєний до картонної трубки:
Це відео показує, як воно рухається.
Як я можу створити цей ефект?
Відповіді:
Я трохи експериментував після гри Deathspank, що має подібний ефект. Хоча я ніколи не заглиблювався в нього достатньо, щоб побачити, чи можна його налаштувати на роботу дуже добре, одна можливість - просто змінити елементи у вашій вершинній шейдері на основі глибини. Функціонує відображення cos (глибини) на модифікацію осі Y. Ви можете налаштувати його таким чином, що світ не тільки опускається вдалині, але і якщо він ближче якоїсь глибини, завдяки чому світ відчуває себе особливо круглим. Ви можете зробити те ж саме для значення осі X, щоб зробити його більш сферичним. Я не впевнений, чи справді це роблять такі ігри; мої експерименти дали незадовільні результати, але я не сильно грав зі співвідношеннями, тому, можливо, це було так просто, як змінити швидкість випадання, щоб покращити її.
Здається, це просто взяття «плоского світу» і відображення до циліндричних координат . По суті, обгортання світу циліндром. Я робив щось подібне з плоским світом, але я загортав його на сферу:
Те, як я зробив це для сфери, схоже на те, як ви зробили це для циліндра. Виберіть відповідний радіус (ρ або "rho" у циліндричних координатах) для вашого світу. Для кожної вершини візьміть координати XZ свого світу (якщо вважати, що Y - висота), а потім переведіть на циліндричні координати, використовуючи XZ і радіус плюс Y. Якщо ви не додасте Y, ви отримаєте плоский циліндр. Потім перетворіть назад на декартові координати, щоб провести гру.
Ви хочете перейти від планарного світу, до циліндричного.
Обертання навколо осі x (в однорідних координатах) виглядає так:
| 1 0 0 0 |
Rx = | 0 ca -sa 0 |
| 0 sa ca 0 |
| 0 0 0 1 |
Де:
ca = cos(angle) and sa = sin(angle)
Щоб обчислити кут, подивіться на зображення. Пі / 2 скасовується, і вам залишається:
angle = offset_from_character.z - radius
Також подивіться на зображення. Кут проектованої точки залежить від горизонтальної відстані від символу, відстань від сфери залежить від вертикалі.
new_position = character_position - vec3(0,radius,0) + Rx * vec3(0,radius+_old_position.y,0)
обов'язково скиньте речі, що знаходяться над обрієм, інакше весь світ загорнеться.
Відмова: Я цього не перевіряв і не є експертом з математики, але відповідь є приблизно таким. Хтось, будь ласка, виправте мене, якщо я помиляюся.