initial
This commit is contained in:
147
public/movieobjects/dmeaxissystem.h
Normal file
147
public/movieobjects/dmeaxissystem.h
Normal file
@@ -0,0 +1,147 @@
|
||||
//============ Copyright (c) Valve Corporation, All rights reserved. ==========
|
||||
//
|
||||
// This is patterned after FbxAxisSystem
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
|
||||
#ifndef DMEAXISSYSTEM_H
|
||||
#define DMEAXISSYSTEM_H
|
||||
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
|
||||
|
||||
//=============================================================================
|
||||
//
|
||||
// CDmeAxisSystem, an unambiguous definition of the axis system. Previously
|
||||
// the terms Y Up and Z Up got thrown around a lot but they do not unambiguously
|
||||
// specify a coordinate system.
|
||||
//
|
||||
// To define an axis system both the up axis and the parity of the axis system
|
||||
// need to be specified. The parity is not an independent variable, it depends
|
||||
// on the value of the up axis specified. Whichever axis is specified as the
|
||||
// up axis leaves two remaining axes and even implies the first remaining
|
||||
// axis, in alphabetical order, is the Forward axis.
|
||||
//
|
||||
// The Valve engine coordinate system has traditionally been +Z Up and
|
||||
// +X as the forward axis. By specifying +Z as the up axis that leaves
|
||||
// X & Y, since X is desired, that's even parity. It would be defined
|
||||
// in Axis, Parity as:
|
||||
//
|
||||
// pDmeAxisSystem->Init( CDmeAxisSystem::AS_AXIS_Z, CDmeAxisSystem::AS_PARITY_EVEN );
|
||||
//
|
||||
// By default, Maya's coordinate system is +Y Up with +Z forward. Taking
|
||||
// +Y as up leaves X & Z, since Z is 2nd, that's odd parity. i.e.
|
||||
//
|
||||
// pDmeAxisSystem->Init( CDmeAxisSystem::AS_AXIS_Y, CDmeAxisSystem::AS_PARITY_ODD );
|
||||
//
|
||||
//=============================================================================
|
||||
class CDmeAxisSystem : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeAxisSystem, CDmElement );
|
||||
|
||||
public:
|
||||
enum Axis_t
|
||||
{
|
||||
AS_AXIS_NZ = -3,
|
||||
AS_AXIS_NY = -2,
|
||||
AS_AXIS_NX = -1,
|
||||
AS_AXIS_X = 1,
|
||||
AS_AXIS_Y = 2,
|
||||
AS_AXIS_Z = 3
|
||||
};
|
||||
|
||||
enum ForwardParity_t
|
||||
{
|
||||
AS_PARITY_NODD = -2,
|
||||
AS_PARITY_NEVEN = -1,
|
||||
AS_PARITY_EVEN = 1,
|
||||
AS_PARITY_ODD = 2
|
||||
};
|
||||
|
||||
enum CoordSys_t
|
||||
{
|
||||
AS_RIGHT_HANDED = 0,
|
||||
AS_LEFT_HANDED = 1
|
||||
};
|
||||
|
||||
enum PredefinedAxisSystem
|
||||
{
|
||||
AS_INVALID = -1, // Invalid
|
||||
AS_VALVE_ENGINE, // Up: +Z, Forward: +X
|
||||
AS_SMD, // Up: +Z, Forward: -Y
|
||||
AS_MAYA_YUP, // Up: +Y, Forward: +Z
|
||||
AS_MAYA_ZUP, // Up: +Z, Forward: -Y
|
||||
AS_MODO_YUP, // Up: +Y, Forward: +Z
|
||||
AS_3DSMAX // Up: +Z, Forward: -Y
|
||||
};
|
||||
|
||||
bool Init( Axis_t eUpAxis, ForwardParity_t eForwardParity, CoordSys_t eCoordSys = AS_RIGHT_HANDED );
|
||||
bool Init( PredefinedAxisSystem nPredefinedAxisSystem );
|
||||
|
||||
// Returns true if the specified eUpAxis, eForward and eCoordSys are all valid values together
|
||||
static bool IsValid( Axis_t eUpAxis, ForwardParity_t eForwardAxis, CoordSys_t eCoordSys = AS_RIGHT_HANDED );
|
||||
bool IsValid() const;
|
||||
|
||||
// Returns the upAxis, forwardParity & coordSys for the specified predefined axisSystem
|
||||
static bool GetPredefinedAxisSystem( Axis_t &eUpAxis, ForwardParity_t &eForwardParity, CoordSys_t &eCoordSys, PredefinedAxisSystem ePredefinedAxisSystem );
|
||||
|
||||
// Specifies whether this CDmeAxisSystem is the same as the predefined axis system specified
|
||||
bool IsEqual( PredefinedAxisSystem ePredefinedAxisSystem ) const;
|
||||
|
||||
// Returns one of [ AS_AXIS_NX, AS_AXIS_NY, AS_AXIS_NZ, AS_AXIS_X, AS_AXIS_Y, AS_AXIS_Z ] from m_nUpAxis
|
||||
Axis_t GetUpAxis() const;
|
||||
|
||||
// Returns one of [ AS_PARITY_NEVEN, AS_PARITY_NODD, AS_PARITY_EVEN, AS_PARITY_ODD ] from m_nForwardParity
|
||||
ForwardParity_t GetForwardParity() const;
|
||||
|
||||
// Returns one of [ AS_LEFT_HANDED, AS_RIGHT_HANDED ] from m_nCoordSys
|
||||
CoordSys_t GetCoordSys() const;
|
||||
|
||||
// Get the matrix to convert the identity to this axis system
|
||||
static void ComputeMatrix( matrix3x4a_t &mMatrix, PredefinedAxisSystem ePredefinedAxisSystem );
|
||||
|
||||
// Get the matrix to convert data from the specified axis system to the specified axis system
|
||||
static void GetConversionMatrix(
|
||||
matrix3x4a_t &mMat,
|
||||
PredefinedAxisSystem eFromAxisSystem,
|
||||
PredefinedAxisSystem eToAxisSystem );
|
||||
|
||||
static void GetConversionMatrix( matrix3x4a_t &mMat,
|
||||
Axis_t eFromUpAxis, ForwardParity_t eFromForwardParity,
|
||||
Axis_t eToUpAxis, ForwardParity_t eToForwardParity );
|
||||
|
||||
static void GetConversionMatrix( matrix3x4a_t &mMat,
|
||||
Axis_t eFromUpAxis, ForwardParity_t eFromForwardParity, CoordSys_t eFromCoordSys,
|
||||
Axis_t eToUpAxis, ForwardParity_t eToForwardParity, CoordSys_t eToCoordSys );
|
||||
|
||||
static CUtlString GetAxisString(
|
||||
Axis_t eUpAxis,
|
||||
ForwardParity_t eForwardParity,
|
||||
CoordSys_t eCoordSys );
|
||||
|
||||
protected:
|
||||
// Returns one of [ AS_AXIS_X, AS_AXIS_Y, AS_AXIS_Z ] along with one of [ -1, 1 ] to indicate the sign
|
||||
Axis_t GetAbsUpAxisAndSign( int &nSign ) const;
|
||||
|
||||
// Returns one of [ AS_PARITY_EVEN, AS_PARITY_ODD ] along with one of [ -1, 1 ] to indicate the sign
|
||||
ForwardParity_t GetAbsForwardParityAndSign( int &nSign ) const;
|
||||
|
||||
// Returns one of [ AS_AXIS_X, AS_AXIS_Y, AS_AXIS_Z ] along with one of [ -1, 1 ] to indicate the sign
|
||||
Axis_t ComputeAbsForwardAxisAndSign( int &nSign ) const;
|
||||
|
||||
// Returns one of [ AS_AXIS_X, AS_AXIS_Y, AS_AXIS_Z ] along with one of [ -1, 1 ] to indicate the sign
|
||||
Axis_t ComputeLeftAxis( int &nSign ) const;
|
||||
|
||||
// Computes the matrix for the specified upAxis, forwardParity and coordSys values
|
||||
static void ComputeMatrix( matrix3x4a_t &mMatrix, Axis_t eUpAxis, ForwardParity_t eForwardParity, CoordSys_t eCoordSys );
|
||||
|
||||
CDmaVar< int > m_nUpAxis; // [ +/- AS_AXIS_X, +/- AS_AXIS_Y, +/- AS_AXIS_Z ]
|
||||
CDmaVar< int > m_nForwardParity; // [ +/- AS_PARITY_EVEN, +/- AS_PARITY_ODD ]
|
||||
CDmaVar< int > m_nCoordSys; // [ AS_RIGHT_HANDED, AS_LEFT_HANDED ]
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEAXISSYSTEM_H
|
||||
Reference in New Issue
Block a user