Как я могу симулировать разбитое стекло?

10

Мне нужно сделать симуляцию с камнем, брошенным через стеклянное окно. Как я могу это сделать?

Я имею в виду, я думал о создании 3D-модели камня и стекла в 3D Studio Max 2012, разбил стекло и экспортировал обе модели в XNA 4.0 как .x модели. Затем в XNA сделаю анимацию - напишу свой физический движок. Возможно ли так? Можно ли разрушить стекло в XNA после удара или я должен сделать это в 3DS Max? Под «разрушением стекла» я имею в виду отсоединение некоторых ранее разбитых стеклянных бит друг от друга, потому что в зависимости от начальной скорости и веса камня, а также от сопротивления (твердости?) Стекла (все определяется пользователем), биты будут отсоединяться от друг друга по-разному.

toomek308
источник

Ответы:

5

Разрушение Вороного - один из подходов, который, например, создает довольно реалистичный раскол. закаленное стекло, которое обладает замечательной способностью разбиваться на мелкие, обычно выпуклые фрагменты из-за структурных изменений стекла во время производства. Кроме того, если у вас есть стеклянная панель, вам понадобится только реализация 2D Вороного, а не 3D.

инженер
источник
3

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

Натан Рид
источник
Привет Натан (снова), ты работал над этой задачей после 2011 года? Можете ли вы дать больше подсказок? Thx
karlphillip
@karlphillip Я работал над демо, используя PhysX Destruction , хотя лично я занимался только рендерингом, а не физикой в ​​этом проекте. Технология PhysX работает, генерируя предварительно расколотые части в инструменте DCC, и заменяет их на непрерывную сетку, когда происходит повреждение.
Натан Рид
3

Создайте необработанную панель и разбитую панель. Когда вы столкнетесь с коллизией, выключите необработанную версию и начните использовать разбитую панель.

Если вы бросаете один камень (несколько одинакового размера) в окно, то вы можете проделать длинный путь с вашей 3d-моделью разбитой панели (смоделируйте осколки на месте и затем запустите простую физическую симуляцию на каждом из осколки, чтобы имитировать их падение / полет). Если камера не находится слишком близко (или в замедленном режиме), вам не нужно делать столкновения между деталями - только с окружающей геометрией (плоскостью земли?). Не забывайте распылять некоторые эффекты частиц на облако мелких стеклянных частиц, которые сопровождают разрушение.

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

М Медузы
источник
2

Если вы скачаете Библиотеку Bullet Physics, у нее есть образец, включающий разбивающееся стекло, и вам понадобится что-то вроде пули в любой игре с разбивающимся стеклом.

Изменить: Пуля будет отличной демонстрацией для моделирования вашего собственного двигателя после.

Мэтт Дженсен
источник
1

Большое спасибо за ваши ответы и бесценную помощь. Мне наконец удалось построить проект. Я испробовал все ваши предложения и в конце концов выбрал свой путь для этого моделирования.

Для физического движка я использовал bulledsharp (оболочку для маркеров физики для c #), но важно использовать самый последний, скомпилированный вами с использованием источника bulletsharp из sourceforge svn, а также из свежих источников физики bullet. Не тот предварительно скомпилированный .dll, доступный для загрузки с веб-сайтов. Предварительно скомпилированная версия была слишком старой для меня и не включала в себя некоторые доработанные функции. Я также узнал, что для простых симуляций, когда вам не нужна продвинутая графика, лучше использовать более старый 3dsmax, то есть 2011 (не самый последний 2012), для разработки модели и т. Д. Главным образом, потому что есть больше плагинов и экспортеров. Более того, очень полезно проверить учебники во всех доступных фреймворках (sharpdx, xna, xna4, slimdx, c ++ и другие).

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

Это оно. Спасибо за вашу помощь.

toomek308
источник