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


10

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

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

Ответы:


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 ++ и другие).

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.