-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathMesh.pde
More file actions
89 lines (77 loc) · 1.98 KB
/
Mesh.pde
File metadata and controls
89 lines (77 loc) · 1.98 KB
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
// Mesh Class
class Mesh {
ArrayList Triangles;
float bx1,by1,bz1,bx2,by2,bz2; //bounding box
float Sink;
//Mesh Loading routine
Mesh(String FileName)
{
byte b[] = loadBytes(FileName);
Triangles = new ArrayList();
Sink=0;
float[] Tri = new float[9];
//Skip the header
int offs = 84;
//Read each triangle out
while(offs<b.length){
offs = offs + 12; //skip the normals entirely!
for(int i = 0; i<9; i++)
{
Tri[i]=bin_to_float(b[offs],b[offs+1],b[offs+2],b[offs+3]);
offs=offs+4;
}
offs=offs+2;//Skip the attribute bytes
Triangles.add(new Triangle(Tri[0],Tri[1],Tri[2],Tri[3],Tri[4],Tri[5],Tri[6],Tri[7],Tri[8]));
}
CalculateBoundingBox();
}
void Scale(float Factor)
{
for(int i = Triangles.size()-1;i>=0;i--)
{
Triangle tri = (Triangle) Triangles.get(i);
tri.Scale(Factor);
}
CalculateBoundingBox();
}
void Translate(float tx, float ty, float tz)
{
for(int i = Triangles.size()-1;i>=0;i--)
{
Triangle tri = (Triangle) Triangles.get(i);
tri.Translate(tx,ty,tz);
}
CalculateBoundingBox();
}
void CalculateBoundingBox()
{
bx1 = 10000;
bx2 = -10000;
by1 = 10000;
by2 = -10000;
bz1 = 10000;
bz2 = -10000;
for(int i = Triangles.size()-1;i>=0;i--)
{
Triangle tri = (Triangle) Triangles.get(i);
if(tri.x1<bx1)bx1=tri.x1;
if(tri.x2<bx1)bx1=tri.x2;
if(tri.x3<bx1)bx1=tri.x3;
if(tri.x1>bx2)bx2=tri.x1;
if(tri.x2>bx2)bx2=tri.x2;
if(tri.x3>bx2)bx2=tri.x3;
if(tri.y1<by1)by1=tri.y1;
if(tri.y2<by1)by1=tri.y2;
if(tri.y3<by1)by1=tri.y3;
if(tri.y1>by2)by2=tri.y1;
if(tri.y2>by2)by2=tri.y2;
if(tri.y3>by2)by2=tri.y3;
if(tri.z1<bz1)bz1=tri.z1;
if(tri.z2<bz1)bz1=tri.z2;
if(tri.z3<bz1)bz1=tri.z3;
if(tri.z1>bz2)bz2=tri.z1;
if(tri.z2>bz2)bz2=tri.z2;
if(tri.z3>bz2)bz2=tri.z3;
}
}
}