Сейчас я изучаю Ogre для 3D-программирования.
В моей сцене сейчас только три сущности, сфера, мышь и кошка. кошка бежит по сфере.
Поскольку моя сцена очень проста, я использую простое «Минимальное обнаружение столкновений» (http://www.ogre3d.org/forums/viewtopic.php?f=5&t=80829), производительность соответствует инструкции.
До того, как я использую обнаружение столкновений, частота кадров составляет 60 (максимально по умолчанию), после того, как я использую ее, частота кадров падает до 13-15. Я использую его перед рендерингом каждого кадра.
bool GeneratorFrameListener::frameRenderingQueued(const Ogre::FrameEvent& evt){
Ogre::SceneNode::ChildNodeIterator it = RootSceneNode->getChild("planetSphere")->getChildIterator();
while(it.hasMoreElements())
{
Ogre::Vector3 oldPosition = it.current()->second->getPosition();
it.current()->second->setPosition( oldPosition*0.98 );
Collision::SCheckCollisionAnswer ret = collision_tools->check_ray_collision(oldPosition, it.current()->second->getPosition(),0.4F);
if (ret.collided)
{
it.current()->second->setPosition(oldPosition);
}
it.getNext();
}
//other code like listen the keyboard
}
В начале я думал, что объекты должны сначала упасть на сферу. поэтому перед каждым кадром я определяю, столкнулся ли объект с чем-то (столкновение между кошкой и мышью я сделал в функции движения, поэтому я предполагаю, что если здесь произойдет столкновение, это будет объект и сфера.)
Интересно, слишком ли дорого делать обнаружение столкновений перед каждым кадром? Есть ли лучшее решение для этого? Спасибо!