diff --git a/apps/openmw/mwrender/pingpongcull.cpp b/apps/openmw/mwrender/pingpongcull.cpp index c3affa531a..2a77e263ec 100644 --- a/apps/openmw/mwrender/pingpongcull.cpp +++ b/apps/openmw/mwrender/pingpongcull.cpp @@ -47,7 +47,7 @@ namespace MWRender auto& sm = Stereo::Manager::instance(); auto view = sm.getEye(cv); int index = view == Stereo::Eye::Right ? 1 : 0; - auto projectionMatrix = sm.computeEyeViewOffset(index) * sm.computeEyeProjection(index, true); + auto projectionMatrix = sm.computeEyeProjection(index, true); postProcessor->getStateUpdater()->setProjectionMatrix(projectionMatrix); } diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 7e9d1c0866..21434462c4 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -118,14 +118,14 @@ namespace MWRender { auto* uProjectionMatrix = stateset->getUniform("projectionMatrix"); if (uProjectionMatrix) - uProjectionMatrix->set(Stereo::Manager::instance().computeEyeViewOffset(0) * Stereo::Manager::instance().computeEyeProjection(0, SceneUtil::AutoDepth::isReversed())); + uProjectionMatrix->set(Stereo::Manager::instance().computeEyeProjection(0, SceneUtil::AutoDepth::isReversed())); } void applyRight(osg::StateSet* stateset, osgUtil::CullVisitor* nv) override { auto* uProjectionMatrix = stateset->getUniform("projectionMatrix"); if (uProjectionMatrix) - uProjectionMatrix->set(Stereo::Manager::instance().computeEyeViewOffset(1) * Stereo::Manager::instance().computeEyeProjection(1, SceneUtil::AutoDepth::isReversed())); + uProjectionMatrix->set(Stereo::Manager::instance().computeEyeProjection(1, SceneUtil::AutoDepth::isReversed())); } void setProjectionMatrix(const osg::Matrixf& projectionMatrix) diff --git a/apps/openmw/mwrender/skyutil.cpp b/apps/openmw/mwrender/skyutil.cpp index 5971e50571..76c47931fd 100644 --- a/apps/openmw/mwrender/skyutil.cpp +++ b/apps/openmw/mwrender/skyutil.cpp @@ -645,22 +645,14 @@ namespace MWRender auto& sm = Stereo::Manager::instance(); auto* projectionMatrixUniform = stateset->getUniform("projectionMatrix"); auto projectionMatrix = sm.computeEyeProjection(0, true); - auto viewOffsetMatrix = sm.computeEyeViewOffset(0); - for (int col : {0, 1, 2}) - viewOffsetMatrix(3, col) = 0; - - projectionMatrixUniform->set(viewOffsetMatrix * projectionMatrix); + projectionMatrixUniform->set(projectionMatrix); } void applyRight(osg::StateSet* stateset, osgUtil::CullVisitor* /*cv*/) override { auto& sm = Stereo::Manager::instance(); auto* projectionMatrixUniform = stateset->getUniform("projectionMatrix"); auto projectionMatrix = sm.computeEyeProjection(1, true); - auto viewOffsetMatrix = sm.computeEyeViewOffset(1); - for (int col : {0, 1, 2}) - viewOffsetMatrix(3, col) = 0; - - projectionMatrixUniform->set(viewOffsetMatrix * projectionMatrix); + projectionMatrixUniform->set(projectionMatrix); } private: diff --git a/components/stereo/stereomanager.cpp b/components/stereo/stereomanager.cpp index 2c4b8a35e6..392523b3da 100644 --- a/components/stereo/stereomanager.cpp +++ b/components/stereo/stereomanager.cpp @@ -71,14 +71,14 @@ namespace Stereo { auto* uProjectionMatrix = stateset->getUniform("projectionMatrix"); if (uProjectionMatrix) - uProjectionMatrix->set(mManager->computeEyeViewOffset(0) * mManager->computeEyeProjection(0, SceneUtil::AutoDepth::isReversed())); + uProjectionMatrix->set(mManager->computeEyeProjection(0, SceneUtil::AutoDepth::isReversed())); } void applyRight(osg::StateSet* stateset, osgUtil::CullVisitor* nv) override { auto* uProjectionMatrix = stateset->getUniform("projectionMatrix"); if (uProjectionMatrix) - uProjectionMatrix->set(mManager->computeEyeViewOffset(1) * mManager->computeEyeProjection(1, SceneUtil::AutoDepth::isReversed())); + uProjectionMatrix->set(mManager->computeEyeProjection(1, SceneUtil::AutoDepth::isReversed())); } private: @@ -245,23 +245,23 @@ namespace Stereo osg::Matrixd computeLeftEyeProjection(const osg::Matrixd& projection) const override { (void)projection; - return mManager->computeEyeViewOffset(0) * mManager->computeEyeProjection(0, false); + return mManager->computeEyeProjection(0, false); } osg::Matrixd computeLeftEyeView(const osg::Matrixd& view) const override { - return view; + return view * mManager->computeEyeViewOffset(0); } osg::Matrixd computeRightEyeProjection(const osg::Matrixd& projection) const override { (void)projection; - return mManager->computeEyeViewOffset(1) * mManager->computeEyeProjection(1, false); + return mManager->computeEyeProjection(1, false); } osg::Matrixd computeRightEyeView(const osg::Matrixd& view) const override { - return view; + return view * mManager->computeEyeViewOffset(1); } Manager* mManager; @@ -368,8 +368,8 @@ namespace Stereo mFrustumManager->update( { - mViewOffsetMatrix[0] * mProjectionMatrix[0], - mViewOffsetMatrix[1] * mProjectionMatrix[1] + mProjectionMatrix[0], + mProjectionMatrix[1] }); }