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

Box2d Вращение кузова под действием вращения колес (2 стр)

Страницы: 1 2
#15
7:59, 21 фев. 2018

Sleep Dog
остряк...
Ты видать на своем солярисе постоянно на задние колеса встаешь на светофоре...
Не всегда нужен монстрТрак да и игры бывают разные с разным управлением.
Вопрос был как поправить КОД для получения возможностей управления.. Выше человек показал где менять. Тема помоему исчерпана.


#16
9:07, 21 фев. 2018

NSX
Люди не должны выполнять за тебя задачи. Тут могут подсказать в какую сторону копать, но нет причин бесплатно писать тебе код. Учитывая столь постыдный уровень в физике, самым верным вариантом выглядит предложение учебника.

#17
1:05, 23 фев. 2018

werasaimon
Я так понимаю библиотеку нужно пере собрать потом?
Пересобрал, на код не жалуется....но ничего не происходит =(
b2j_w[1]->EnableRotationBodyA(false);
b2j_w[1]->EnableRotationBodyB(false);

#18
1:55, 23 фев. 2018

один посоветовал испортить код библиотеки, чтобы создать видимость достижения нужного эффекта. второго это не смутило, он так и сделал. но "ничего не происходит", а отладить он не в силах. капец.

#19
22:08, 23 фев. 2018

NSX
Я не шарю как там в  Box2D ,я больше по Bullet .!
  Вот заглянул в исходник Box2D , и , вот кусок кода из b2WheelJoint который  задаёт реактивный  момент вращения

// Solve rotational motor constraint
  {
    float32 Cdot = wB - wA - m_motorSpeed;
    float32 impulse = -m_motorMass * Cdot;

    float32 oldImpulse = m_motorImpulse;
    float32 maxImpulse = data.step.dt * m_maxMotorTorque;
    m_motorImpulse = b2Clamp(m_motorImpulse + impulse, -maxImpulse, maxImpulse);
    impulse = m_motorImpulse - oldImpulse;

    wA -= iA * impulse;
    wB += iB * impulse;
  }

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

public:
bool isValidMomentumA;
bool isValidMomentumB;

---------
// Solve rotational motor constraint
  {
    float32 Cdot = wB - wA - m_motorSpeed;
    float32 impulse = -m_motorMass * Cdot;

    float32 oldImpulse = m_motorImpulse;
    float32 maxImpulse = data.step.dt * m_maxMotorTorque;
    m_motorImpulse = b2Clamp(m_motorImpulse + impulse, -maxImpulse, maxImpulse);
    impulse = m_motorImpulse - oldImpulse;

    if(isValidMomentumA) wA -= iA * impulse;
    if(isValidMomentumB) wB += iB * impulse;
  }
Если myWheelJoint.isValidMomentumB == false , то тело B не вращаеться вокруг оси , а если myWheelJoint. isValidMomentumA == false то тело A не вращается вокруг оси  .и.т.д ! И ещё угловую скорость тела которое не должно вращаеться вокруг оси лутше убери с уравнения в коде !
P.S : дай глянуть видио или анимацию машынки , может чего подскажу !

P.S: писал сообщения с телефона, случайно не то скопировал с репозитория Box2D! Лутше послушай Suslik , ибо при таком изминении кода ты нарушаешь третий закон Ньютона , а это не соотвествует физике в реальном мире !
Но а сами законы Нютона верны только на маленьких скоростях

#20
23:00, 23 фев. 2018

werasaimon
Может я что то не так делаю, я меняю код в файле, пересобираю библиотеку. Больше ничего не требуется?

#21
22:35, 24 фев. 2018

NSX
> Может я что то не так делаю, я меняю код в файле, пересобираю библиотеку.
> Больше ничего не требуется?
Собери библиотеку Box2D  из исходниковь, и так попробуй.
Ну то есть без компиляции в статическую библиотеку ! 
P.S: если сделал всё правильно , то должно роботать . Ибо телу больше неоткуда брать реактивный  крутящий момент !

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

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