【发布时间】:2015-05-05 15:27:58
【问题描述】:
我现在正在学习 Ogre 进行 3D 编程。
在我的场景中,现在只有三个实体,一个球体、一只老鼠和一只猫。猫在球体上奔跑。
由于我的场景很简单,所以我使用了简单的“Minimal Collision Detection”(http://www.ogre3d.org/forums/viewtopic.php?f=5&t=80829),按照它的说明性能还可以。
在我使用碰撞检测之前,fps 为 60(默认为最大值),使用它后,fps 下降到 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
}
一开始我认为物体需要先落在球体上。所以在每一帧之前,我会检测物体是否与某物发生碰撞(我在运动功能中所做的猫和老鼠之间的碰撞,所以我假设如果在这里发生碰撞,那就是物体和球体。)
我想知道在每帧之前进行碰撞检测是否太昂贵,有没有更好的解决方案?谢谢!
【问题讨论】:
-
我在碰撞检测(当然还有这个库)方面的经验有限,但我有两个建议要考虑。首先,我会检查以确保您确实只有您期望的节点数量。如果您以某种方式获得了更多,那么您发布的内容可能并不明显。其次,如果基于人脸(而不是边界框)进行碰撞检测,对象几何的复杂性确实会增加碰撞检测的时间。您可能想查看对象的复杂性,看看更简单的对象是否能提供更好的性能。
标签: 3d collision-detection collision ogre bulletphysics