summaryrefslogtreecommitdiffstats
path: root/MatchBloxEngine/MatchBloxEngine/typedefs.h
blob: 0262c14d03bb45c8faeb8324b9dba5fd12f938de (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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#ifndef TYPEDEFS_H

#define TYPEDEFS_H

#include <vector>
#include <limits>

typedef struct bb
{
  bb() {
    //init a bounding box with the min values set to max double and visa versa
    m_dLeft = m_dBottom = m_dFront = std::numeric_limits<double>::max();
    m_dRight = m_dTop = m_dBack    = -std::numeric_limits<double>::max();
  }
  
  double m_dLeft,   //min x
         m_dBottom, //min y
         m_dFront,  //min z
         m_dRight,  //max x
         m_dTop,    //max y
         m_dBack;   //max z

} BoundingBox_t;

typedef struct vec3d
{
  double x, y, z;

  //constructors
  vec3d() 
    { x=0.0, y=0.0, z=0.0; }
  vec3d(double fx, double fy, double fz) 
    { x=fx, y=fy, z=fz; }
  vec3d(const vec3d &clone)
    { x=clone.x; y=clone.y; z=clone.z; }

  inline vec3d& operator=(const vec3d &rhs)
    { x=rhs.x; y=rhs.y; z=rhs.z; return *this; }
  inline vec3d& operator+=(const vec3d &rhs)
    { x+=rhs.x; y+=rhs.y; z+=rhs.z; return *this; }
  inline vec3d& operator-=(const vec3d &rhs)
    { x-=rhs.x; y-=rhs.y; z-=rhs.z; return *this; }
  inline vec3d& operator*=(const vec3d &rhs)
    { x*=rhs.x; y*=rhs.y; z*=rhs.z; return *this; }
  inline vec3d& operator*=(const double &scal)
    { x*=scal; y*=scal; z*=scal; return *this; }

  inline const vec3d& operator+(const vec3d &rhs) 
    { return vec3d(*this) += rhs; }
  inline const vec3d& operator-(const vec3d &rhs)
    { return vec3d(*this) -= rhs; }
  inline const vec3d& operator*(const vec3d &rhs)
    { return vec3d(*this) *= rhs; }
  inline const vec3d& operator*(const double &scal)
    { return vec3d(*this) *= scal; }
} Vect3D_t;



inline void UpdBBox(BoundingBox_t &B, Vect3D_t &V)
{
  if (V.x < B.m_dLeft)
    B.m_dLeft = V.x;
  else if (V.x > B.m_dRight)
    B.m_dRight = V.x;
  if (V.y < B.m_dBottom)
    B.m_dBottom = V.y;
  else if (V.y > B.m_dTop)
    B.m_dTop = V.y;
  if (V.z < B.m_dFront)
    B.m_dFront = V.z;
  else if (V.z > B.m_dBack)
    B.m_dBack = V.z;
};

typedef struct triangle
{
  int v1, n1, t1,
      v2, n2, t2,
      v3, n3, t3;
} Triangle_t;

typedef struct mat
{
  GLfloat m_fAmb[4],
          m_fDif[4],
          m_fSpec[4],
          m_fEmi[4],
          m_fShin;

  //default constructor
  mat()   
  {
    m_fAmb[0] = m_fAmb[1] = m_fAmb[2] = 0.7f; m_fAmb[3] = 1.0f;
    m_fDif[0] = m_fDif[1] = m_fDif[3] = 0.7f; m_fDif[3] = 1.0f;
    m_fSpec[0] = m_fSpec[1] = m_fSpec[2] = m_fSpec[3] = 1.0f;
    m_fEmi[0] = m_fEmi[1] = m_fEmi[2] = 0.0f; m_fEmi[3] = 1.0f;
    m_fShin = 128.0f;
  }
  //for convenience
  inline void setAmb(float r, float g, float b, float a)
    { m_fAmb[0] = r; m_fAmb[1] = g; m_fAmb[2] = b; m_fAmb[3] = a; }
  inline void setDif(float r, float g, float b, float a)
    { m_fDif[0] = r; m_fDif[1] = g; m_fDif[2] = b; m_fDif[3] = a; }
  inline void setSpec(float r, float g, float b, float a)
    { m_fSpec[0] = r; m_fSpec[1] = g; m_fSpec[2] = b; m_fSpec[3] = a; }
  inline void setEmi(float r, float g, float b, float a)
    { m_fEmi[0] = r; m_fEmi[1] = g; m_fEmi[2] = b; m_fEmi[3] = a; }
            
} MatProps_t;
/*
typedef struct facegroup
{
  MatProps_t           m_material;
  std::vector<Face_t>  m_faces;
} FaceGroup_t;
*/

typedef struct geom
{
  std::vector<Vect3D_t> m_verts,
                        m_norms,
                        m_texs;
  std::vector<Triangle_t> m_triangles;
} Geometry_t;

#endif //TYPEDEFS_H