diff --git a/apps/openmw/mwrender/camera.cpp b/apps/openmw/mwrender/camera.cpp index f8f954bf3f..59b320b65e 100644 --- a/apps/openmw/mwrender/camera.cpp +++ b/apps/openmw/mwrender/camera.cpp @@ -302,34 +302,13 @@ namespace MWRender } } - float Camera::getHeight() - { - if(mCamera->isParentTagPoint()) - { - Ogre::TagPoint *tag = static_cast(mCamera->getParentNode()); - return tag->_getFullLocalTransform().getTrans().z; - } - return mCamera->getParentNode()->getPosition().z; - } - - bool Camera::getPosition(Ogre::Vector3 &player, Ogre::Vector3 &camera) + void Camera::getPosition(Ogre::Vector3 &focal, Ogre::Vector3 &camera) { mCamera->getParentSceneNode()->needUpdate(true); + camera = mCamera->getRealPosition(); - player = mTrackingPtr.getRefData().getBaseNode()->getPosition(); - - return mFirstPersonView && !mVanity.enabled && !mPreviewMode; - } - - Ogre::Vector3 Camera::getPosition() - { - return mTrackingPtr.getRefData().getBaseNode()->getPosition(); - } - - void Camera::getSightAngles(float &pitch, float &yaw) - { - pitch = mMainCam.pitch; - yaw = mMainCam.yaw; + focal = Ogre::Vector3((mCamera->getParentNode()->_getFullTransform() * + Ogre::Vector4(0.0f, 0.0f, 0.0f, 1.0f)).ptr()); } void Camera::togglePlayerLooking(bool enable) diff --git a/apps/openmw/mwrender/camera.hpp b/apps/openmw/mwrender/camera.hpp index 3418efcc91..2993bad052 100644 --- a/apps/openmw/mwrender/camera.hpp +++ b/apps/openmw/mwrender/camera.hpp @@ -93,14 +93,8 @@ namespace MWRender void setAnimation(NpcAnimation *anim); - float getHeight(); - - /// Stores player and camera world positions in passed arguments - /// \return true if camera at the eye-place - bool getPosition(Ogre::Vector3 &player, Ogre::Vector3 &camera); - Ogre::Vector3 getPosition(); - - void getSightAngles(float &pitch, float &yaw); + /// Stores focal and camera world positions in passed arguments + void getPosition(Ogre::Vector3 &focal, Ogre::Vector3 &camera); void togglePlayerLooking(bool enable); diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 19518c2c45..6cfe87ac2c 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -323,18 +323,18 @@ void RenderingManager::update (float duration, bool paused) // player position MWWorld::RefData &data = player.getRefData(); - float *_playerPos = data.getPosition().pos; - Ogre::Vector3 playerPos(_playerPos[0], _playerPos[1], _playerPos[2]); + Ogre::Vector3 playerPos(data.getPosition().pos); - Ogre::Vector3 orig, dest; - if(!mCamera->getPosition(orig, dest)) + mCamera->setCameraDistance(); + if(!mCamera->isFirstPerson()) { - orig.z += mCamera->getHeight() * mRootNode->getScale().z; + Ogre::Vector3 orig, dest; + mCamera->getPosition(orig, dest); btVector3 btOrig(orig.x, orig.y, orig.z); btVector3 btDest(dest.x, dest.y, dest.z); - std::pair test = mPhysicsEngine->sphereCast(mRendering.getCamera()->getNearClipDistance()*2.5, btOrig, btDest); - if (test.first) + std::pair test = mPhysicsEngine->sphereCast(mRendering.getCamera()->getNearClipDistance()*2.5, btOrig, btDest); + if(test.first) mCamera->setCameraDistance(test.second * orig.distance(dest), false, false); }