mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-04 07:56:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			61 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			61 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
 |