Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2012, 23:20   #11
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Granus Посмотреть сообщение
Может быть я чего-то недопонял. Скажем, столкновение нескольких AABB одновременно. Как Вы предлагаете его предотвратить?
Для начала объясните, каким образом может столкнуться одновременно несколько тел.
Нет, это событие не является невозможным, но его вероятность равна 0.
s-andriano вне форума Ответить с цитированием
Старый 14.07.2012, 21:28   #12
karuy
 
Регистрация: 24.05.2010
Сообщений: 8
По умолчанию

http://isadateam.com/doc/phys1.htm - может окажется полезным. Пример прилагается.
karuy вне форума Ответить с цитированием
Старый 14.07.2012, 22:43   #13
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Для начала объясните, каким образом может столкнуться одновременно несколько тел.
Нет, это событие не является невозможным, но его вероятность равна 0.
Ню-ню.
Учитывая, что время в компьютерных симуляциях течет исключительно дискретно, проблема возникает очень часто и доставляет много хлопот.
В качестве примера возьмем, например, три круглых двумерных тела. Пусть начальные координаты первого - (0, 0), второго - (2, 0), третьего - (1, 1). Радиусы всех равны 0.5 (диаметры, значит, по единице). Скорости: (0.67, 0), (-0.67, 0), (0, -0.67). Если расположить прямо под ними шахматную доску, то первый будет находиться прямо над А1, второй - над С1, третий - над B2 (это для наглядности). В результате, через единицу времени из такой картины:
Код:
 О
О О
получается что-то вроде этого:
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 20.07.2012, 16:24   #14
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

karuy, спасибо за материал.

Гром, большое спасибо. Именно о таких случаях речь и идет. А при наличии неподвижных объектов (стен, полов и т.д.) столкновение одновременно с десяточком объектов - не редкость. И как Вы такого рода столкновения обрабатываете?
Форматируйте код, будьте людьми.

Последний раз редактировалось Granus; 20.07.2012 в 16:30.
Granus вне форума Ответить с цитированием
Старый 20.07.2012, 17:29   #15
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Цитата:
И как Вы такого рода столкновения обрабатываете?
Последовательно, сначала растолкаю красный и зеленый, затем красный* и синий.
красный* - красный в новой позиции.
Эффективнее, определить все проникновения красного в остальные, и правильно их растолкать исходя из глубины проникновения. Затем проникновение зеленого в синий и их тоже растолкать. Повторить несколько раз для всех объектов (расслабление системы).
Kostia вне форума Ответить с цитированием
Старый 20.07.2012, 19:26   #16
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Гром Посмотреть сообщение
Ню-ню.
Учитывая, что время в компьютерных симуляциях течет исключительно дискретно,
Это неверное утверждение.
Вполне вероятно, в некоторых примитивных случаях дело обстоит именно так, в общем же случае мы сами задаем, как должно течь время в нашем виртуальном мире.
Как сделаем, так и будет. Никакой фатальности здесь нет и быть не может.
Все эти "исключительно дискретно" происходят исключительно от недостатка квалификации разработчика.
Цитата:
проблема возникает очень часто и доставляет много хлопот.
Ну да, как обычно - сначала придумываем себе проблемы, а потом их мужественно решаем.
Цитата:
В качестве примера возьмем, например, три круглых двумерных тела. Пусть начальные координаты первого - (0, 0), второго - (2, 0), третьего - (1, 1). Радиусы всех равны 0.5 (диаметры, значит, по единице). Скорости: (0.67, 0), (-0.67, 0), (0, -0.67). Если расположить прямо под ними шахматную доску, то первый будет находиться прямо над А1, второй - над С1, третий - над B2 (это для наглядности). В результате, через единицу времени из такой картины:
Элементарные подсчеты показывают, что тела 1 и 2 столкнутся через 0.67. Именно в этот момент и нужно обрабатывать столкновение, не дожидаясь, пока пройдет полная единица времени.
Это - первое.

Теперь - второе.
Вы умышленно выбрали такие условия, что столкновения нескольких тел произойдет одновременно. В природе так не бывает. Значит, Ваш вариант не соответствует ни тому, что реально имеется в природе, ни тому, что можно нормально обработать (последовательное попарное столкновение объектов). Т.е. Вы умышленно искажаете ту картину, которая реально встречается в природе, и именно вследствие этого приобретаете проблемы.
Вы задаете координаты и скорости с точностью до 0.01. Добавьте ко всем данным по 0.01*(random - 0.5). Это самое простое, что можно предложить.

Последний раз редактировалось s-andriano; 20.07.2012 в 19:30.
s-andriano вне форума Ответить с цитированием
Старый 20.07.2012, 19:59   #17
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

s-andriano, вы неправы.
Цитата:
Вполне вероятно, в некоторых примитивных случаях дело обстоит именно так, в общем же случае мы сами задаем, как должно течь время в нашем виртуальном мире.
dt меньше чем машинный нуль взять не получится.
Цитата:
Элементарные подсчеты показывают, что тела 1 и 2 столкнутся через 0.67. Именно в этот момент и нужно обрабатывать столкновение, не дожидаясь, пока пройдет полная единица времени.
А для системы из 5 тысяч тел сложной формы?
Цитата:
Вы умышленно выбрали такие условия, что столкновения нескольких тел произойдет одновременно. В природе так не бывает. Значит, Ваш вариант не соответствует ни тому, что реально имеется в природе, ни тому, что можно нормально обработать (последовательное попарное столкновение объектов). Т.е.
Современные компьютеры неспособны обработать физику как она есть в реальном мире, поэтому в gamedev'е всегда упрощают модель реального мира, и после этих упрощений естественно столкнуться с проблемами которые в оном не встречаются. Но при правильной обработки различных исключительных ситуаций можно получить вполне приемлемую имитацию.
Цитата:
Вы задаете координаты и скорости с точностью до 0.01. Добавьте ко всем данным по 0.01*(random - 0.5). Это самое простое, что можно предложить.
o_O

Вот давно еще на Delphi 7 писал:
Вложения
Тип файла: rar Примитив 2 - окружности.rar (180.0 Кб, 20 просмотров)
Kostia вне форума Ответить с цитированием
Старый 20.07.2012, 22:16   #18
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
Это неверное утверждение.
Вполне вероятно, в некоторых примитивных случаях дело обстоит именно так, в общем же случае мы сами задаем, как должно течь время в нашем виртуальном мире.
Как сделаем, так и будет. Никакой фатальности здесь нет и быть не может.
Все эти "исключительно дискретно" происходят исключительно от недостатка квалификации разработчика.
Есть два варианта - использование дискретного и непрерывного времени для обработки столкновений. В дискретном случае нужно лишь разобрать кашу из объектов, положения которых уже известны. В непрерывном же случае, который, несомненно, будет более точен, нужно решать систему уравнений, скорее всего, весьма нетривиальную и нелинейную. Вы уверены, что плюсы второго перевесят расходы на него?
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 20.07.2012, 23:34   #19
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Kostia Посмотреть сообщение
dt меньше чем машинный нуль взять не получится.
Возможно, Вы будете удивлены, но это и не нужно.
При условии, разумеется, что Вы не собираетесь искать его на множестве целых чисел.
Цитата:
А для системы из 5 тысяч тел сложной формы?
Без разницы.
Законы природы для всех одинаковы.
Цитата:
Современные компьютеры неспособны обработать физику как она есть в реальном мире, поэтому в gamedev'е всегда упрощают модель реального мира, и после этих упрощений естественно столкнуться с проблемами которые в оном не встречаются. Но при правильной обработки различных исключительных ситуаций можно получить вполне приемлемую имитацию.
При правильной модели Мира исключительных ситуаций оказывается намного меньше, чем если сделать Мир "как попало".
Просто создание Мира нужно начинать именно с физики, а не пытаться "прикрутить" физику потом.

Цитата:
Сообщение от Granus Посмотреть сообщение
Есть два варианта - использование дискретного и непрерывного времени для обработки столкновений. В дискретном случае нужно лишь разобрать кашу из объектов, положения которых уже известны. В непрерывном же случае, который, несомненно, будет более точен, нужно решать систему уравнений, скорее всего, весьма нетривиальную и нелинейную.
В принципе, со всеми тезисами согласен. Возможно, кроме некоторых акцентов.
Цитата:
Вы уверены, что плюсы второго перевесят расходы на него?
Это нужно решать в каждом конкретном случае.
Универсального решения пригодного на все случаи жизни не существует.

Последний раз редактировалось s-andriano; 20.07.2012 в 23:37.
s-andriano вне форума Ответить с цитированием
Старый 21.07.2012, 00:01   #20
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

s-andriano, видимо, не до конца Вас понимаю. Вы сильно критикуете многое из того, что здесь пишут. Опишите целиком, как, по-вашему, должно все это происходить, по полочкам.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка столкновений с блоками alonix Помощь студентам 14 15.04.2012 19:29
обработка числовых последовательностей и последовательная обработка символов Renat(kai) Помощь студентам 3 28.03.2012 23:22
обработка файлов Pepsik Помощь студентам 1 10.07.2011 21:35
Обработка столкновений окружностей. Вадим Буренков Gamedev - cоздание игр: Unity, OpenGL, DirectX 18 08.03.2010 13:43
Код проверки столкновений не работает. Манжосов Денис :) Общие вопросы Delphi 8 02.02.2009 10:31