You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openmw/components/sceneutil/positionattitudetransform.hpp

62 lines
1.8 KiB
C++

#ifndef OPENMW_COMPONENTS_POSITIONATTITUDE_TRANSFORM_H
#define OPENMW_COMPONENTS_POSITIONATTITUDE_TRANSFORM_H
#include <osg/Transform>
namespace SceneUtil
{
/// @brief A customized version of osg::PositionAttitudeTransform optimized for speed.
/// Uses single precision values. Also removed _pivotPoint which we don't need.
class PositionAttitudeTransform : public osg::Transform
{
public:
PositionAttitudeTransform();
PositionAttitudeTransform(
const PositionAttitudeTransform& pat, const osg::CopyOp& copyop = osg::CopyOp::SHALLOW_COPY)
: Transform(pat, copyop)
, _position(pat._position)
, _attitude(pat._attitude)
, _scale(pat._scale)
{
}
META_Node(SceneUtil, PositionAttitudeTransform)
inline void setPosition(const osg::Vec3f& pos)
{
_position = pos;
dirtyBound();
}
inline const osg::Vec3f& getPosition() const { return _position; }
inline void setAttitude(const osg::Quat& quat)
{
_attitude = quat;
dirtyBound();
}
inline const osg::Quat& getAttitude() const { return _attitude; }
inline void setScale(const osg::Vec3f& scale)
{
_scale = scale;
dirtyBound();
}
inline const osg::Vec3f& getScale() const { return _scale; }
bool computeLocalToWorldMatrix(osg::Matrix& matrix, osg::NodeVisitor* nv) const override;
bool computeWorldToLocalMatrix(osg::Matrix& matrix, osg::NodeVisitor* nv) const override;
protected:
virtual ~PositionAttitudeTransform() {}
osg::Vec3f _position;
osg::Quat _attitude;
osg::Vec3f _scale;
};
}
#endif