2014-04-20 40 views
0

我对食人魔是新手,已阅读基本教程,但无法理解如何使用鼠标滚轮缩放创建轨道摄像机。如何创建具有缩放功能的轨道摄像机

这里是我的相机代码

// Create the scene node(orbit camera) 
node = mSceneMgr->getRootSceneNode()->createChildSceneNode("orbit", Ogre::Vector3(0, 100, -150)); 
node->attachObject(mCamera); 

// create the second camera node(freecam) 
node = mSceneMgr->getRootSceneNode()->createChildSceneNode("free", Ogre::Vector3(0, 100, 400)); 

// create the third camera node (3rd person robot cam) 
node = mSceneMgr->getRootSceneNode()->createChildSceneNode("robocam", Ogre::Vector3(0, 100, -80)); 

这里是我的按键功能

bool BasicTutorial05::processUnbufferedInput(const Ogre::FrameEvent& evt) 
{ 
    Ogre::Vector3 transVector1 = Ogre::Vector3::ZERO; 
    if (cam1 == true)//when cam 1 is selected, bool cam1 will be true; 
    { 
     if (mKeyboard->isKeyDown(OIS::KC_S)) 
     { 
      mSceneMgr->getSceneNode("orbit")->pitch(Ogre::Radian(-0.012f)); 
     } 
     if (mKeyboard->isKeyDown(OIS::KC_W)) 
     { 
      mSceneMgr->getSceneNode("orbit")->pitch(Ogre::Radian(0.012f)); 
     } 
     if (mKeyboard->isKeyDown(OIS::KC_A)) 
     { 
      mSceneMgr->getSceneNode("orbit")->yaw(Ogre::Radian(0.012f)); 
     } 
     if (mKeyboard->isKeyDown(OIS::KC_D)) 
     { 
      mSceneMgr->getSceneNode("orbit")->yaw(Ogre::Radian(-0.012f)); 
     } 
    } 
    mSceneMgr->getSceneNode("orbit")->translate(transVector1 *evt.timeSinceLastFrame,  Ogre::Node::TS_LOCAL); 
} 

和鼠标滚轮缩放

//zooming for orbit camera 
Ogre::Vector3 transVector2 = Ogre::Vector3::ZERO; 
if (mMouse->getMouseState().Z.rel != 0){ 
    transVector2.z = -mMouse->getMouseState().Z.rel; 
} 

,但我可以能够分拣轨道绕相机的地方,但只有当我使用轮子滚动缩放,而不是围绕点i旋转t在相机所在的位置旋转。 我该如何改变它只在某一点旋转?

+0

...以及您的问题在哪里? –

+0

我该如何改变它只在某一点旋转?目前它有点旋转在相机的位置,但是当我使用鼠标滚轮缩放时,它会旋转相机所在的位置。 – user2640299

回答

0

为您的相机创建两个节点 - 第一个是target,它放置在您想要旋转的位置。

第二个节点应该在距第一个节点一定距离处创建。您应该将其附加为target的子项并将相机连接到此节点。最后,你应该把你的相机对准目标节点(第一个)。

使用此设置,您只需将目标节点放在您感兴趣的位置,然后根据需要旋转它。相机的位置将跟随目标,因为它是他的孩子。通过将摄像机节点移近目标节点,您可以更改缩放级别。