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

Объясните команду - NewtonBodySetForceAndTorqueCallback

#0
10:36, 27 сен. 2006

Вот до сих пор не могу переместить объект (а точнее, эллипсоид), у которого запрещено вращение по координатам X и Z. Вроде перемещение осуществляется с помощью команды NewtonBodySetForceAndTorqueCallback(Body, CharacterApplyForceAndTorque);
Но вот, что писать с процедуре CharacterApplyForceAndTorque я не знаю. Ну уже всяко пробовал - все равно не полуается. Смог сделать только, чтоб он вращался вокруг оси Y, но зачем мне это? Искал примеры, нашел хороший, но там нет исходников (неужели так жалко кинуть исходник). Помогите. Уже вторую неделю мучаюсь.


#1
11:06, 27 сен. 2006

А в чем проблема?

NewtonBodySetForceAndTorqueCallback задает коллбэк функцию для тела (логично :)

Внутри этой функции задавай телу силы, скорости при помощи соответствующих функций. Тогда на каждом такте симуляции будет вызываться эта ф-ция и все будет путем.

#2
12:35, 27 сен. 2006

Pyromaniac

>Внутри этой функции задавай телу силы, скорости при помощи соответствующих функций.
Может ты подскажешь как это реализовать? При помощи каких функций?

#3
12:56, 27 сен. 2006
void ForceTorqueCallback(const NewtonBody* body) {
  PhyServ::PhysicsEngine::BindInfo* bi=(PhyServ::PhysicsEngine::BindInfo*)NewtonBodyGetUserData(body);
  PhyServ::ObjectsManager::Object* peb=(PhyServ::ObjectsManager::Object*)bi->object;
  if(peb->type&OBJ_TYPE_CONTROLLABLE)PhyServ::BotMover::getSingleton().UpdateBody(peb->bunchId);
  dMatrix transform;
  NewtonBodyGetMatrix(body,&transform[0][0]);
  dQuaternion orientation(transform);
  if((peb->force[0]!=0)||(peb->force[1]!=0)||(peb->force[2]!=0)) {
    dVector force=rotate(peb->force,orientation);
    NewtonBodyAddForce(body,&force[0]);
  }
  if((peb->torque[0]!=0)||(peb->torque[1]!=0)||(peb->torque[2]!=0)) {
    dVector torque=rotate(peb->torque,orientation);
    NewtonBodyAddTorque(body,&torque[0]);
    peb->torque=dVector(0,0,0);
  }
}

Вот тебе типа пример из нашего проекта :)

Основной смысл - применение функций NewtonBodyAddForce и NewtonBodyAddTorque. Первая добавляет телу линейную силу, вторая - типа угловую.

Примечание для спорщиков и флудеров: не надо мне говорить, что угловой силы не существует - сам знаю. Это специфика Ньютона

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

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