Войти
IrrlichtФорум

Правильные столкновения в irrlicht

#0
12:05, 31 дек 2012

Всех приветствую, в общем, появилась проблема в отлове столкновения мячика и стола (импровизированный теннис). Есть функция:

vector3df collision(ISceneNode* one, ISceneNode* two)
{
  vector3df ints;
  triangle3df tri;
  bool outF;
  const ISceneNode* my;
  return (smgr->getSceneCollisionManager()->getCollisionResultPosition(
   two->getTriangleSelector(),
   one->getPosition(),
   vector3df(2,2,2),
   one->getPosition(),
   tri, ints, outF,
   my));
}

Планировалось использовать функцию так:
if (collision(ten,pol) != vector3df(0,0,0)) // если мяч столкнулся с полом
{
cout << "1"; // есть контакт
}
else if (collision(ten,me[0])) // если мяч столкнулся с ракеткой 1
{
cout << "1,1"; // есть контакт 1
}
else if (collision(ten,me[1])) // если мяч столкнулся с ракеткой 2
{
cout << "1,2"; // есть контакт 2
}

Но увы, в консоль ничего не выводится...

#1
12:14, 31 дек 2012

Проблема в том, что надо сделать тка, чтобы функция возвратила true, если объект "one" столкнулся с селектором объекта "two". Есть другой вариант функции:

bool collision(ISceneNode* one, const ISceneNode* two)
{
  vector3df ints;
  triangle3df tri;
  bool outF;
   smgr->getSceneCollisionManager()->getCollisionResultPosition(
   two->getTriangleSelector(),
   one->getPosition(),
   vector3df(2,2,2),
   one->getPosition(),
   tri, ints, outF,
   two);
   //return (?);
}
#2
12:14, 31 дек 2012

Почему бы сразу не взять простой физический движок?

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

#3
12:20, 31 дек 2012

Вообще-то все уже готово, отлов нужен для столкновения, больше ничего не нужно...

#4
12:24, 31 дек 2012
screen_15_43 | Правильные столкновения в irrlicht Вот скриншот того, что получилось, объект падает на стол, и этот момент столкновения шарика со столом необходимо отловить.
#5
12:28, 31 дек 2012

Для моего проекта достаточно простых столкновений, а физика - это лишнее, на реалистичность не претендую.

#6
13:11, 31 дек 2012

попробуйте так:

return one->getTransformedBoundingBox()->intersectsWithBox(two->getTransformedBoundingBox());

у меня это срабатывает достаточно хорошо

с наступающим!

#7
13:22, 31 дек 2012

finic
Благодарю, но этот метод не подходит, вот почему:
screen_00_57 | Правильные столкновения в irrlicht

#8
18:31, 31 дек 2012

С проблемой разобрался, спасибо всем)

IrrlichtФорум

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