Как создать орбитальную камеру с функцией масштабирования

Я новичок в ogre и прочитал базовые руководства, но не могу понять, как создать орбитальную камеру с масштабированием колесиком мыши.

вот код моей камеры

// 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;
}

но я могу как бы вращаться вокруг точки, где находится камера, но только когда я использую масштабирование с помощью колесика прокрутки, вместо того, чтобы вращаться вокруг точки, она вращается там, где находится камера. Как мне изменить его, чтобы он вращался только в точке?


person user2640299    schedule 20.04.2014    source источник
comment
...и где твой вопрос?   -  person Roger Rowland    schedule 20.04.2014
comment
Как мне изменить его, чтобы он вращался только в точке? в настоящее время он как бы вращается в точке, где находится камера, но когда я использую масштабирование колесиком мыши, он вращается в том месте, где находится камера.   -  person user2640299    schedule 20.04.2014


Ответы (1)


Создайте два узла для вашей камеры. Первый — это target, и он размещается в точке, вокруг которой вы хотите вращаться.

Второй узел должен быть создан на некотором расстоянии от первого. Вы должны прикрепить его как дочерний элемент target и прикрепить свою камеру к этому узлу. Наконец, вы должны направить камеру на целевой узел (первый).

С этой настройкой вам просто нужно поместить целевой узел в интересующую вас точку и повернуть его, как вы хотите. Положение камеры будет следовать за целью, потому что это его ребенок. И, переместив узел камеры ближе к целевому узлу, вы можете изменить уровень масштабирования.

person kolenda    schedule 24.04.2014