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 "GL\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 CalcBindSpace(void){_TransformMatrix = _Bone->_MatrixPos;}; //Sets up the original Matrix position as transformation matrix
22 
25  std::string _BoneName;
26  std::list<ObjectBone*> _Bones;
27 };
28 
29 class Object3D
30 {
31  public:
32  Object3D(void):_Skeletton(0), _SkinnedVertices(0), _Model(0){};
33  ~Object3D(void){if (_SkinnedVertices!=0) delete[] _SkinnedVertices; /*if (_Skeletton!=0) delete _Skeletton;/**/}
34  void SetupModel(Frm::Model3D* &pModel){
35  _Model = pModel;
36  _Mesh = _Model->_Meshes.front();
37  _SkinnedVertices = new Frm::Vertex[_Mesh->_nVertices];
38  _Skeletton = ReplicateSkeletton(_Model->_Skeletton);
39  Update();
41  };
42 
43  //Vertices to render
44  void ClearSkinnedVertices(void){memset(_SkinnedVertices, 0, _Mesh->_nVertices * sizeof(Frm::Vertex));};
45 
46  //Animation Based
47  void UpdateBindSpace(void){CalcBindSpace(_Skeletton);CalcAttitude(_Skeletton,(ObjectBone*)0);SkinMesh(_Skeletton);};
48  inline void CalcBindSpace(void){CalcBindSpace(_Skeletton);};
49  inline void Update(void){CalcAttitude(_Skeletton,0);SkinMesh(_Skeletton);};
50  void Draw(Screen_GL* pScreen);
51 
53  //Elements for the AABB (_Low & _High)
54  //and bounding sphere (_Center & _Radius)
56  float _Radius;
57 
58  private:
59  ObjectBone* _Skeletton;
60  Frm::Mesh* _Mesh; //pointer to Model Mesh
61  Frm::Vertex* _SkinnedVertices;
62  Frm::Model3D* _Model;
63 
64  ObjectBone* ReplicateSkeletton(Frm::Bone* &pBone);
65  void CalcAttitude(ObjectBone* pBone, ObjectBone* pParentBone);
66  void CalcBindSpace(ObjectBone* pBone);
67  void SkinMesh(ObjectBone* &pParentBone);
68 };
69 
70 #endif
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:44
void Update(void)
Definition: Object3D_GL.h:31
float _Radius
Definition: Object3D_GL.h:38
~Object3D(void)
Definition: Object3D_GL.h:33
void SetupModel(Frm::Model3D *&pModel)
Definition: Object3D_GL.h:34
void Draw(Screen_GL *pScreen)
Frm::Vertex _Low
Definition: Object3D_GL.h:37
Object3D(void)
Definition: Object3D_GL.h:32
void CalcBindSpace(void)
Definition: Object3D_GL.h:48
void UpdateBindSpace(void)
Definition: Object3D_GL.h:47
Definition: Object3D_GL.h:15
std::list< ObjectBone * > _Bones
Definition: Object3D_GL.h:26
void CalcBindSpace(void)
Definition: Object3D_GL.h:21
void CalcAttitude(ObjectBone *&pParentBone)
Definition: Object3D_GL.cpp:17
~ObjectBone(void)
Definition: Object3D_GL.cpp:12
ObjectBone(void)
Definition: Object3D_GL.h:17
Frm::Bone * _Bone
Definition: Object3D_GL.h:21
Frm::glMatrix _FinalMatrix
Definition: Object3D_GL.h:24
std::string _BoneName
Definition: Object3D_GL.h:25
Frm::glMatrix _TransformMatrix
Definition: Object3D_GL.h:24
Frm::glMatrix _CombinedMatrix
Definition: Object3D_GL.h:24
Definition: Screen_GL.h:15