summaryrefslogtreecommitdiffstats
path: root/matchblox/engine/C_3DObject.h
blob: 2ad5a885f8caf8ee11001bd49c21a558db9df26c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#ifndef C_3DOBJECT_HEADER_FILE

#define C_3DOBJECT_HEADER_FILE

#include <fstream>
#include <vector>

#include "typedefs.h"

class C_3DObject
{
public:
  C_3DObject();
  C_3DObject(const char* f_strFileName,
             char* f_strColorTexName,
             MatProps_t f_Material);
  C_3DObject(const char* f_strFileName,
             GLuint f_uiTexturei,
             MatProps_t f_Material); 
 
  ~C_3DObject();

  inline void SetPos(double f_dX, double f_dY, double f_dZ) 
              { m_Pos.x = f_dX; m_Pos.y = f_dY; m_Pos.z = f_dZ; }
  inline void SetRot(double f_dX, double f_dY, double f_dZ) 
              { m_Rot.x = f_dX; m_Rot.y = f_dY; m_Rot.z = f_dZ; }
  inline void SetScale(double f_dX, double f_dY, double f_dZ) 
              { m_Scale.x = f_dX; m_Scale.y = f_dY; m_Scale.z = f_dZ; }
  inline void SetPos(const Vect3D_t &pos)
              { m_Pos = pos; }
  inline void SetRot(const Vect3D_t &rot)
              { m_Rot = rot; }
  inline void SetScale(const Vect3D_t &scale)
              { m_Scale = scale; }

  inline const Vect3D_t& GetPos() { return m_Pos; }
  inline const Vect3D_t& GetRot() { return m_Rot; }
  inline const Vect3D_t& GetScale() { return m_Scale; }
  inline const BoundingBox_t& GetBoundingBox() { return m_BBox; }
  inline const BoundingBox_t GetAbsBoundBox() { return m_BBox + m_Pos; } 
  inline bool  Initialized() { return m_bDispListValid; }

  void TransRotateScale(); //applies the scaling, translation and rotation
                           //for this object
  virtual void Render(); //renders the object using the current projection 
                         //and modelview matrices

protected:
  Vect3D_t m_Pos,
           m_Rot,
           m_Scale;
  
  BoundingBox_t m_BBox;   //bounding box of the object
  GLuint m_uiListIndex;   //display list index
  bool   m_bDispListValid;
  GLuint m_uiColorTex;
  bool   m_bOwnTexture;
  MatProps_t    m_Mat;

  bool CreateObject(const char *f_pFilePath);
  bool LoadGeometryData(const char *f_pFilePath, Geometry_t &f_Geom);
  bool ParseVect3D(const char *f_pInbuffer, Vect3D_t &f_V3);
  bool ParseTriangle(const char *f_pInbuffer, Triangle_t &f_triangle);
};

#endif //C_3DOBJECT_HEADER_FILE