Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
Object3D_GL.h
Go to the documentation of this file.
1 // 3DObject_GL.h
3 // OpenGL Screen implmentation
4 //
6 
7 #ifndef _OBJECT3D_GL
8 #define _OBJECT3D_GL
9 
10 #define DEBUG
11 
12 #include "../framework\Frm_Mesh.h" //based on the correct Mesh element
13 #include "Screen_GL.h"
14 
15 class ObjectBone{
16  public:
18  ~ObjectBone(void);
19 
20  inline void CalcAttitude(ObjectBone* &pParentBone); //compute the Final Matrix
21  void CalcAnimation(uint16 &pKey); //retrieves a transformation matrice from an animation
22  void CalcBindSpace(void){_TransformMatrix = _Bone->_MatrixPos;}; //Sets up the original Matrix position as transformation matrix
23 
28  std::string _BoneName;
29  std::list<ObjectBone*> _Bones;
30 };
31 
32 class Object3D
33 {
34  public:
35  Object3D(void):_Skeletton(0), _SkinnedVertices(0), _Model(0), _AnimationStep(1){};
36  ~Object3D(void){if (_SkinnedVertices!=0) delete[] _SkinnedVertices; /*if (_Skeletton!=0) delete _Skeletton;/**/}
37  void SetupModel(Frm::Model3D* &pModel){
38  _Model = pModel;
39  _Mesh = _Model->_Meshes.front();
40  _SkinnedVertices = new Frm::Vertex[_Mesh->_nVertices];
41  _Skeletton = ReplicateSkeletton(_Model->_Skeletton);
42  };
43 
44  //Vertices to render
45  void ClearSkinnedVertices(void){memset(_SkinnedVertices, 0, _Mesh->_nVertices * sizeof(Frm::Vertex));};
46 
47  //Animation Based
48  void SetAnimationStep(uint16 pStep){_AnimationStep = pStep;};
49  void MapAnimationSet(std::string pText="None");
51  void UpdateAnimation(void){_cKey += _AnimationStep; if (_cKey > _cAnimationSet->_MaxKey) _cKey = 0; CalcAnimation(_Skeletton); ComputeBoundingBoxSphere(); CalcAttitude(_Skeletton,0); SkinMesh(_Skeletton);};
52  void UpdateBindSpace(void){CalcBindSpace(_Skeletton);CalcAttitude(_Skeletton,0);SkinMesh(_Skeletton);};
53  inline void CalcAnimation(void){ _cKey += _AnimationStep; if (_cKey > _cAnimationSet->_MaxKey) _cKey = 0; CalcAnimation(_Skeletton); ComputeBoundingBoxSphere();};
54  inline void CalcBindSpace(void){CalcBindSpace(_Skeletton);};
55  inline void Update(void){CalcAttitude(_Skeletton,0);SkinMesh(_Skeletton);};
56  void Draw(Screen_GL* pScreen);
57 
59  //Elements for the AABB (_Low & _High)
60  //and bounding sphere (_Center & _Radius)
62  float _Radius;
63 
64  private:
65  ObjectBone* _Skeletton;
66  Frm::Mesh* _Mesh; //pointer to Model Mesh
67  Frm::Vertex* _SkinnedVertices;
68  Frm::Model3D* _Model;
69  Frm::AnimationSet* _cAnimationSet;
70 
71  uint16 _cKey; //current animation Key
72  uint16 _AnimationStep; //Animation Increment
73 
74  ObjectBone* ReplicateSkeletton(Frm::Bone* &pBone);
75  void GetBoneAnimation(ObjectBone* &pBone);
76  void CalcAttitude(ObjectBone* pBone, ObjectBone* pParentBone);
77  void CalcAnimation(ObjectBone* &pBone);
78  void CalcBindSpace(ObjectBone* &pBone);
79  void SkinMesh(ObjectBone* &pParentBone);
80 };
81 
82 #endif
Definition: Frm_Mesh.h:124
uint32 _MaxKey
Definition: Frm_Mesh.h:131
Definition: Frm_Mesh.h:111
Definition: Frm_Mesh.h:24
glMatrix _MatrixPos
Definition: Frm_Mesh.h:31
Definition: Frm_Mesh.h:27
uint16 _nVertices
Definition: Frm_Mesh.h:46
Definition: Frm_Mesh.h:68
std::list< Mesh * > _Meshes
Definition: Frm_Mesh.h:74
Bone * _Skeletton
Definition: Frm_Mesh.h:92
void Identity(void)
Definition: Frm_3DMath.h:86
Definition: Object3D_GL.h:16
void ComputeBoundingBoxSphere(void)
Definition: Object3D_GL.cpp:37
Frm::Vertex _Center
Definition: Object3D_GL.h:37
Frm::Vertex _High
Definition: Object3D_GL.h:37
void ClearSkinnedVertices(void)
Definition: Object3D_GL.h:45
void MapAnimationSet(std::string pText="None")
Definition: Object3D_GL.cpp:166
void CalcAnimation(void)
Definition: Object3D_GL.h:53
void UpdateAnimation(void)
Definition: Object3D_GL.h:51
void Update(void)
Definition: Object3D_GL.h:55
void SetAnimationStep(uint16 pStep)
Definition: Object3D_GL.h:48
float _Radius
Definition: Object3D_GL.h:38
~Object3D(void)
Definition: Object3D_GL.h:36
void SetupModel(Frm::Model3D *&pModel)
Definition: Object3D_GL.h:37
void Draw(Screen_GL *pScreen)
Frm::Vertex _Low
Definition: Object3D_GL.h:37
Object3D(void)
Definition: Object3D_GL.h:35
void CalcBindSpace(void)
Definition: Object3D_GL.h:48
void UpdateBindSpace(void)
Definition: Object3D_GL.h:52
Definition: Object3D_GL.h:15
std::list< ObjectBone * > _Bones
Definition: Object3D_GL.h:26
Frm::Matrix _CombinedMatrix
Definition: Object3D_GL.h:27
void CalcBindSpace(void)
Definition: Object3D_GL.h:22
Frm::Animation * _Animation
Definition: Object3D_GL.h:25
void CalcAttitude(ObjectBone *&pParentBone)
uint16 _AnimationIndexR
Definition: Object3D_GL.h:26
~ObjectBone(void)
ObjectBone(void)
Definition: Object3D_GL.h:17
Frm::Bone * _Bone
Definition: Object3D_GL.h:21
Frm::glMatrix _FinalMatrix
Definition: Object3D_GL.h:24
uint16 _AnimationIndexMat
Definition: Object3D_GL.h:26
uint16 _AnimationIndexT
Definition: Object3D_GL.h:26
std::string _BoneName
Definition: Object3D_GL.h:25
void CalcAnimation(uint16 &pKey)
Definition: Object3D_GL.cpp:26
Frm::glMatrix _TransformMatrix
Definition: Object3D_GL.h:24
Frm::glMatrix _CombinedMatrix
Definition: Object3D_GL.h:24
uint16 _AnimationIndexS
Definition: Object3D_GL.h:26
Definition: Screen_GL.h:15
unsigned short int uint16
Definition: Frm_types.h:14
uint16 index
Definition: sample3.cpp:29