1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-02-01 05:15:33 +00:00

fix sky position when reflection is enabled, fix delay in sky reflection

This commit is contained in:
scrawl 2012-08-15 17:56:24 +02:00 committed by greye
parent 575244bd35
commit b97b3d7b71
2 changed files with 7 additions and 7 deletions

View file

@ -280,7 +280,7 @@ SkyManager::SkyManager (SceneNode* pMwRoot, Camera* pCamera)
, mMoonRed(false) , mMoonRed(false)
{ {
mSceneMgr = pMwRoot->getCreator(); mSceneMgr = pMwRoot->getCreator();
mRootNode = mCamera->getParentSceneNode()->createChildSceneNode(); mRootNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
mRootNode->pitch(Degree(-90)); // convert MW to ogre coordinates mRootNode->pitch(Degree(-90)); // convert MW to ogre coordinates
mRootNode->setInheritOrientation(false); mRootNode->setInheritOrientation(false);
} }
@ -405,7 +405,8 @@ void SkyManager::update(float duration)
{ {
if (!mEnabled) return; if (!mEnabled) return;
mRootNode->setPosition(mCamera->getPosition()); mCamera->getParentSceneNode ()->needUpdate ();
mRootNode->setPosition(mCamera->getDerivedPosition());
// UV Scroll the clouds // UV Scroll the clouds
mCloudAnimationTimer += duration * mCloudSpeed * (MWBase::Environment::get().getWorld()->getTimeScaleFactor()/30.f); mCloudAnimationTimer += duration * mCloudSpeed * (MWBase::Environment::get().getWorld()->getTimeScaleFactor()/30.f);
@ -668,12 +669,13 @@ Ogre::SceneNode* SkyManager::getSunNode()
void SkyManager::setSkyPosition(const Ogre::Vector3& position) void SkyManager::setSkyPosition(const Ogre::Vector3& position)
{ {
mRootNode->_setDerivedPosition(position); mRootNode->setPosition(position);
} }
void SkyManager::resetSkyPosition() void SkyManager::resetSkyPosition()
{ {
mRootNode->setPosition(0,0,0); mCamera->getParentSceneNode ()->needUpdate ();
mRootNode->setPosition(mCamera->getDerivedPosition());
} }
void SkyManager::scaleSky(float scale) void SkyManager::scaleSky(float scale)

View file

@ -207,6 +207,7 @@ void Water::preRenderTargetUpdate(const RenderTargetEvent& evt)
{ {
if (evt.source == mReflectionTarget) if (evt.source == mReflectionTarget)
{ {
mCamera->getParentSceneNode ()->needUpdate ();
mReflectionCamera->setOrientation(mCamera->getDerivedOrientation()); mReflectionCamera->setOrientation(mCamera->getDerivedOrientation());
mReflectionCamera->setPosition(mCamera->getDerivedPosition()); mReflectionCamera->setPosition(mCamera->getDerivedPosition());
mReflectionCamera->setNearClipDistance(mCamera->getNearClipDistance()); mReflectionCamera->setNearClipDistance(mCamera->getNearClipDistance());
@ -215,11 +216,9 @@ void Water::preRenderTargetUpdate(const RenderTargetEvent& evt)
mReflectionCamera->setFOVy(mCamera->getFOVy()); mReflectionCamera->setFOVy(mCamera->getFOVy());
mReflectionRenderActive = true; mReflectionRenderActive = true;
/// \todo the reflection render (and probably all renderingmanager-updates) lag behind 1 camera frame for some reason
Vector3 pos = mCamera->getRealPosition(); Vector3 pos = mCamera->getRealPosition();
pos.y = mTop*2 - pos.y; pos.y = mTop*2 - pos.y;
mSky->setSkyPosition(pos); mSky->setSkyPosition(pos);
mSky->scaleSky(mCamera->getFarClipDistance() / 50.f);
mReflectionCamera->enableReflection(mWaterPlane); mReflectionCamera->enableReflection(mWaterPlane);
} }
} }
@ -229,7 +228,6 @@ void Water::postRenderTargetUpdate(const RenderTargetEvent& evt)
if (evt.source == mReflectionTarget) if (evt.source == mReflectionTarget)
{ {
mSky->resetSkyPosition(); mSky->resetSkyPosition();
mSky->scaleSky(1);
mReflectionCamera->disableReflection(); mReflectionCamera->disableReflection();
mReflectionCamera->disableCustomNearClipPlane(); mReflectionCamera->disableCustomNearClipPlane();
mReflectionRenderActive = false; mReflectionRenderActive = false;