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
|