Войти
ПрограммированиеФорумФизика

как лечить penetrations (2 стр)

Страницы: 1 2
#15
9:19, 11 апр. 2007

ну че же делать то - парни Ж)


#16
18:43, 11 апр. 2007

Шаг времени фиксированный?

#17
19:10, 11 апр. 2007

The Andreyp
Можешь пользоваться тем,что реально ничего  ап стену жестоко не бьется.
Т.е.сделай так:например,коллизия сферы со стенкой- если расстояние центр-стенка меньше радиуса-
уменьшай  скорость движения.  Тогда elapsed time не надо делить. А на глаз это не заметно.
Практически это так-подбираешь  фиктивный радиус чуть больше ,чтобы визуально предмет соприкасался
в момент полной остановки.Я делал такое для камеры,и есть один пример с мегашарегом(так его какой-то гад обозвал)-
на моем www файл  radiocity.zip 

#18
21:42, 11 апр. 2007

Ilia
>коллизия сферы со стенкой- если расстояние центр-стенка меньше радиуса-уменьшай скорость движения.

А как потом считатъ отскок шара, если упругое столкновение? Хранитъ началъную скоростъ?
Не проще ли считатъ столкновение состоявшимся, перенести шар в точку соприкосновения  и задатъ ему нужный импулъс?

#19
15:48, 12 апр. 2007

как уже было сказано - фиксированный шаг.
Но когда будут тормоза и deltaTime > размер фиксированного шага придется делать несколько шагов,
что еще больше просадит производительность, если расчет физики занимает значительное время.
еще частично поможет - split impulses - warmstarting делать только по импульсу для скорости.

#20
10:24, 13 апр. 2007

2gexogen
нет - шаг не фиксированный! total step=frametime! при падении фпс делю его на несколько мелких - тогда да - тормоза жуткие(етот метод отпадает)

2Ilia
хм а если не сфера а меш - тогда тожа самое тока сферой щитать вершину меша или как! чес хотелось бы какнить 1оной итерацией! какнить!

split impulses - warmstarting - пробовал - обьекты скакать при тормозах начинают! или я чето не так сделал

#21
9:20, 16 апр. 2007

оке! попробовал замутить следущее -

с помощью бинарного поиска ищу подходящий таймстеп для тела - тоесть так как симуляция идет с неким ДЭТЭ - постоянно делю его на 2 и выбираю тот дт при котором нет пенеративных контактов на промежутке времени curtime, curtime+dt ! ( тоесть пенетрация конечно есть но допустима очень маленькая - иначе не будет никакого пересечения вообще ребер с полигоном )!

далее симулирую тело с найденным таймстепом -

итак в результате у меня при таймстепе =1/1 тело оказывается перед другим пенетрация не наюлюдается (ок я прыгал от счастья )- но вот проблема -

контактов может не быть всеравно! наверно надо величину пенетрации ++? райт ?

и еще - я сейчас говорю о фиксед таймстеп!

#22
13:16, 16 апр. 2007

The Andreyp

пересечения будут в любом случае. например, допустимую глубину проникновения можно оценить равенством h = 2*V*dt, где V - это оценка скорости моделируемых тел (или ее верхняя граница, если она известна).

тогда просто делаешь следующее - прикидываешь, какое значение глубины проникновения тебя устроит и отсюда находишь подходящий шаг по времени dt = h/(2*V).

Да, можно в случае персечений уменьшать dt, а когда нет пересечений обратно его увеличивать, но это да, уже переменный шаг получится.

#23
14:03, 16 апр. 2007

тоесть метод dt = h/(2*V).  никак не связан с тем что сделал я о binary search and dt correction ? так же перменный шаг не страшен по -моему - так как ето будет clamped timestep! и у каждого тела будет свой! я планирую потом заюзать физХ для поиска пересечений - не более!

#24
14:28, 16 апр. 2007

вообще говоря - да.. хотя автоматическое определение шага может додуматься до такого, что сделает dt необоснованно маленьким, и автоматику стоит ограничивать чем-то, например такими оценками.

#25
14:53, 16 апр. 2007

йасно - а как найти V чето читал и ниче не полян

#26
18:58, 16 апр. 2007

The Andreyp
Ограничь шаг времени свеху, не надо делать несколько итераций.
При низком фпс физика замедлиться, так делают многие - тот же Half-Life2.

#27
9:37, 18 апр. 2007

что это за шаг сверху в моём случае ? Ж)

у меня опять проблемы - общая схема у меня сейчас такая!

///////////////////////// start iteration //////////////////////////
fps=1/5
//////////////// findcontacts /////////////////////////////////////////////////////////
save current values // old vel,old angvel e.t.c

calcforce
integratevelocity(fps)
integratepos(fps)

collide_mesh()

for all contacts
{
    if(contact.depth<-eps)
    {
          // we have penetrated contact
          body_fps=find_impact_time
  }
}

restore old values

save current values    :) // i know - debug mode     

calcforce
integratevelocity(body_fps)
integratepos(body_fps)

collide_mesh()

// now we have contacts for this body_fps when body is moving

restore old values
/////////////////////////////////////////////////////////////////

// simulate body with his frametime
calcforce
integratevelocity(body_fps)
responce_contacts(body_fps)              // 1 iteration ????
integratepos(body_fps)


проблема - допустим бокс катится по наклонной плоскости - скорость катения невилика - и тогда find_impact_time говорит почему то что body_fps=0

в результате тело застревает в этой плоскости ( хотя его позиция NON penetrated ) и контакты есть - просто body_fps=0

хмммм - чо бы ето значило - где ошибка ?

#28
9:30, 20 апр. 2007

!

Страницы: 1 2
ПрограммированиеФорумФизика

Тема в архиве.