All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
PODNode.h
1 // Copyright eeGeo Ltd (2012-2014), All Rights Reserved
2 
3 #pragma once
4 
5 #include "Types.h"
6 #include "VectorMathDecl.h"
7 #include <vector>
8 #include <string>
9 
10 namespace Eegeo
11 {
12  namespace IO
13  {
14  namespace POD
15  {
16  const int POD_NODE_NUM_OF_POSITION_ELEMENTS = 3;
17  const int POD_NODE_NUM_OF_ROTATION_ELEMENTS = 4;
18  const int POD_NODE_NUM_OF_SCALE_ELEMENTS = 7;
19  const int POD_NODE_NUM_OF_MATRIX_ELEMENTS = 16;
20 
21  class PODNode
22  {
23  public:
24  PODNode();
25 
26  void SetMeshId(const s32 meshId);
27  void SetName(const std::string &name);
28  void SetMaterialId(const s32 materialId);
29  void SetParentNodeId(const s32 parentNodeId);
30  void SetLocalMatrix(const m44& localMatrix);
31 
32  void SetAnimPositions(float* pAnimPositions, u32 numOfPositions);
33  void SetAnimPositionIndices(s32* pAnimPositionIndices, u32 numOfIndices);
34 
35  void SetAnimRotations(float* pAnimRotations, u32 numOfRotations);
36  void SetAnimRotationIndices(s32* pAnimRotationIndices, u32 numOfIndices);
37 
38  void SetAnimScales(float* pAnimScales, u32 numOfScales);
39  void SetAnimScaleIndices(s32* pAnimScaleIndices, u32 numOfIndices);
40 
41  void SetAnimMatrices(float* pAnimMatrices, u32 numOfMatrices);
42  void SetAnimMatrixIndices(s32* pAnimMatrixIndices, u32 numOfIndices);
43 
44  s32 GetMaterialId() const;
45  s32 GetParentNodeId() const;
46  s32 GetMeshId() const;
47  std::string GetName() const;
48 
49  u32 GetNumOfAnimPositions() const;
50  u32 GetNumOfAnimPositionFrames() const;
51  Eegeo::v3 GetAnimPosition(u32 positionIndex) const;
52  u32 GetNumOfAnimPositionIndices() const;
53  s32 GetAnimPositionIndex(u32 frameNumber) const;
54  Eegeo::v3 GetAnimPositionForFrame(u32 frameNumber) const;
55 
56  u32 GetNumOfAnimRotations() const;
57  u32 GetNumOfAnimRotationFrames() const;
58  Eegeo::Quaternion GetAnimRotation(u32 rotationIndex) const;
59  u32 GetNumOfAnimRotationIndices() const;
60  s32 GetAnimRotationIndex(u32 frameNumber) const;
61  Eegeo::Quaternion GetAnimRotationForFrame(u32 frameNumber) const;
62 
63  u32 GetNumOfAnimScales() const;
64  u32 GetNumOfAnimScaleFrames() const;
65  Eegeo::v3 GetAnimScale(u32 scaleIndex) const;
66  Eegeo::v3 GetAnimAxisScale(u32 scaleIndex) const;
67  float GetAnimStretchRotation(u32 scaleIndex) const;
68  u32 GetNumOfAnimScaleIndices() const;
69  s32 GetAnimScaleIndex(u32 frameNumber) const;
70  Eegeo::v3 GetAnimScaleForFrame(u32 frameNumber) const;
71  Eegeo::v3 GetAnimAxisScaleForFrame(u32 frameNumber) const;
72  float GetAnimStretchRotationForFrame(u32 frameNumber) const;
73 
74  u32 GetNumOfAnimMatrices() const;
75  u32 GetNumOfAnimMatrixFrames() const;
76  Eegeo::m44 GetAnimMatrix(u32 matrixIndex) const;
77  u32 GetNumOfAnimMatrixIndices() const;
78  s32 GetAnimMatrixIndex(u32 frameNumber) const;
79  Eegeo::m44 GetAnimMatrixForFrame(u32 frameNumber) const;
80 
81  private:
82 
83  s32 m_meshId;
84  std::string m_name;
85  s32 m_materialId;
86  s32 m_parentNodeId;
87 
88  std::vector<float> m_animPositions;
89  std::vector<s32> m_animPositionIndices;
90  std::vector<float> m_animRotations;
91  std::vector<s32> m_animRotationIndices;
92 
93  std::vector<float> m_animScales;
94  std::vector<s32> m_animScaleIndices;
95  std::vector<float> m_animMatrices;
96  std::vector<s32> m_animMatrixIndices;
97 
98 
99  u32 GetAnimScaleIndexForFrame(u32 frameNumber) const;
100  };
101  }
102  }
103 }