mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-03-03 16:49:54 +00:00
Better center picking for the Orbit Camera.
This commit is contained in:
parent
a0fb242bf8
commit
fbe9177f5d
1 changed files with 27 additions and 3 deletions
|
@ -7,6 +7,10 @@
|
||||||
#include <osg/Matrixd>
|
#include <osg/Matrixd>
|
||||||
#include <osg/Quat>
|
#include <osg/Quat>
|
||||||
|
|
||||||
|
#include <osgUtil/LineSegmentIntersector>
|
||||||
|
|
||||||
|
#include "mask.hpp"
|
||||||
|
|
||||||
namespace CSVRender
|
namespace CSVRender
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -481,10 +485,30 @@ namespace CSVRender
|
||||||
{
|
{
|
||||||
static const int DefaultStartDistance = 10000.f;
|
static const int DefaultStartDistance = 10000.f;
|
||||||
|
|
||||||
osg::Vec3d eye, up;
|
// Try to intelligently pick focus object
|
||||||
getCamera()->getViewMatrixAsLookAt(eye, mCenter, up, DefaultStartDistance);
|
osg::ref_ptr<osgUtil::LineSegmentIntersector> intersector (new osgUtil::LineSegmentIntersector(
|
||||||
|
osgUtil::Intersector::PROJECTION, osg::Vec3d(0, 0, 0), LocalForward));
|
||||||
|
|
||||||
mDistance = DefaultStartDistance;
|
intersector->setIntersectionLimit(osgUtil::LineSegmentIntersector::LIMIT_NEAREST);
|
||||||
|
osgUtil::IntersectionVisitor visitor(intersector);
|
||||||
|
|
||||||
|
visitor.setTraversalMask(Mask_Reference | Mask_Terrain);
|
||||||
|
|
||||||
|
getCamera()->accept(visitor);
|
||||||
|
|
||||||
|
osg::Vec3d eye, center, up;
|
||||||
|
getCamera()->getViewMatrixAsLookAt(eye, center, up, DefaultStartDistance);
|
||||||
|
|
||||||
|
if (intersector->getIntersections().begin() != intersector->getIntersections().end())
|
||||||
|
{
|
||||||
|
mCenter = intersector->getIntersections().begin()->getWorldIntersectPoint();
|
||||||
|
mDistance = (eye - center).length();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mCenter = center;
|
||||||
|
mDistance = DefaultStartDistance;
|
||||||
|
}
|
||||||
|
|
||||||
mInitialized = true;
|
mInitialized = true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue