天天看點

NxOgre 筆記04

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

繼續閱讀