我是食人魔的新手并已阅读基本教程,但无法理解如何使用鼠标滚轮缩放创建轨道摄像头。
这是我的相机代码
// 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;
}
但是我可以围绕相机所在的位置进行轨道运动,但只有当我使用滚轮滚动变焦时,而不是围绕它在相机所在位置旋转的点旋转。 如何更改它只在某一点旋转?
答案 0 :(得分:0)
为您的相机创建两个节点 - 第一个是target
,它位于您想要旋转的位置。
应该在距离第一个节点一定距离处创建第二个节点。您应该将其作为target
的子项附加,并将您的相机附加到此节点。最后,您应将相机对准目标节点(第一个)。
使用此设置,您只需将目标节点放在您感兴趣的位置并根据需要旋转它。摄像机位置将跟随目标,因为它是他的孩子。通过将摄像机节点移近目标节点,您可以更改缩放级别。