diff --git a/apps/openmw/mwrender/rotatecontroller.cpp b/apps/openmw/mwrender/rotatecontroller.cpp index 61a2a2628a..5d9339ae09 100644 --- a/apps/openmw/mwrender/rotatecontroller.cpp +++ b/apps/openmw/mwrender/rotatecontroller.cpp @@ -40,7 +40,8 @@ namespace MWRender osg::Quat orient = worldOrient * mRotate * worldOrientInverse * matrix.getRotate(); matrix.setRotate(orient); - matrix.setTrans(matrix.getTrans() + worldOrientInverse * mOffset); + + matrix *= osg::Matrix::scale(getParentScale(node)); node->setMatrix(matrix); @@ -71,4 +72,14 @@ namespace MWRender return worldOrient; } + osg::Vec3d RotateController::getParentScale(osg::Node* node) + { + osg::NodePathList nodepaths = node->getParentalNodePaths(mRelativeTo); + if (!nodepaths.empty()) + { + return osg::computeLocalToWorld(nodepaths[0]).getScale(); + } + return osg::Vec3d(1.0, 1.0, 1.0); + } + } diff --git a/apps/openmw/mwrender/rotatecontroller.hpp b/apps/openmw/mwrender/rotatecontroller.hpp index 87bf0adfe1..d19b133b28 100644 --- a/apps/openmw/mwrender/rotatecontroller.hpp +++ b/apps/openmw/mwrender/rotatecontroller.hpp @@ -28,6 +28,7 @@ namespace MWRender protected: osg::Quat getWorldOrientation(osg::Node* node); + osg::Vec3d getParentScale(osg::Node* node); bool mEnabled; osg::Vec3f mOffset;