-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlibs.js
105 lines (88 loc) · 2.08 KB
/
libs.js
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
var LIBS={
get_json: function(url, func) {
//create the request
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status==200) {
//the file is loaded. Parse it as JSON and launch func
func(JSON.parse(xmlHttp.responseText));
}
}
//send the request
xmlHttp.send();
},
degToRad: function(angle){
return(angle*Math.PI/180);
},
get_projection: function(angle, a, zMin, zMax) {
var tan=Math.tan(LIBS.degToRad(0.5*angle)),
A=-(zMax+zMin)/(zMax-zMin),
B=(-2*zMax*zMin)/(zMax-zMin);
return [
.5/tan, 0 , 0, 0,
0, .5*a/tan, 0, 0,
0, 0, A, -1,
0, 0, B, 0
];
},
get_I4: function() {
return [1,0,0,0,
0,1,0,0,
0,0,1,0,
0,0,0,1];
},
set_I4: function(m) {
m[0]=1, m[1]=0, m[2]=0, m[3]=0,
m[4]=0, m[5]=1, m[6]=0, m[7]=0,
m[8]=0, m[9]=0, m[10]=1, m[11]=0,
m[12]=0, m[13]=0, m[14]=0, m[15]=1;
},
rotateX: function(m, angle) {
var c=Math.cos(angle);
var s=Math.sin(angle);
var mv1=m[1], mv5=m[5], mv9=m[9];
m[1]=m[1]*c-m[2]*s;
m[5]=m[5]*c-m[6]*s;
m[9]=m[9]*c-m[10]*s;
m[2]=m[2]*c+mv1*s;
m[6]=m[6]*c+mv5*s;
m[10]=m[10]*c+mv9*s;
},
rotateY: function(m, angle) {
var c=Math.cos(angle);
var s=Math.sin(angle);
var mv0=m[0], mv4=m[4], mv8=m[8];
m[0]=c*m[0]+s*m[2];
m[4]=c*m[4]+s*m[6];
m[8]=c*m[8]+s*m[10];
m[2]=c*m[2]-s*mv0;
m[6]=c*m[6]-s*mv4;
m[10]=c*m[10]-s*mv8;
},
rotateZ: function(m, angle) {
var c=Math.cos(angle);
var s=Math.sin(angle);
var mv0=m[0], mv4=m[4], mv8=m[8];
m[0]=c*m[0]-s*m[1];
m[4]=c*m[4]-s*m[5];
m[8]=c*m[8]-s*m[9];
m[1]=c*m[1]+s*mv0;
m[5]=c*m[5]+s*mv4;
m[9]=c*m[9]+s*mv8;
},
translateZ: function(m, t){
m[14]+=t;
},
translateY: function(m, t){
m[13]+=t;
},
translateX: function(m, t){
m[12]+=t;
},
scale: function(m, t){
m[0]*=t;
m[5]*=t;
m[10]*=t;
}
}