1. Volume是一個任意形狀的不可見的實體對象。并且不能動。常被用作trigger。
當一個實體對象進入/沒入/離開它時,會觸發一個程式指定的動作。
2. 在場景中建立一個Volume步驟
2.1 外形,比如,一個5x5x5的盒子
2.2 位置
2.3 一個Callback類的對象
2.4 回調行為(事件發生時調用onVolumeEvent())
NxOgre::Scene::createVolume(new NxOgre::Box(5),
NxOgre::Matrix44(NxOgre::Vec3(0,0,0)),
this,NxOgre::Enums::VolumeCollisionType_All);
3. 建立當一個Actor觸發的回調函數
void onVolumeEvent(NxOgre::Volume* volume, NxOgre::Shape* volumeShape, NxOgre::RigidBody* rigidBody,
NxOgre::Shape* rigidBodyShape, unsigned int collisionEvent)
{
if(collisionEvent == NxOgre::Enums::VolumeCollisionType_OnEnter)
{
NxOgre::Actor* actor = static_cast<NxOgre::Actor*>(rigidBody);
float y = (9.81 * actor->getMass()) // 抵消重力
+ (-actor->getLinearVelocity().y * actor->getMass()) // 抵消豎直速度
+ (10 - actor->getGlobalPosition().y * actor->getMass()); // 添加一些向上移動的力
actor->addForce(NxOgre::Vec3(0, y, 0), NxOgre::Enums::ForceMode_Impulse);
}
}
教程原文
http://www.ogre3d.org/wiki/index.php/BloodyMess_Tutorial_4