Я прочитал некоторые сведения о физическом моделировании и нашел возможное решение. Он работает, разбивая каждый физический шаг на три фазы:
1. Предварительный шаг:
Каждый физический шаг, окно создает четыре преобразования, два для каждой стороны соединения:
- входное преобразование, которое преобразует положение объекта, скорость (и, возможно, размер и вес) в целевую систему координат и
- выходное преобразование, которое преобразует силы обратно в исходную систему объекта.
(Статические окна нужно сделать только один раз.)
Кроме того, объекты в каждой системе координат делятся на три группы:
Физическая группировка http://content.wuala.com/contents/Tamschi/Stack%20Exchange/WindowGrouping.png
Объекты перед окном (зеленые).
Объект также считается в этой группе, если он пересекает плоскость окна или может пересечь его из-за окна (не показано).
Объекты, которые пересекают окно или могут пересечь его на этом шаге физики (оранжевый).
Объекты за окном (синие). Если объект летит к задней стороне окна, он все равно помечается как член группы три.
Группировка может быть упрощена, если окно находится на границе симуляции.
2. Main-Step:
Физика рассчитывается в основном как обычно, с некоторыми исключениями:
Объекты из второй группы никогда не сталкиваются с объектами из третьей и наоборот.
Входное преобразование окна используется для объектов из второй группы, и результаты сравниваются с передними и пересекающимися объектами из целевой системы. Результирующая сила преобразуется с использованием выходного преобразования и применяется к исходному объекту.
(Если объект попал в расчет, его необходимо перегруппировать!)
3. Пост-шаг:
Если объект из второй группы пересек окно, он перемещается в систему назначения с использованием преобразования ввода.
Дополнительные мысли:
Если преобразования сохраняются после вычисления физики, они могут использоваться для ускорения рендеринга и для более простых вычислений ИИ. Группировка может быть использована для удаления клип-плоскостей из процесса рендеринга.
Недостатком этого решения является то, что окна должны быть добавлены непосредственно в физический движок.