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

совершенно идиотская проблема с аккумулированием импульса

#0
22:57, 18 фев. 2018

Проблема в том что я в narrowphase  ридуцирую  точки коллизии (откидываю правильные но потенциально  ненужные  точки коллизии)  после чего  граф точек стаёт не ориентируемым. То есть сначала у нас точки в ContactManiflod были отсортированы по часовой стрелки index:[0,1,2,3,5,6] , а после редуцирования точки  коллизии располагаются хоть как в ContactManiflod  index:[3,1,0,2 .].
А в результате  аккумулированный импульс точки (0) запишется в точку (3) , а точки (2) в (0) .и.т.д . Потому что аккумулированный импульс храниться в самой структуре точки .
А Позиция точек  рандомно записуеться, хоть какая позиция может записаться в какую угодно точку коллизии , то бишь точка коллизии  ( c) на первой итерации имеет позицию c.pos = p0,  а на другой  итерации  c.pos = p1,p2…..!


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

Короче вопрос в том как правильно хранить и перезаписывать аккумулированный импульс  , несмотря на совершенно рандомную ориентацию(расположения) точек коллизии ,
И совершенно произвольную запись  позиций для точек коллизий ?


P.S: Я понимаю что нифига не понятно , ну проблема очень специфическая. Я даже не знаю как правильно задать вопрос .
 


#1
4:51, 19 фев. 2018

werasaimon
> А в результате  аккумулированный импульс точки (0) запишется в точку (3) , а
> точки (2) в (0) .
ну так может, это.. редуцировать просто нормально, сохраняя индексацию?

#2
22:57, 19 фев. 2018

Suslik
> ну так может, это.. редуцировать просто нормально, сохраняя индексацию?
Я редуцирую методом ерина-катто, а реализацию взял из bullet, вроде как должно правильно роботать . Но не роботает ! Роботает если только заново сортировать точки колизии, чтоб они правильно роспологались по индексам [0,1,2,3] , а это тянит вычислительные ресурсы , которые у меня на вес золота !

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

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