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

Помогите написать физический движок :) (4 стр)

Страницы: 13 4 5 635 Следующая »
#45
(Правка: 17:40) 17:38, 27 апр. 2018
void solveMove(TRigidBody* body1, TRigidBody* body2, vec3 axis, vec3 pos)
  { 
 
    vec3 n1 = axis;
    vec3 w1 = cross(-axis, pos - body1->_pos);
    vec3 n2 = -axis;
    vec3 w2 = cross(-axis, pos - body2->_pos);

    float l = getLambda(body1, n1, w1, body2, n2, w2);

    body1->linearVelosity += n1 * l * body1->invMass;
    body2->linearVelosity += n2 * l * body2->invMass;

    body1->angularVelosity += w1 * l * body1->invInertia;
    body2->angularVelosity += w2 * l * body2->invInertia;
       
  }


Поменял знак у первого cross-а, работает,  только не могу теперь понять почему должно быть именно так.


#46
18:26, 27 апр. 2018

Suslik
Смотрите:

void solveMove(TRigidBody* body1, TRigidBody* body2, vec3 axis, vec3 pos)
  { 
 
    vec3 n1 = axis;
    vec3 w1 = cross(-axis, pos - body1->_pos);
    vec3 n2 = -axis;
    vec3 w2 = cross(-axis, pos - body2->_pos);

    float l = getLambda(body1, n1, w1, body2, n2, w2);

    body1->linearVelosity += n1 * l * body1->invMass;
    body2->linearVelosity += n2 * l * body2->invMass;

    body1->angularVelosity += w1 * l * body1->invInertia;
    body2->angularVelosity += w2 * l * body2->invInertia;
       
  }

  void solveRotation(TRigidBody* body1, TRigidBody* body2, vec3 axis)
  {
 
    vec3 n1 = vec3(0);
    vec3 w1 = axis;
    vec3 n2 = vec3(0);
    vec3 w2 = -axis;  

    float l = getLambda(body1, n1, w1, body2, n2, w2);


    body1->angularVelosity += w1 * l * body1->invInertia;
    body2->angularVelosity += w2 * l * body2->invInertia;



  }

  void constJoint(TCar* car, TRigidBody* weel, float dT, vec3 contactPos)
  {
    //запрещаем двигаться колесу и машине друг относительно друго по всем трем осям машины
    solveMove(car, weel, vec3(1, 0, 0), contactPos);
    solveMove(car, weel, vec3(0, 1, 0), contactPos);
    solveMove(car, weel, vec3(0, 0, 1), contactPos);
    
    //Запрещаем вращаться колесу и машине друг относительно друга по всем трем осям машины
    solveRotation(car, weel, car->yVector);
    solveRotation(car, weel, car->xVector);
    solveRotation(car, weel, car->zVector);
  }

Сейчас это получается правильный const-джоинт?

И что бы получить из него Hinge joint разрешающий вращение по оси car->xVector досточно закоментить solveRotation(car, weel, car->xVector)? Так?

#47
2:00, 28 апр. 2018

vindast
> Поменял знак у первого cross-а, работает,  только не могу теперь понять почему
> должно быть именно так.
со знаками в cross product'ах вообще дело ясное, что дело тёмное. они зависят от ориентации системы координат. короче, лень расписывать, но вектора угловых скоростей, моментов, и тому подобных углоподобных величин — это на самом деле псевдовекторы и их направления ты выбираешь произвольно. а вот после векторного произведения псевдовектора на реальный вектор ты получаешь реальный вектор, у которого направление строго фиксировано. но умножить надо в правильном порядке.

vindast
> И что бы получить из него Hinge joint разрешающий вращение по оси car->xVector
> досточно закоментить solveRotation(car, weel, car->xVector)? Так?
теоретически — да. практически — я понятия нету, нет ли у тебя там других багов, без видео.

#48
10:55, 28 апр. 2018

Suslik
> теоретически — да. практически — я понятия нету, нет ли у тебя там других
> багов, без видео.
Воодушевляет.

#49
12:13, 28 апр. 2018

Спустя 4 страницы темы можно вернуться к ее вопросу.
Как мне подсчитать вес с которым давит машина на колесо?
[img=машинка | Помогите написать физический движок :)]

#50
20:30, 28 апр. 2018

Попытка сделать петельное соединение.
Разъезжается очень быстро.

#51
20:32, 28 апр. 2018

Пора юзать псевдоскорости?

#52
20:32, 28 апр. 2018

или я просто криво сделал?

#53
20:37, 28 апр. 2018

может лучше заголишь норм raycast vehicle, не?

#54
20:40, 28 апр. 2018

lookid
там рейкаст колеса
или я что то пропустил?

#55
(Правка: 3:16) 3:14, 29 апр. 2018

vindast
> Пора юзать псевдоскорости?
да, уже можно. ещё у тебя моменты инерции для колёс и промежуточных тел выглядят как-то рандомновато и количество итераций солвера недостаточное. делай итераций 30 хотя бы для такого случая.

я подвески у автомобилей обычно делаю так:
1) на жёстких джойнтах делаю жёсткие ограничения: колесо может вращаться только вокруг своей оси, подвеска может ходить только вертикально, итп
2) на мягких соединениях, просто прикладывая ускорения к телам, делаю все эластичные силы вроде упругости и демпинга в амортизаторах и рессорах

#56
(Правка: 14:34) 14:33, 29 апр. 2018

Suslik
> делай итераций 30 хотя бы для такого случая.
Сделал. Все равно пока расходится, буду курить псевдоимпульсы.

Suslik
> 1) на жёстких джойнтах делаю жёсткие ограничения: колесо может вращаться только
> вокруг своей оси, подвеска может ходить только вертикально, итп
Вот там человек про рейкаст говорил, вот по сути машинка из соседнего треда была рейкастовой. 
Вот сейчас упоролся на джоинты что бы сделать макферсон.
Допустим решу проблемы с этими джоинтами (надо только починить разхождение джоинтов и сделать еще цилиндрический джоинт), вот все равно останется вопрос как работать с силами в такой системе.  Хочется добиться того что бы ни машина ни колесо ни элементы подвески не знали друг о друге, а знали только то какие к ним джоинты присоединены.  И вот хоть убей, не понимаю как передавать силы (особенно вес) через такие структуры (без вставки костылей).
Suslik
> 2) на мягких соединениях, просто прикладывая ускорения к телам, делаю все
> эластичные силы вроде упругости и демпинга в амортизаторах и рессорах
Мягкие это вообще как? Я планировал сделать аморт из двух тел, связанных через цилиндрический джоинт, и передавать вдоль оси силы (каким-то образом).

#57
14:35, 29 апр. 2018

Suslik
> у тебя моменты инерции для колёс и промежуточных тел выглядят как-то
> рандомновато
Это так, почти на бум сделано.
Допустим подсчитать моменты отсносительно трех осей тела (x-y-z векторов реально), а вот что делать с солвером где фигурирует число не понятно.

#58
14:43, 29 апр. 2018

Да и ось по сути в общем случае произвольная.

#59
15:49, 29 апр. 2018


Suslik
А если считать систему как матричную то париться о сходимости не нужно будет?

Страницы: 13 4 5 635 Следующая »
ПрограммированиеФорумФизика