1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-02-23 21:09:42 +00:00
openmw/components/nifosg/matrixtransform.hpp
Capostrophic 46825e8a4d Move NIF record index back to a separate user object
This makes sure it's never erroneously optimized out. NodeIndexHolders don't need to be cloned as their record index is never supposed to be changed.
2020-07-26 09:57:43 +03:00

44 lines
1.5 KiB
C++

#ifndef OPENMW_COMPONENTS_NIFOSG_MATRIXTRANSFORM_H
#define OPENMW_COMPONENTS_NIFOSG_MATRIXTRANSFORM_H
#include <components/nif/niftypes.hpp>
#include <osg/MatrixTransform>
namespace NifOsg
{
class MatrixTransform : public osg::MatrixTransform
{
public:
MatrixTransform();
MatrixTransform(const Nif::Transformation &trafo);
MatrixTransform(const MatrixTransform &copy, const osg::CopyOp &copyop);
META_Node(NifOsg, MatrixTransform)
// Apply the current NIF rotation or scale to OSG matrix.
void applyCurrentRotation();
void applyCurrentScale();
// Apply the given rotation to OSG matrix directly and update NIF rotation matrix.
void updateRotation(const osg::Quat& rotation);
// Update current NIF scale and apply it to OSG matrix.
void updateScale(const float scale);
// Apply the given translation to OSG matrix.
void setTranslation(const osg::Vec3f& translation);
private:
// Hack: account for Transform differences between OSG and NIFs.
// OSG uses a 4x4 matrix, NIF's use a 3x3 rotationScale, float scale, and vec3 position.
// Decomposing the original components from the 4x4 matrix isn't possible, which causes
// problems when a KeyframeController wants to change only one of these components. So
// we store the scale and rotation components separately here.
float mScale{0.f};
Nif::Matrix3 mRotationScale;
};
}
#endif