mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-04 03:40:14 +00:00
Slight improvement to camera placement.
This commit is contained in:
parent
bee8977e45
commit
a0fb242bf8
@ -3,6 +3,7 @@
|
|||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
|
|
||||||
#include <osg/Camera>
|
#include <osg/Camera>
|
||||||
|
#include <osg/Drawable>
|
||||||
#include <osg/Matrixd>
|
#include <osg/Matrixd>
|
||||||
#include <osg/Quat>
|
#include <osg/Quat>
|
||||||
|
|
||||||
@ -541,4 +542,31 @@ namespace CSVRender
|
|||||||
|
|
||||||
getCamera()->setViewMatrixAsLookAt(mCenter + offset, mCenter, up);
|
getCamera()->setViewMatrixAsLookAt(mCenter + offset, mCenter, up);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CameraComputeBoundsVisitor::CameraComputeBoundsVisitor(unsigned int mask)
|
||||||
|
: mMask(mask)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int CameraComputeBoundsVisitor::getMask() const
|
||||||
|
{
|
||||||
|
return mMask;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CameraComputeBoundsVisitor::setMask(unsigned int value)
|
||||||
|
{
|
||||||
|
mMask = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CameraComputeBoundsVisitor::apply(osg::Drawable& drawable)
|
||||||
|
{
|
||||||
|
if (drawable.getNodeMask() & mMask)
|
||||||
|
ComputeBoundsVisitor::apply(drawable);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CameraComputeBoundsVisitor::apply(osg::Transform& transform)
|
||||||
|
{
|
||||||
|
if (transform.getNodeMask() & mMask)
|
||||||
|
ComputeBoundsVisitor::apply(transform);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include <osg/BoundingBox>
|
#include <osg/BoundingBox>
|
||||||
|
#include <osg/ComputeBoundsVisitor>
|
||||||
#include <osg/ref_ptr>
|
#include <osg/ref_ptr>
|
||||||
#include <osg/Vec3d>
|
#include <osg/Vec3d>
|
||||||
|
|
||||||
@ -144,6 +145,21 @@ namespace CSVRender
|
|||||||
double mOrbitSpeed;
|
double mOrbitSpeed;
|
||||||
double mOrbitSpeedMult;
|
double mOrbitSpeedMult;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class CameraComputeBoundsVisitor : public osg::ComputeBoundsVisitor
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CameraComputeBoundsVisitor(unsigned int mask);
|
||||||
|
|
||||||
|
unsigned int getMask() const;
|
||||||
|
void setMask(unsigned int mask);
|
||||||
|
|
||||||
|
void apply(osg::Drawable& drawable);
|
||||||
|
void apply(osg::Transform& transform);
|
||||||
|
|
||||||
|
private:
|
||||||
|
unsigned int mMask;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
#include <osgViewer/ViewerEventHandlers>
|
#include <osgViewer/ViewerEventHandlers>
|
||||||
#include <osg/LightModel>
|
#include <osg/LightModel>
|
||||||
#include <osg/BoundingBox>
|
#include <osg/BoundingBox>
|
||||||
#include <osg/ComputeBoundsVisitor>
|
|
||||||
|
|
||||||
#include <osgGA/TrackballManipulator>
|
#include <osgGA/TrackballManipulator>
|
||||||
#include <osgGA/FirstPersonManipulator>
|
#include <osgGA/FirstPersonManipulator>
|
||||||
@ -315,7 +314,7 @@ void SceneWidget::update(double dt)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
osg::ComputeBoundsVisitor boundsVisitor;
|
CameraComputeBoundsVisitor boundsVisitor(Mask_Reference | Mask_Terrain);
|
||||||
osg::BoundingBox &boundingBox(boundsVisitor.getBoundingBox());
|
osg::BoundingBox &boundingBox(boundsVisitor.getBoundingBox());
|
||||||
|
|
||||||
mRootNode->accept(boundsVisitor);
|
mRootNode->accept(boundsVisitor);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user