How can I retain my rotational results when I switch to a unit that isn't at 0,0,0?
A = Main Node
B = Entity Node
C = Camera Node
A
|\
B C
Detach code:
Code: Select all
mMainRollNode->removeChild(camNode);
mScnMgr->getRootSceneNode()->addChild(camNode);
camPitchNode->setAutoTracking(false);
Code: Select all
Vector3 oldPosition = mMainNode->getPosition();
Quaternion oldOrient = mMainNode->getOrientation();
mScnMgr->getRootSceneNode()->removeAndDestroyChild("MainNode");
mMainNode= mScnMgr->getRootSceneNode()->createChildSceneNode("MainNode");
mMainPitchNode= mMainNode->createChildSceneNode();
mMainRollNode= mMainPitchNode->createChildSceneNode();
mMainNode->setPosition(oldPosition);
mMainNode->setOrientation(oldOrient);
mScnMgr->getRootSceneNode()->removeChild(mNode);
mMainRollNode->addChild(mNode);
mNode->setPosition(Vector3(oldPosition.x, oldPosition.y, oldPosition.z));
Vector3 newCamPosition = Vector3(
mMainNode->getPosition().x,
mMainNode->getPosition().y,
mMainNode->getPosition().z + 500);
mScnMgr->getRootSceneNode()->removeChild(camNode);
mMainRollNode->addChild(camNode);
camPitchNode->setAutoTracking(true, mNode);
camNode->setPosition(newCamPosition);
camNode->setFixedYawAxis(false);
Following changes got the intended results.
Code: Select all
mNode->_setDerivedPosition(Vector3(oldPosition.x, oldPosition.y, oldPosition.z));
Vector3 newCamPosition = Vector3(
mNode->getPosition().x,
mNode->getPosition().y,
mNode->getPosition().z + 500);