алгоритм визуализации гравитационных искажений (2D)

Я работаю над игрой для Android и хотел бы реализовать 2D-сетку для визуализации эффектов гравитации на игровом поле. Я хотел бы исказить сетку на основе различных объектов на моем игровом поле. Эффект, который я ищу, похож на следующий из библиотеки обработки:

гравитация

Разве что у меня сетка будет попроще — 2D, и смотреть строго сверху, как бы глядя вниз на игровое поле.

Может ли кто-нибудь указать мне алгоритм рисования такой сетки?

Единственная идея, которая пришла мне в голову, заключалась в том, чтобы рисовать линии так, как если бы они были «частицами» — начинать с одного конца экрана и рисовать линию в нескольких сегментах, рассматривая каждый сегмент как частицу, вычисляя эффект гравитации в каждом из них. расположение сегмента.

Приложение предназначено для работы на Android.

Спасибо


person George Armhold    schedule 25.03.2011    source источник
comment
Идея ваших частиц пришла мне в голову, когда я читал этот вопрос. я думаю это лучший подход   -  person Martin    schedule 26.03.2011


Ответы (1)


Я бы нарисовал каждую линию как отдельный сегмент, как вы упомянули. Если сетка разреженная, это может быть быстрее.

Если вы просматриваете сетку сверху, вам нужно будет вычислить смещения координат x и y. Самый простой способ — сделать смещение вдоль оси z, а затем сфальсифицировать перспективу с помощью x_result = x/z и y_result = y/z. Вы устанавливаете z=1 и следите за тем, чтобы изменить его относительно немного (например, +- 0,1).

Ваш z должен быть пропорционален сумме 1/(distance to the sphere)^2. Это имитирует работу гравитации — она сужается пропорционально квадрату расстояния. Отличные новости - квадрат расстояния означает вычисление delta_x^2 + delta_y^2 - так что вы избавляете себя от вычисления квадратного корня == быстрее.

person Roman Zenka    schedule 10.05.2011