усреднение местоположения пикселей, чтобы найти нормаль поверхности. (2D) - PullRequest
1 голос
/ 16 мая 2011

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

Используется для обнаружения столкновений на пиксель с использованием спрайтов. В настоящее время у меня есть массив всех перекрывающихся пикселей и их расположения. Я хотел бы использовать эти данные для определения среднего положения перекрывающихся пикселей, чтобы вычислить нормаль для этой поверхности. это должно позволить мне столкнуться с объектами неправильной формы, но при этом сохранить реалистичное физическое взаимодействие.

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

Спасибо.

Ответы [ 3 ]

2 голосов
/ 16 мая 2011

Рассматривается сохранение нормалей для каждой точки в ваших спрайтах (то есть в отдельной текстуре) вместо попытки их вычисления.Таким образом, вы сможете настроить нормали так, чтобы ваши столкновения выглядели «естественными» (в смысле вашей игры не обязательно корректировать с точки зрения физики).

1 голос
/ 16 мая 2011

[Отредактировано] - мне нравится идея спрайтовых нормалей Алексея лучше, чем мой подход, основанный на таблицах, но все равно добавится ...

Возможно, вы захотите рассмотреть возможность просто прикрепить 2D-геометрию к каждомуспрайт.Это даст вам возможность делать реальные столкновения полигонов.Когда вы определите столкновение спрайтов, посмотрите на многоугольник двух спрайтов и примените к ним стандартную физику столкновений.

0 голосов
/ 16 мая 2011

Это может сработать: найдите два худших пикселя (по одному на каждое тело) и примените временную пружину между ними, чтобы развести их.В основном, какой-либо пиксельный комбо имеет наибольшее перекрытие (противоположное разделению) и применяет силу, пропорциональную величине перекрытия.Это добавит энергии в вашу систему, поэтому подумайте о добавлении демпфера (силы, пропорциональной относительной скорости).Часто используемые уравнения:

(reduced mass) = 1/( 1/(mass 1) + 1/(mass 2) )
(stiffness) = (reduced mass) * (response freq)^2
(damping) = (ratio)*(reduced mass) * (response freq)

, и я контролирую количество (response freq) и (ratio), чтобы получить желаемый эффект.Частота отклика - это то, как быстро вы хотите, чтобы перекрытие исправлялось само собой, а «коэффициент демпфирования» - это положительное число, которое может быть меньше или больше единицы, что позволит вам точно настроить отклик демпфирования.

...