-
Notifications
You must be signed in to change notification settings - Fork 11
/
osg.js
408 lines (408 loc) · 183 KB
/
osg.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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
// osg-0.0.8.js commit e96750f4a421649f63e4020ff927425173695d97 - http://github.com/cedricpinson/osgjs
var osg={version:"0.0.8",copyright:"Cedric Pinson - cedric.pinson@plopbyte.com",log:function(a){window.console!==void 0&&window.console.log(a)},info:function(a){window.console!==void 0&&window.console.info(a)},warn:function(a){window.console!==void 0&&window.console.warn(a)},debug:function(a){window.console!==void 0&&window.console.debug(a)},DEBUG:0,INFO:1,NOTICE:2,WARN:3};
osg.setNotifyLevel=function(a){var c=function(){};osg.debug=c;osg.info=c;osg.log=c;osg.warn=c;if(a<=osg.DEBUG)osg.debug=function(a){window.console!==void 0&&window.console.debug(a)};if(a<=osg.INFO)osg.info=function(a){window.console!==void 0&&window.console.info(a)};if(a<=osg.NOTICE)osg.log=function(a){window.console!==void 0&&window.console.log(a)};if(a<=osg.WARN)osg.warn=function(a){window.console!==void 0&&window.console.warn(a)}};osg.reportErrorGL=!1;osg.ReportWebGLError=!1;osg.init=function(){osg.setNotifyLevel(osg.NOTICE)};
osg.checkError=function(a){a!==0&&(a===1280?osg.log("detected error INVALID_ENUM"):a===1281?osg.log("detected error INVALID_VALUE"):a===1282?osg.log("detected error INVALID_OPERATION"):a===1285?osg.log("detected error OUT_OF_MEMORY"):a===1286?osg.log("detected error INVALID_FRAMEBUFFER_OPERATION"):osg.log("detected error UNKNOWN"))};osg.isArray=function(a){return toString.call(a)==="[object Array]"};
osg.extend=function(){var a=Object.prototype.toString,c=Object.prototype.hasOwnProperty,e=osg.isArray,f=function(e){if(!e||a.call(e)!=="[object Object]"||e.nodeType||e.setInterval)return!1;if(e.constructor&&!c.call(e,"constructor")&&!c.call(e.constructor.prototype,"isPrototypeOf"))return!1;for(var f in e);return f===void 0||c.call(e,f)},g=arguments[0]||{},h=1,i=arguments.length,j=!1,k,m,n,o;typeof g==="boolean"&&(j=g,g=arguments[1]||{},h=2);typeof g!=="object"&&a.call(g)!=="[object Function]"&&(g=
{});i===h&&(g=this,--h);for(;h<i;h++)if((k=arguments[h])!==null)for(m in k)n=g[m],o=k[m],g!==o&&(j&&o&&(f(o)||e(o))?(n=n&&(f(n)||e(n))?n:e(o)?[]:{},g[m]=osg.extend(j,n,o)):o!==void 0&&(g[m]=o));return g};osg.objectInehrit=function(a,c){function e(){}e.prototype=a;var f=new e;c&&osg.objectMix(f,c,!1);return f};osg.objectMix=function(a,c,e){for(var f in c)if(!e||!a[f])a[f]=c[f];return a};osg.objectType={};osg.objectType.type=0;
osg.objectType.generate=function(a){var c=osg.objectType.type;osg.objectType[c]=a;osg.objectType[a]=c;osg.objectType.type+=1;return c};osg.Float32Array=Float32Array;osg.Int32Array=Int32Array;osg.Uint16Array=Uint16Array;
osg.Vec2={copy:function(a,c){c[0]=a[0];c[1]=a[1];return c},valid:function(a){return isNaN(a[0])?!1:isNaN(a[1])?!1:!0},mult:function(a,c,e){e[0]=a[0]*c;e[1]=a[1]*c;return e},length2:function(a){return a[0]*a[0]+a[1]*a[1]},length:function(a){return Math.sqrt(a[0]*a[0]+a[1]*a[1])},normalize:function(a,c){var e=this.length2(a);e>0?(e=1/Math.sqrt(e),c[0]=a[0]*e,c[1]=a[1]*e):(c[0]=a[0],c[1]=a[1]);return c},dot:function(a,c){return a[0]*c[0]+a[1]*c[1]},sub:function(a,c,e){e[0]=a[0]-c[0];e[1]=a[1]-c[1];return e},
add:function(a,c,e){e[0]=a[0]+c[0];e[1]=a[1]+c[1];return e},neg:function(a,c){c[0]=-a[0];c[1]=-a[1];return c},lerp:function(a,c,e,f){var g=1-a;f[0]=c[0]*g+a*e[0];f[1]=c[1]*g+a*e[1];return f}};
osg.Vec3={copy:function(a,c){c[0]=a[0];c[1]=a[1];c[2]=a[2];return c},cross:function(a,c,e){e[0]=a[1]*c[2]-a[2]*c[1];e[1]=a[2]*c[0]-a[0]*c[2];e[2]=a[0]*c[1]-a[1]*c[0];return e},valid:function(a){return isNaN(a[0])?!1:isNaN(a[1])?!1:isNaN(a[2])?!1:!0},mult:function(a,c,e){e[0]=a[0]*c;e[1]=a[1]*c;e[2]=a[2]*c;return e},length2:function(a){return a[0]*a[0]+a[1]*a[1]+a[2]*a[2]},length:function(a){return Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2])},normalize:function(a,c){var e=this.length2(a);e>0?(e=1/Math.sqrt(e),
c[0]=a[0]*e,c[1]=a[1]*e,c[2]=a[2]*e):(c[0]=a[0],c[1]=a[1],c[2]=a[2]);return c},dot:function(a,c){return a[0]*c[0]+a[1]*c[1]+a[2]*c[2]},sub:function(a,c,e){e[0]=a[0]-c[0];e[1]=a[1]-c[1];e[2]=a[2]-c[2];return e},add:function(a,c,e){e[0]=a[0]+c[0];e[1]=a[1]+c[1];e[2]=a[2]+c[2];return e},neg:function(a,c){c[0]=-a[0];c[1]=-a[1];c[2]=-a[2];return c},lerp:function(a,c,e,f){f[0]=c[0]+(e[0]-c[0])*a;f[1]=c[1]+(e[1]-c[1])*a;f[2]=c[2]+(e[2]-c[2])*a;return f}};
osg.Vec4={dot:function(a,c){return a[0]*c[0]+a[1]*c[1]+a[2]*c[2]+a[3]*c[3]},copy:function(a,c){c[0]=a[0];c[1]=a[1];c[2]=a[2];c[3]=a[3];return c},sub:function(a,c,e){e[0]=a[0]-c[0];e[1]=a[1]-c[1];e[2]=a[2]-c[2];e[3]=a[3]-c[3];return e},mult:function(a,c){r[0]=a[0]*c;r[1]=a[1]*c;r[2]=a[2]*c;r[3]=a[3]*c;return r},add:function(a,c,e){e[0]=a[0]+c[0];e[1]=a[1]+c[1];e[2]=a[2]+c[2];e[3]=a[3]+c[3];return e},neg:function(a,c){c[0]=-a[0];c[1]=-a[1];c[2]=-a[2];c[3]=-a[3];return c},lerp:function(a,c,e,f){var g=
1-a;f[0]=c[0]*g+a*e[0];f[1]=c[1]*g+a*e[1];f[2]=c[2]*g+a*e[2];f[3]=c[3]*g+a*e[3];return f}};osg.Object=function(){};osg.Object.prototype={setName:function(a){this._name=a},getName:function(){return this._name}};
osg.Matrix={_tmp0:[],_tmp1:[],valid:function(a){for(var c=0;c<16;c++)if(isNaN(a[c]))return!1;return!0},setRow:function(a,c,e,f,g,h){c*=4;a[c+0]=e;a[c+1]=f;a[c+2]=g;a[c+3]=h},innerProduct:function(a,c,e,f){e*=4;return a[e+0]*c[0+f]+a[e+1]*c[4+f]+a[e+2]*c[8+f]+a[e+3]*c[12+f]},set:function(a,c,e,f){return a[c*4+e]=f},get:function(a,c,e){return a[c*4+e]},makeIdentity:function(a){a===void 0&&(a=[],osg.log("osg.Matrix.makeIdentity without matrix destination is deprecated"));osg.Matrix.setRow(a,0,1,0,0,
0);osg.Matrix.setRow(a,1,0,1,0,0);osg.Matrix.setRow(a,2,0,0,1,0);osg.Matrix.setRow(a,3,0,0,0,1);return a},makeTranslate:function(a,c,e,f){f===void 0&&(f=[]);osg.Matrix.setRow(f,0,1,0,0,0);osg.Matrix.setRow(f,1,0,1,0,0);osg.Matrix.setRow(f,2,0,0,1,0);osg.Matrix.setRow(f,3,a,c,e,1);return f},setTrans:function(a,c,e,f){a[12]=c;a[13]=e;a[14]=f;return a},getTrans:function(a,c){c[0]=a[12];c[1]=a[13];c[2]=a[14];return c},preMult:function(a,c){var e,f,g,h;e=c[0]*a[0]+c[1]*a[4]+c[2]*a[8]+c[3]*a[12];f=c[4]*
a[0]+c[5]*a[4]+c[6]*a[8]+c[7]*a[12];g=c[8]*a[0]+c[9]*a[4]+c[10]*a[8]+c[11]*a[12];h=c[12]*a[0]+c[13]*a[4]+c[14]*a[8]+c[15]*a[12];a[0]=e;a[4]=f;a[8]=g;a[12]=h;e=c[0]*a[1]+c[1]*a[5]+c[2]*a[9]+c[3]*a[13];f=c[4]*a[1]+c[5]*a[5]+c[6]*a[9]+c[7]*a[13];g=c[8]*a[1]+c[9]*a[5]+c[10]*a[9]+c[11]*a[13];h=c[12]*a[1]+c[13]*a[5]+c[14]*a[9]+c[15]*a[13];a[1]=e;a[5]=f;a[9]=g;a[13]=h;e=c[0]*a[2]+c[1]*a[6]+c[2]*a[10]+c[3]*a[14];f=c[4]*a[2]+c[5]*a[6]+c[6]*a[10]+c[7]*a[14];g=c[8]*a[2]+c[9]*a[6]+c[10]*a[10]+c[11]*a[14];h=c[12]*
a[2]+c[13]*a[6]+c[14]*a[10]+c[15]*a[14];a[2]=e;a[6]=f;a[10]=g;a[14]=h;e=c[0]*a[3]+c[1]*a[7]+c[2]*a[11]+c[3]*a[15];f=c[4]*a[3]+c[5]*a[7]+c[6]*a[11]+c[7]*a[15];g=c[8]*a[3]+c[9]*a[7]+c[10]*a[11]+c[11]*a[15];h=c[12]*a[3]+c[13]*a[7]+c[14]*a[11]+c[15]*a[15];a[3]=e;a[7]=f;a[11]=g;a[15]=h;return a},postMult:function(a,c){btmp0=c[0]*a[0]+c[1]*a[4]+c[2]*a[8]+c[3]*a[12];btmp1=c[0]*a[1]+c[1]*a[5]+c[2]*a[9]+c[3]*a[13];btmp2=c[0]*a[2]+c[1]*a[6]+c[2]*a[10]+c[3]*a[14];btmp3=c[0]*a[3]+c[1]*a[7]+c[2]*a[11]+c[3]*a[15];
c[0]=btmp0;c[1]=btmp1;c[2]=btmp2;c[3]=btmp3;btmp0=c[4]*a[0]+c[5]*a[4]+c[6]*a[8]+c[7]*a[12];btmp1=c[4]*a[1]+c[5]*a[5]+c[6]*a[9]+c[7]*a[13];btmp2=c[4]*a[2]+c[5]*a[6]+c[6]*a[10]+c[7]*a[14];btmp3=c[4]*a[3]+c[5]*a[7]+c[6]*a[11]+c[7]*a[15];c[4]=btmp0;c[5]=btmp1;c[6]=btmp2;c[7]=btmp3;btmp0=c[8]*a[0]+c[9]*a[4]+c[10]*a[8]+c[11]*a[12];btmp1=c[8]*a[1]+c[9]*a[5]+c[10]*a[9]+c[11]*a[13];btmp2=c[8]*a[2]+c[9]*a[6]+c[10]*a[10]+c[11]*a[14];btmp3=c[8]*a[3]+c[9]*a[7]+c[10]*a[11]+c[11]*a[15];c[8]=btmp0;c[9]=btmp1;c[10]=
btmp2;c[11]=btmp3;btmp0=c[12]*a[0]+c[13]*a[4]+c[14]*a[8]+c[15]*a[12];btmp1=c[12]*a[1]+c[13]*a[5]+c[14]*a[9]+c[15]*a[13];btmp2=c[12]*a[2]+c[13]*a[6]+c[14]*a[10]+c[15]*a[14];btmp3=c[12]*a[3]+c[13]*a[7]+c[14]*a[11]+c[15]*a[15];c[12]=btmp0;c[13]=btmp1;c[14]=btmp2;c[15]=btmp3;return c},multa:function(a,c,e){return e===a?this.preMult(a,c):e===c?this.postMult(a,c):(e===void 0&&(e=[]),e[0]=c[0]*a[0]+c[1]*a[4]+c[2]*a[8]+c[3]*a[12],e[1]=c[0]*a[1]+c[1]*a[5]+c[2]*a[9]+c[3]*a[13],e[2]=c[0]*a[2]+c[1]*a[6]+c[2]*
a[10]+c[3]*a[14],e[3]=c[0]*a[3]+c[1]*a[7]+c[2]*a[11]+c[3]*a[15],e[4]=c[4]*a[0]+c[5]*a[4]+c[6]*a[8]+c[7]*a[12],e[5]=c[4]*a[1]+c[5]*a[5]+c[6]*a[9]+c[7]*a[13],e[6]=c[4]*a[2]+c[5]*a[6]+c[6]*a[10]+c[7]*a[14],e[7]=c[4]*a[3]+c[5]*a[7]+c[6]*a[11]+c[7]*a[15],e[8]=c[8]*a[0]+c[9]*a[4]+c[10]*a[8]+c[11]*a[12],e[9]=c[8]*a[1]+c[9]*a[5]+c[10]*a[9]+c[11]*a[13],e[10]=c[8]*a[2]+c[9]*a[6]+c[10]*a[10]+c[11]*a[14],e[11]=c[8]*a[3]+c[9]*a[7]+c[10]*a[11]+c[11]*a[15],e[12]=c[12]*a[0]+c[13]*a[4]+c[14]*a[8]+c[15]*a[12],e[13]=
c[12]*a[1]+c[13]*a[5]+c[14]*a[9]+c[15]*a[13],e[14]=c[12]*a[2]+c[13]*a[6]+c[14]*a[10]+c[15]*a[14],e[15]=c[12]*a[3]+c[13]*a[7]+c[14]*a[11]+c[15]*a[15],e)},mult:function(a,c,e){var f=c[0],g=c[1],h=c[2],i=c[3],j=c[4],k=c[5],m=c[6],n=c[7],o=c[8],p=c[9],q=c[10],s=c[11],u=c[12],y=c[13],z=c[14],c=c[15],v=a[0],G=a[1],w=a[2],C=a[3],D=a[4],A=a[5],E=a[6],F=a[7],B=a[8],H=a[9],I=a[10],J=a[11],x=a[12],K=a[13],L=a[14],a=a[15];e[0]=f*v+g*D+h*B+i*x;e[1]=f*G+g*A+h*H+i*K;e[2]=f*w+g*E+h*I+i*L;e[3]=f*C+g*F+h*J+i*a;e[4]=
j*v+k*D+m*B+n*x;e[5]=j*G+k*A+m*H+n*K;e[6]=j*w+k*E+m*I+n*L;e[7]=j*C+k*F+m*J+n*a;e[8]=o*v+p*D+q*B+s*x;e[9]=o*G+p*A+q*H+s*K;e[10]=o*w+p*E+q*I+s*L;e[11]=o*C+p*F+q*J+s*a;e[12]=u*v+y*D+z*B+c*x;e[13]=u*G+y*A+z*H+c*K;e[14]=u*w+y*E+z*I+c*L;e[15]=u*C+y*F+z*J+c*a;return e},multOrig:function(a,c,e){if(e===a){for(var e=[],f=0;f<4;f++)e[0]=osg.Matrix.innerProduct(c,a,0,f),e[1]=osg.Matrix.innerProduct(c,a,1,f),e[2]=osg.Matrix.innerProduct(c,a,2,f),e[3]=osg.Matrix.innerProduct(c,a,3,f),a[0+f]=e[0],a[4+f]=e[1],a[8+
f]=e[2],a[12+f]=e[3];return a}else if(e===c){e=[];for(f=0;f<4;f++)e[0]=osg.Matrix.innerProduct(c,a,f,0),e[1]=osg.Matrix.innerProduct(c,a,f,1),e[2]=osg.Matrix.innerProduct(c,a,f,2),e[3]=osg.Matrix.innerProduct(c,a,f,3),this.setRow(c,f,e[0],e[1],e[2],e[3]);return c}e===void 0&&(e=[]);var f=c[0],g=c[1],h=c[2],i=c[3],j=c[4],k=c[5],m=c[6],n=c[7],o=c[8],p=c[9],q=c[10],s=c[11],u=c[12],y=c[13],z=c[14],c=c[15],v=a[0],G=a[1],w=a[2],C=a[3],D=a[4],A=a[5],E=a[6],F=a[7],B=a[8],H=a[9],I=a[10],J=a[11],x=a[12],K=
a[13],L=a[14],a=a[15];e[0]=f*v+g*D+h*B+i*x;e[1]=f*G+g*A+h*H+i*K;e[2]=f*w+g*E+h*I+i*L;e[3]=f*C+g*F+h*J+i*a;e[4]=j*v+k*D+m*B+n*x;e[5]=j*G+k*A+m*H+n*K;e[6]=j*w+k*E+m*I+n*L;e[7]=j*C+k*F+m*J+n*a;e[8]=o*v+p*D+q*B+s*x;e[9]=o*G+p*A+q*H+s*K;e[10]=o*w+p*E+q*I+s*L;e[11]=o*C+p*F+q*J+s*a;e[12]=u*v+y*D+z*B+c*x;e[13]=u*G+y*A+z*H+c*K;e[14]=u*w+y*E+z*I+c*L;e[15]=u*C+y*F+z*J+c*a;return e},makeLookAt:function(a,c,e,f){f===void 0&&(f=[]);c=osg.Vec3.sub(c,a,[]);osg.Vec3.normalize(c,c);e=osg.Vec3.cross(c,e,[]);osg.Vec3.normalize(e,
e);var g=osg.Vec3.cross(e,c,[]);osg.Vec3.normalize(g,g);f[0]=e[0];f[1]=g[0];f[2]=-c[0];f[3]=0;f[4]=e[1];f[5]=g[1];f[6]=-c[1];f[7]=0;f[8]=e[2];f[9]=g[2];f[10]=-c[2];f[11]=0;f[12]=0;f[13]=0;f[14]=0;f[15]=1;osg.Matrix.multTranslate(f,osg.Vec3.neg(a,[]),f);return f},makeOrtho:function(a,c,e,f,g,h,i){i===void 0&&(i=[]);var j=-(c+a)/(c-a),k=-(f+e)/(f-e),m=-(h+g)/(h-g),n=osg.Matrix.setRow;n(i,0,2/(c-a),0,0,0);n(i,1,0,2/(f-e),0,0);n(i,2,0,0,-2/(h-g),0);n(i,3,j,k,m,1);return i},getLookAt:function(a,c,e,f,
g){g===void 0&&(g=1);var h=[];osg.Matrix.inverse(a,h)||osg.Matrix.makeIdentity(h);osg.Matrix.transformVec3(h,[0,0,0],c);osg.Matrix.transform3x3(a,[0,1,0],f);osg.Matrix.transform3x3(a,[0,0,-1],e);osg.Vec3.normalize(e,e);osg.Vec3.add(osg.Vec3.mult(e,g,[]),c,e)},getRotate:function(a,c){c===void 0&&(c=[]);var e;e=[];var f,g;f=a[0];g=a[5];var h=a[10];e[0]=1+f+g+h;e[1]=1+f-g-h;e[2]=1-f+g-h;e[3]=1-f-g+h;g=0;for(f=1;f<4;f++)e[f]>e[g]&&(g=f);g===0?(c[3]=e[0],c[0]=a[6]-a[9],c[1]=a[8]-a[2],c[2]=a[1]-a[4]):g==
1?(c[3]=a[6]-a[9],c[0]=e[1],c[1]=a[1]+a[4],c[2]=a[8]+a[2]):g==2?(c[3]=a[8]-a[2],c[0]=a[1]+a[4],c[1]=e[2],c[2]=a[6]+a[9]):(c[3]=a[1]-a[4],c[0]=a[8]+a[2],c[1]=a[6]+a[9],c[2]=e[3]);e=Math.sqrt(0.25/e[g]);c[3]*=e;c[0]*=e;c[1]*=e;c[2]*=e;return c},preMultTranslate:function(a,c){c[0]!==0&&(val=c[0],a[12]+=val*a[0],a[13]+=val*a[1],a[14]+=val*a[2],a[15]+=val*a[3]);c[1]!==0&&(val=c[1],a[12]+=val*a[4],a[13]+=val*a[5],a[14]+=val*a[6],a[15]+=val*a[7]);c[2]!==0&&(val=c[2],a[12]+=val*a[8],a[13]+=val*a[9],a[14]+=
val*a[10],a[15]+=val*a[11]);return a},multTranslate:function(a,c,e){e===void 0&&(e=[]);e!==a&&osg.Matrix.copy(a,e);var f;c[0]!==0&&(f=c[0],e[12]+=f*a[0],e[13]+=f*a[1],e[14]+=f*a[2],e[15]+=f*a[3]);c[1]!==0&&(f=c[1],e[12]+=f*a[4],e[13]+=f*a[5],e[14]+=f*a[6],e[15]+=f*a[7]);c[2]!==0&&(f=c[2],e[12]+=f*a[8],e[13]+=f*a[9],e[14]+=f*a[10],e[15]+=f*a[11]);return e},makeRotate:function(a,c,e,f,g){g===void 0&&(osg.log("osg.makeRotate without given matrix destination is deprecated"),g=[]);var h=Math.sqrt(c*c+
e*e+f*f),i=Math.sin(a),a=Math.cos(a);if(h>0){var j,k,m,n,o,h=1/h;c*=h;e*=h;f*=h;h=c*e;j=e*f;k=f*c;m=c*i;n=e*i;i*=f;o=1-a;g[0]=o*c*c+a;g[1]=o*h-i;g[2]=o*k+n;g[3]=0;g[4]=o*h+i;g[5]=o*e*e+a;g[6]=o*j-m;g[7]=0;g[8]=o*k-n;g[9]=o*j+m;g[10]=o*f*f+a;g[11]=0;g[12]=0;g[13]=0;g[14]=0;g[15]=1}else return osg.Matrix.makeIdentity(g);return g},transform3x3:function(a,c,e){e===void 0&&(e=[]);e[0]=a[0]*c[0]+a[1]*c[1]+a[2]*c[2];e[1]=a[4]*c[0]+a[5]*c[1]+a[6]*c[2];e[2]=a[8]*c[0]+a[9]*c[1]+a[10]*c[2];return e},transformVec3:function(a,
c,e){var f=1/(a[3]*c[0]+a[7]*c[1]+a[11]*c[2]+a[15]);e===void 0&&(e=[]);var g;g=e===c?[]:e;g[0]=(a[0]*c[0]+a[4]*c[1]+a[8]*c[2]+a[12])*f;g[1]=(a[1]*c[0]+a[5]*c[1]+a[9]*c[2]+a[13])*f;g[2]=(a[2]*c[0]+a[6]*c[1]+a[10]*c[2]+a[14])*f;e===c&&osg.Vec3.copy(g,e);return e},transformVec4:function(a,c,e){e===void 0&&(e=[]);var f;f=e===c?[]:e;f[0]=a[0]*c[0]+a[1]*c[1]+a[2]*c[2]+a[3]*c[3];f[1]=a[4]*c[0]+a[5]*c[1]+a[6]*c[2]+a[7]*c[3];f[2]=a[8]*c[0]+a[9]*c[1]+a[10]*c[2]+a[11]*c[3];f[3]=a[12]*c[0]+a[13]*c[1]+a[14]*c[2]+
a[15]*c[3];e===c&&osg.Vec4.copy(f,e);return e},copy:function(a,c){c===void 0&&(c=[]);c[0]=a[0];c[1]=a[1];c[2]=a[2];c[3]=a[3];c[4]=a[4];c[5]=a[5];c[6]=a[6];c[7]=a[7];c[8]=a[8];c[9]=a[9];c[10]=a[10];c[11]=a[11];c[12]=a[12];c[13]=a[13];c[14]=a[14];c[15]=a[15];return c},inverse:function(a,c){if(c===a)osg.Matrix.copy(a,osg.Matrix._tmp1),a=osg.Matrix._tmp1;return a[3]===0&&a[7]===0&&a[11]===0&&a[15]===1?this.inverse4x3(a,c):this.inverse4x4(a,c)},inverse4x4:function(a,c){var e=a[10]*a[15],f=a[14]*a[11],
g=a[6]*a[15],h=a[14]*a[7],i=a[6]*a[11],j=a[10]*a[7],k=a[2]*a[15],m=a[14]*a[3],n=a[2]*a[11],o=a[10]*a[3],p=a[2]*a[7],q=a[6]*a[3],s=a[8]*a[13],u=a[12]*a[9],y=a[4]*a[13],z=a[12]*a[5],v=a[4]*a[9],G=a[8]*a[5],w=a[0]*a[13],C=a[12]*a[1],D=a[0]*a[9],A=a[8]*a[1],E=a[0]*a[5],F=a[4]*a[1],B=e*a[5]+h*a[9]+i*a[13]-(f*a[5]+g*a[9]+j*a[13]),H=f*a[1]+k*a[9]+o*a[13]-(e*a[1]+m*a[9]+n*a[13]),I=g*a[1]+m*a[5]+p*a[13]-(h*a[1]+k*a[5]+q*a[13]),J=j*a[1]+n*a[5]+q*a[9]-(i*a[1]+o*a[5]+p*a[9]),x=a[0]*B+a[4]*H+a[8]*I+a[12]*J;if(Math.abs(x)<
1.0E-5)return osg.log("Warning can't inverse matrix "+a),!1;var x=1/x,K=x*(f*a[4]+g*a[8]+j*a[12]-(e*a[4]+h*a[8]+i*a[12])),e=x*(e*a[0]+m*a[8]+n*a[12]-(f*a[0]+k*a[8]+o*a[12])),g=x*(h*a[0]+k*a[4]+q*a[12]-(g*a[0]+m*a[4]+p*a[12])),i=x*(i*a[0]+o*a[4]+p*a[8]-(j*a[0]+n*a[4]+q*a[8])),j=x*(s*a[7]+z*a[11]+v*a[15]-(u*a[7]+y*a[11]+G*a[15])),n=x*(u*a[3]+w*a[11]+A*a[15]-(s*a[3]+C*a[11]+D*a[15])),o=x*(y*a[3]+C*a[7]+E*a[15]-(z*a[3]+w*a[7]+F*a[15])),p=x*(G*a[3]+D*a[7]+F*a[11]-(v*a[3]+A*a[7]+E*a[11])),q=x*(y*a[10]+
G*a[14]+u*a[6]-(v*a[14]+s*a[6]+z*a[10])),s=x*(D*a[14]+s*a[2]+C*a[10]-(w*a[10]+A*a[14]+u*a[2])),y=x*(w*a[6]+F*a[14]+z*a[2]-(E*a[14]+y*a[2]+C*a[6])),v=x*(E*a[10]+v*a[2]+A*a[6]-(D*a[6]+F*a[10]+G*a[2]));c[0]=x*B;c[1]=x*H;c[2]=x*I;c[3]=x*J;c[4]=K;c[5]=e;c[6]=g;c[7]=i;c[8]=j;c[9]=n;c[10]=o;c[11]=p;c[12]=q;c[13]=s;c[14]=y;c[15]=v;return!0},inverse4x3:function(a,c){var e=a[0],f=a[1],g=a[2],h=a[4],i=a[5],j=a[6],k=a[8],m=a[9],n=a[10];c[0]=i*n-j*m;c[1]=g*m-f*n;c[2]=f*j-g*i;var o=1/(e*c[0]+h*c[1]+k*c[2]);e*=
o;h*=o;k*=o;c[0]*=o;c[1]*=o;c[2]*=o;c[3]=0;c[4]=j*k-h*n;c[5]=e*n-g*k;c[6]=g*h-e*j;c[7]=0;c[8]=h*m-i*k;c[9]=f*k-e*m;c[10]=e*i-f*h;c[11]=0;c[15]=1;e=a[15];f=e-1;f*f>1.0E-6?(f=osg.Matrix._tmp0,c[12]=c[13]=c[14]=0,i=a[3],j=a[7],k=a[11],g=c[0]*i+c[1]*j+c[2]*k,h=c[4]*i+c[5]*j+c[6]*k,m=c[8]*i+c[9]*j+c[10]*k,i=a[12],j=a[13],k=a[14],e=1/(e-(i*g+j*h+k*m)),i*=e,j*=e,k*=e,f[0]=i*g+1,f[1]=j*g,f[2]=k*g,f[3]=-g*e,f[4]=i*h,f[5]=j*h+1,f[6]=k*h,f[7]=-h*e,f[8]=i*m,f[9]=j*m,f[10]=k*m+1,f[11]=-m*e,f[12]=-i,f[13]=-j,f[14]=
-k,f[15]=e,osg.Matrix.preMult(c,f)):(i=a[12],j=a[13],k=a[14],c[12]=-(i*c[0]+j*c[4]+k*c[8]),c[13]=-(i*c[1]+j*c[5]+k*c[9]),c[14]=-(i*c[2]+j*c[6]+k*c[10]));return!0},transpose:function(a,c){if(a===c){var e=a[1],f=a[2],g=a[3],h=a[6],i=a[7],j=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=e;a[6]=a[9];a[7]=a[13];a[8]=f;a[9]=h;a[11]=a[14];a[12]=g;a[13]=i;a[14]=j;return a}else return c[0]=a[0],c[1]=a[4],c[2]=a[8],c[3]=a[12],c[4]=a[1],c[5]=a[5],c[6]=a[9],c[7]=a[13],c[8]=a[2],c[9]=a[6],c[10]=a[10],c[11]=a[14],c[12]=
a[3],c[13]=a[7],c[14]=a[11],c[15]=a[15],c},makePerspective:function(a,c,e,f,g){g===void 0&&(g=[]);var a=e*Math.tan(a*Math.PI/360),h=-a;return osg.Matrix.makeFrustum(h*c,a*c,h,a,e,f,g)},makeScale:function(a,c,e,f){f===void 0&&(f=[]);this.setRow(f,0,a,0,0,0);this.setRow(f,1,0,c,0,0);this.setRow(f,2,0,0,e,0);this.setRow(f,3,0,0,0,1);return f},makeFrustum:function(a,c,e,f,g,h,i){i===void 0&&(i=[]);var j=2*g/(f-e),k=(c+a)/(c-a),e=(f+e)/(f-e),f=-(h+g)/(h-g),h=-2*h*g/(h-g);this.setRow(i,0,2*g/(c-a),0,0,
0);this.setRow(i,1,0,j,0,0);this.setRow(i,2,k,e,f,-1);this.setRow(i,3,0,0,h,0);return i},makeRotateFromQuat:function(a,c){this.makeIdentity(c);return this.setRotateFromQuat(c,a)},setRotateFromQuat:function(a,c){var e=osg.Quat.length2(c);if(Math.abs(e)<=Number.MIN_VALUE)a[0]=0,a[1]=0,a[2]=0,a[4]=0,a[5]=0,a[6]=0,a[8]=0,a[9]=0,a[10]=0;else{var e=e!==1?2/e:2,f,g,h,i,j,k,m,n;f=e*c[0];g=e*c[1];h=e*c[2];e=c[0]*f;k=c[0]*g;m=c[0]*h;i=c[1]*g;j=c[1]*h;n=c[2]*h;f*=c[3];g*=c[3];h*=c[3];a[0]=1-(i+n);a[4]=k-h;a[8]=
m+g;a[1]=k+h;a[5]=1-(e+n);a[9]=j-f;a[2]=m-g;a[6]=j+f;a[10]=1-(e+i)}return a}};osg.ShaderGeneratorType={VertexInit:0,VertexFunction:1,VertexMain:2,VertexEnd:3,FragmentInit:5,FragmentFunction:6,FragmentMain:7,FragmentEnd:8};osg.Shader=function(a,c){this.type=a;this.setText(c)};osg.Shader.VERTEX_SHADER=35633;osg.Shader.FRAGMENT_SHADER=35632;
osg.Shader.prototype={setText:function(a){this.text=a},getText:function(){return this.text},compile:function(){this.shader=gl.createShader(this.type);gl.shaderSource(this.shader,this.text);gl.compileShader(this.shader);if(!gl.getShaderParameter(this.shader,gl.COMPILE_STATUS)&&!gl.isContextLost()){osg.log("can't compile shader:\n"+this.text+"\n");for(var a=("\n"+this.text).split("\n"),c="\n",e=0,f=a.length;e<f;++e)c+=e+" "+a[e]+"\n";osg.log(c);osg.log(gl.getShaderInfoLog(this.shader))}}};
osg.Shader.create=function(a,c){osg.log("osg.Shader.create is deprecated, use new osg.Shader with the same arguments instead");return new osg.Shader(a,c)};osg.StateAttribute=function(){osg.Object.call(this);this._dirty=!0};osg.StateAttribute.prototype=osg.objectInehrit(osg.Object.prototype,{isDirty:function(){return this._dirty},dirty:function(){this._dirty=!0},setDirty:function(a){this._dirty=a}});osg.StateAttribute.OFF=0;osg.StateAttribute.ON=1;osg.StateAttribute.OVERRIDE=2;
osg.StateAttribute.PROTECTED=4;osg.StateAttribute.INHERIT=8;osg.Uniform=function(){this.transpose=!1;this._dirty=!0};
osg.Uniform.prototype={get:function(){return this.data},set:function(a){this.data=a;this.dirty()},dirty:function(){this._dirty=!0},apply:function(a){if(this._dirty)this.update.call(this.glData,this.data),this._dirty=!1;this.glCall(a,this.glData)},applyMatrix:function(a){if(this._dirty)this.update.call(this.glData,this.data),this._dirty=!1;this.glCall(a,this.transpose,this.glData)},update:function(a){for(var c=0,e=a.length;c<e;++c)this[c]=a[c]},_updateFloat1:function(a){this[0]=a[0]},_updateFloat2:function(a){this[0]=
a[0];this[1]=a[1]},_updateFloat3:function(a){this[0]=a[0];this[1]=a[1];this[2]=a[2]},_updateFloat4:function(a){this[0]=a[0];this[1]=a[1];this[2]=a[2];this[3]=a[3]},_updateFloat9:function(a){this[0]=a[0];this[1]=a[1];this[2]=a[2];this[3]=a[3];this[4]=a[4];this[5]=a[5];this[6]=a[6];this[7]=a[7];this[8]=a[8]},_updateFloat16:function(a){this[0]=a[0];this[1]=a[1];this[2]=a[2];this[3]=a[3];this[4]=a[4];this[5]=a[5];this[6]=a[6];this[7]=a[7];this[8]=a[8];this[9]=a[9];this[10]=a[10];this[11]=a[11];this[12]=
a[12];this[13]=a[13];this[14]=a[14];this[15]=a[15]}};osg.Uniform.createFloat1=function(a,c){var e=new osg.Uniform;e.data=[a];e.glCall=function(a,c){gl.uniform1fv(a,c)};e.glData=new osg.Float32Array(e.data);e.update=osg.Uniform.prototype._updateFloat1;e.name=c;return e};osg.Uniform.createFloat2=function(a,c){var e=new osg.Uniform;e.data=a;e.glCall=function(a,c){gl.uniform2fv(a,c)};e.glData=new osg.Float32Array(e.data);e.update=osg.Uniform.prototype._updateFloat2;e.name=c;return e};
osg.Uniform.createFloat3=function(a,c){var e=new osg.Uniform;e.data=a;e.glCall=function(a,c){gl.uniform3fv(a,c)};e.glData=new osg.Float32Array(e.data);e.update=osg.Uniform.prototype._updateFloat3;e.name=c;return e};osg.Uniform.createFloat4=function(a,c){var e=new osg.Uniform;e.data=a;e.glCall=function(a,c){gl.uniform4fv(a,c)};e.glData=new osg.Float32Array(e.data);e.update=osg.Uniform.prototype._updateFloat4;e.name=c;return e};
osg.Uniform.createInt1=function(a,c){var e=new osg.Uniform;e.data=[a];e.glCall=function(a,c){gl.uniform1iv(a,c)};e.glData=new osg.Int32Array(e.data);e.name=c;return e};osg.Uniform.createInt2=function(a,c){var e=new osg.Uniform;e.data=a;e.glCall=function(a,c){gl.uniform2iv(a,c)};e.glData=new osg.Int32Array(e.data);e.name=c;return e};osg.Uniform.createInt3=function(a,c){var e=new osg.Uniform;e.data=a;e.glCall=function(a,c){gl.uniform3iv(a,c)};e.glData=new osg.Int32Array(e.data);e.name=c;return e};
osg.Uniform.createInt4=function(a,c){var e=new osg.Uniform;e.data=a;e.glCall=function(a,c){gl.uniform4iv(a,c)};e.glData=new osg.Int32Array(e.data);e.name=c;return e};osg.Uniform.createMatrix2=function(a,c){var e=new osg.Uniform;e.data=a;e.glCall=function(a,c,e){gl.uniformMatrix2fv(a,c,e)};e.apply=e.applyMatrix;e.transpose=!1;e.glData=new osg.Float32Array(e.data);e.update=osg.Uniform.prototype._updateFloat4;e.name=c;return e};
osg.Uniform.createMatrix3=function(a,c){var e=new osg.Uniform;e.data=a;e.glCall=function(a,c,e){gl.uniformMatrix3fv(a,c,e)};e.apply=e.applyMatrix;e.transpose=!1;e.glData=new osg.Float32Array(e.data);e.update=osg.Uniform.prototype._updateFloat9;e.name=c;return e};
osg.Uniform.createMatrix4=function(a,c){var e=new osg.Uniform;e.data=a;e.glCall=function(a,c,e){gl.uniformMatrix4fv(a,c,e)};e.apply=e.applyMatrix;e.transpose=!1;e.glData=new osg.Float32Array(e.data);e.update=osg.Uniform.prototype._updateFloat16;e.name=c;return e};osg.Node=function(){osg.Object.call(this);this.children=[];this.parents=[];this.nodeMask=-1;this.boundingSphere=new osg.BoundingSphere;this.boundingSphereComputed=!1;this._updateCallbacks=[]};
osg.Node.prototype=osg.objectInehrit(osg.Object.prototype,{getOrCreateStateSet:function(){if(this.stateset===void 0)this.stateset=new osg.StateSet;return this.stateset},getStateSet:function(){return this.stateset},accept:function(a){a.validNodeMask(this)&&(a.pushOntoNodePath(this),a.apply(this),a.popFromNodePath())},dirtyBound:function(){if(this.boundingSphereComputed===!0){this.boundingSphereComputed=!1;for(var a=0,c=this.parents.length;a<c;a++)this.parents[a].dirtyBound()}},setNodeMask:function(a){this.nodeMask=
a},getNodeMask:function(){return this.nodeMask},setStateSet:function(a){this.stateset=a},setUpdateCallback:function(a){this._updateCallbacks[0]=a},getUpdateCallback:function(){return this._updateCallbacks[0]},addUpdateCallback:function(a){this._updateCallbacks.push(a)},getUpdateCallbackList:function(){return this._updateCallbacks},hasChild:function(a){for(var c=0,e=this.children.length;c<e;c++)if(this.children[c]===a)return!0;return!1},addChild:function(a){var c=this.children.push(a);a.addParent(this);
this.dirtyBound();return c},getChildren:function(){return this.children},getParents:function(){return this.parents},addParent:function(a){this.parents.push(a)},removeParent:function(a){for(var c=0,e=this.parents.length,f=this.parents;c<e;c++)if(f[c]===a){f.splice(c,1);break}},removeChildren:function(){var a=this.children;if(a.length!==0){for(var c=0,e=a.length;c<e;c++)a[c].removeParent(this);this.children.splice(0,this.children.length);this.dirtyBound()}},removeChild:function(a){for(var c=0,e=this.children.length;c<
e;c++)this.children[c]===a&&(a.removeParent(this),this.children.splice(c,1),this.dirtyBound())},traverse:function(a){for(var c=0,e=this.children.length;c<e;c++)this.children[c].accept(a)},ascend:function(a){for(var c=0,e=this.parents.length;c<e;c++)this.parents[c].accept(a)},getBound:function(){if(!this.boundingSphereComputed)this.computeBound(this.boundingSphere),this.boundingSphereComputed=!0;return this.boundingSphere},computeBound:function(a){var c=new osg.BoundingBox;c.init();a.init();for(var e=
0,f=this.children.length;e<f;e++){var g=this.children[e];(g.referenceFrame===void 0||g.referenceFrame===osg.Transform.RELATIVE_RF)&&c.expandBySphere(g.getBound())}if(!c.valid())return a;a._center=c.center();c=a._radius=0;for(e=this.children.length;c<e;c++)f=this.children[c],(f.referenceFrame===void 0||f.referenceFrame===osg.Transform.RELATIVE_RF)&&a.expandRadiusBySphere(f.getBound());return a},getWorldMatrices:function(a){var c=function(a){this.nodePaths=[];this.halt=a;osg.NodeVisitor.call(this,osg.NodeVisitor.TRAVERSE_PARENTS)};
c.prototype=osg.objectInehrit(osg.NodeVisitor.prototype,{apply:function(a){a.parents.length===0||a===this.halt?this.nodePaths.push(this.nodePath.slice(0)):this.traverse(a)}});a=new c(a);this.accept(a);for(var c=[],e=0,f=a.nodePaths.length;e<f;e++){var g=a.nodePaths[e];g.length===0?c.push(osg.Matrix.makeIdentity([])):c.push(osg.computeLocalToWorld(g))}return c}});osg.Node.prototype.objectType=osg.objectType.generate("Node");
osg.NodeVisitor=function(a){this.traversalMask=-1;this.nodeMaskOverride=0;this.traversalMode=a;if(a===void 0)this.traversalMode=osg.NodeVisitor.TRAVERSE_ALL_CHILDREN;this.nodePath=[]};osg.NodeVisitor.TRAVERSE_PARENTS=1;osg.NodeVisitor.TRAVERSE_ALL_CHILDREN=2;osg.NodeVisitor._traversalFunctions={};osg.NodeVisitor._traversalFunctions[osg.NodeVisitor.TRAVERSE_PARENTS]=function(a){a.ascend(this)};osg.NodeVisitor._traversalFunctions[osg.NodeVisitor.TRAVERSE_ALL_CHILDREN]=function(a){a.traverse(this)};
osg.NodeVisitor._pushOntoNodePath={};osg.NodeVisitor._pushOntoNodePath[osg.NodeVisitor.TRAVERSE_PARENTS]=function(a){this.nodePath.unshift(a)};osg.NodeVisitor._pushOntoNodePath[osg.NodeVisitor.TRAVERSE_ALL_CHILDREN]=function(a){this.nodePath.push(a)};osg.NodeVisitor._popFromNodePath={};osg.NodeVisitor._popFromNodePath[osg.NodeVisitor.TRAVERSE_PARENTS]=function(){return this.nodePath.shift()};osg.NodeVisitor._popFromNodePath[osg.NodeVisitor.TRAVERSE_ALL_CHILDREN]=function(){this.nodePath.pop()};
osg.NodeVisitor.prototype={setNodeMaskOverride:function(a){this.nodeMaskOverride=a},getNodeMaskOverride:function(){return this.nodeMaskOverride},setTraversalMask:function(a){this.traversalMask=a},getTraversalMask:function(){return this.traversalMask},pushOntoNodePath:function(a){osg.NodeVisitor._pushOntoNodePath[this.traversalMode].call(this,a)},popFromNodePath:function(){osg.NodeVisitor._popFromNodePath[this.traversalMode].call(this)},validNodeMask:function(a){return(this.traversalMask&(this.nodeMaskOverride|
a.getNodeMask()))!==0},apply:function(a){this.traverse(a)},traverse:function(a){osg.NodeVisitor._traversalFunctions[this.traversalMode].call(this,a)}};osg.Transform=function(){osg.Node.call(this);this.referenceFrame=osg.Transform.RELATIVE_RF};osg.Transform.RELATIVE_RF=0;osg.Transform.ABSOLUTE_RF=1;
osg.Transform.prototype=osg.objectInehrit(osg.Node.prototype,{setReferenceFrame:function(a){this.referenceFrame=a},getReferenceFrame:function(){return this.referenceFrame},computeBound:function(a){osg.Node.prototype.computeBound.call(this,a);if(!a.valid())return a;var c=osg.Matrix.makeIdentity([]);this.computeLocalToWorldMatrix(c);var e=osg.Vec3.copy(a._center,[]);e[0]+=a._radius;osg.Matrix.transformVec3(c,e,e);var f=osg.Vec3.copy(a._center,[]);f[1]+=a._radius;osg.Matrix.transformVec3(c,f,f);var g=
osg.Vec3.copy(a._center,[]);g[2]+=a._radius;osg.Matrix.transformVec3(c,g,g);osg.Matrix.transformVec3(c,a._center,a._center);osg.Vec3.sub(e,a._center,e);c=osg.Vec3.length(e);osg.Vec3.sub(f,a._center,f);f=osg.Vec3.length(f);osg.Vec3.sub(g,a._center,g);g=osg.Vec3.length(g);a._radius=c;if(a._radius<f)a._radius=f;if(a._radius<g)a._radius=g;return a}});
osg.computeLocalToWorld=function(a,c){var e=c;e===void 0&&(e=!0);var f=osg.Matrix.makeIdentity([]),g=0;if(e)for(g=a.length-1;g>0;g--)if(e=a[g],e.objectType===osg.Camera.prototype.objectType&&(e.getReferenceFrame!==osg.Transform.RELATIVE_RF||e.getParents().length===0))break;for(e=a.length;g<e;g++){var h=a[g];h.computeLocalToWorldMatrix&&h.computeLocalToWorldMatrix(f)}return f};
osg.BlendFunc=function(a,c,e,f){osg.StateAttribute.call(this);this._sourceFactor=osg.BlendFunc.ONE;this._destinationFactor=osg.BlendFunc.ZERO;this._sourceFactorAlpha=this._sourceFactor;this._destinationFactorAlpha=this._destinationFactor;this._separate=!1;a!==void 0&&this.setSource(a);c!==void 0&&this.setDestination(c);e!==void 0&&this.setSourceAlpha(e);f!==void 0&&this.setDestinationAlpha(f)};osg.BlendFunc.ZERO=0;osg.BlendFunc.ONE=1;osg.BlendFunc.SRC_COLOR=768;osg.BlendFunc.ONE_MINUS_SRC_COLOR=769;
osg.BlendFunc.SRC_ALPHA=770;osg.BlendFunc.ONE_MINUS_SRC_ALPHA=771;osg.BlendFunc.DST_ALPHA=772;osg.BlendFunc.ONE_MINUS_DST_ALPHA=773;osg.BlendFunc.DST_COLOR=774;osg.BlendFunc.ONE_MINUS_DST_COLOR=775;osg.BlendFunc.SRC_ALPHA_SATURATE=776;osg.BlendFunc.BLEND_DST_RGB=32968;osg.BlendFunc.BLEND_SRC_RGB=32969;osg.BlendFunc.BLEND_DST_ALPHA=32970;osg.BlendFunc.BLEND_SRC_ALPHA=32971;osg.BlendFunc.CONSTANT_COLOR=32769;osg.BlendFunc.ONE_MINUS_CONSTANT_COLOR=32770;osg.BlendFunc.CONSTANT_ALPHA=32771;
osg.BlendFunc.ONE_MINUS_CONSTANT_ALPHA=32772;osg.BlendFunc.BLEND_COLOR=32773;
osg.BlendFunc.prototype=osg.objectInehrit(osg.StateAttribute.prototype,{attributeType:"BlendFunc",cloneType:function(){return new osg.BlendFunc},getType:function(){return this.attributeType},getTypeMember:function(){return this.attributeType},setSource:function(a){this.setSourceRGB(a);this.setSourceAlpha(a)},setDestination:function(a){this.setDestinationRGB(a);this.setDestinationAlpha(a)},checkSeparate:function(){return this._sourceFactor!==this._sourceFactorAlpha||this._destinationFactor!==this._destinationFactorAlpha},
setSourceRGB:function(a){this._sourceFactor=typeof a==="string"?osg.BlendFunc[a]:a;this._separate=this.checkSeparate()},setSourceAlpha:function(a){this._sourceFactorAlpha=typeof a==="string"?osg.BlendFunc[a]:a;this._separate=this.checkSeparate()},setDestinationRGB:function(a){this._destinationFactor=typeof a==="string"?osg.BlendFunc[a]:a;this._separate=this.checkSeparate()},setDestinationAlpha:function(a){this._destinationFactorAlpha=typeof a==="string"?osg.BlendFunc[a]:a;this._separate=this.checkSeparate()},
apply:function(a){a=a.getGraphicContext();a.enable(a.BLEND);this._separate?a.blendFuncSeparate(this._sourceFactor,this._destinationFactor,this._sourceFactorAlpha,this._destinationFactorAlpha):a.blendFunc(this._sourceFactor,this._destinationFactor)}});osg.BoundingBox=function(){this.init()};
osg.BoundingBox.prototype={_cache_radius2_tmp:[0,0,0],init:function(){this._min=[Infinity,Infinity,Infinity];this._max=[-Infinity,-Infinity,-Infinity]},valid:function(){return this._max[0]>=this._min[0]&&this._max[1]>=this._min[1]&&this._max[2]>=this._min[2]},expandBySphere:function(a){if(a.valid()){var c=this._max,e=this._min;e[0]=Math.min(e[0],a._center[0]-a._radius);e[1]=Math.min(e[1],a._center[1]-a._radius);e[2]=Math.min(e[2],a._center[2]-a._radius);c[0]=Math.max(c[0],a._center[0]+a._radius);
c[1]=Math.max(c[1],a._center[1]+a._radius);c[2]=Math.max(c[2],a._center[2]+a._radius)}},expandByVec3:function(a){var c=this._min,e=this._max;c[0]=Math.min(c[0],a[0]);c[1]=Math.min(c[1],a[1]);c[2]=Math.min(c[2],a[2]);e[0]=Math.max(e[0],a[0]);e[1]=Math.max(e[1],a[1]);e[2]=Math.max(e[2],a[2])},center:function(){var a=this._min,c=this._max;return[(a[0]+c[0])*0.5,(a[1]+c[1])*0.5,(a[2]+c[2])*0.5]},radius:function(){return Math.sqrt(this.radius2())},radius2:function(){var a=this._min,c=this._max,e=this._cache_radius2_tmp;
e[0]=c[0]-a[0];e[1]=c[1]-a[1];e[2]=c[2]-a[2];return 0.25*(e[0]*e[0]+e[1]*e[1]+e[2]*e[2])},corner:function(a){ret=[0,0,0];ret[0]=a&1?this._max[0]:this._min[0];ret[1]=a&2?this._max[1]:this._min[1];ret[2]=a&4?this._max[2]:this._min[2];return ret}};osg.BoundingSphere=function(){this._center=[0,0,0];this._radius=-1};
osg.BoundingSphere.prototype={init:function(){this._center=[0,0,0];this._radius=-1},valid:function(){return this._radius>=0},set:function(a,c){this._center=a;this._radius=c},center:function(){return this._center},radius:function(){return this._radius},radius2:function(){return this._radius*this._radius},expandByBox:function(a){if(a.valid()){var c;if(this.valid()){var e=new osg.BoundingBox;e._min[0]=a._min[0];e._min[1]=a._min[1];e._min[2]=a._min[2];e._max[0]=a._max[0];e._max[1]=a._max[1];e._max[2]=
a._max[2];for(var f=0;f<8;f++){var g=osg.Vec3.sub(a.corner(c),this._center,[]);osg.Vec3.normalize(g,g);nv[0]*=-this._radius;nv[1]*=-this._radius;nv[2]*=-this._radius;nv[0]+=this._center[0];nv[1]+=this._center[1];nv[2]+=this._center[2];e.expandBy(nv)}c=e.center();this._center[0]=c[0];this._center[1]=c[1];this._center[2]=c[2];this._radius=e.radius()}else c=a.center(),this._center[0]=c[0],this._center[1]=c[1],this._center[2]=c[2],this._radius=a.radius()}},expandByVec3:function(a){this.valid()?(a=osg.Vec3.sub(a,
this.center(),[]),r=osg.Vec3.length(a),r>this.radius()&&(dr=(r-this.radius())*0.5,this._center[0]+=a[0]*(dr/r),this._center[1]+=a[1]*(dr/r),this._center[2]+=a[2]*(dr/r),this._radius+=dr)):(this._center[0]=a[0],this._center[1]=a[1],this._center[2]=a[2],this._radius=0)},expandRadiusBySphere:function(a){if(a.valid())if(this.valid()){var c=osg.Vec3.sub,e=osg.Vec3.length,a=e(c(a._center,this._center,[]))+a._radius;if(a>this._radius)this._radius=a}else this._center=osg.Vec3.copy(a._center,[]),this._radius=
a._radius},expandBy:function(a){if(a.valid())if(this.valid()){var c=osg.Vec3.sub(this.center(),a.center(),[]);d=osg.Vec3.length(c);if(!(d+a.radius()<=this.radius()))d+this.radius()<=a.radius()?(this._center[0]=a._center[0],this._center[1]=a._center[1],this._center[2]=a._center[2],this._radius=a._radius):(new_radius=(this.radius()+d+a.radius())*0.5,ratio=(new_radius-this.radius())/d,this._center[0]+=(a._center[0]-this._center[0])*ratio,this._center[1]+=(a._center[1]-this._center[1])*ratio,this._center[2]+=
(a._center[2]-this._center[2])*ratio,this._radius=new_radius)}else this._center[0]=a._center[0],this._center[1]=a._center[1],this._center[2]=a._center[2],this._radius=a.radius()},contains:function(a){a=osg.Vec3.sub(a,this.center(),[]);return valid()&&osg.Vec3.length2(a)<=radius2()},intersects:function(a){var c=osg.Vec3.length2(osg.Vec3.sub(this.center(),a.center(),[]));return valid()&&a.valid()&&c<=(this.radius()+a.radius())*(this.radius()+a.radius())}};
osg.BufferArray=function(a,c,e){if(osg.BufferArray.instanceID===void 0)osg.BufferArray.instanceID=0;this.instanceID=osg.BufferArray.instanceID;osg.BufferArray.instanceID+=1;this.dirty();this._itemSize=e;typeof a==="string"&&(a=osg.BufferArray[a]);this._type=a;this._elements=this._type===osg.BufferArray.ELEMENT_ARRAY_BUFFER?new osg.Uint16Array(c):new osg.Float32Array(c)};osg.BufferArray.ELEMENT_ARRAY_BUFFER=34963;osg.BufferArray.ARRAY_BUFFER=34962;
osg.BufferArray.prototype={releaseGLObjects:function(a){this._buffer!==void 0&&this._buffer!==null&&a.deleteBuffer(this._buffer);this._buffer=void 0},bind:function(a){var c=this._type,e=this._buffer;if(e)a.bindBuffer(c,e);else if(!e&&this._elements.length>0)this._buffer=a.createBuffer(),this._numItems=this._elements.length/this._itemSize,a.bindBuffer(c,this._buffer)},getItemSize:function(){return this._itemSize},dirty:function(){this._dirty=!0},isDirty:function(){return this._dirty},compile:function(a){if(this._dirty)a.bufferData(this._type,
this._elements,a.STATIC_DRAW),this._dirty=!1},getElements:function(){return this._elements}};osg.BufferArray.create=function(a,c,e){osg.log("osg.BufferArray.create is deprecated, use new osg.BufferArray with same arguments instead");return new osg.BufferArray(a,c,e)};osg.CullFace=function(a){osg.StateAttribute.call(this);if(a===void 0)a=osg.CullFace.BACK;this.setMode(a)};osg.CullFace.DISABLE=0;osg.CullFace.FRONT=1028;osg.CullFace.BACK=1029;osg.CullFace.FRONT_AND_BACK=1032;
osg.CullFace.prototype=osg.objectInehrit(osg.StateAttribute.prototype,{attributeType:"CullFace",cloneType:function(){return new osg.CullFace},getType:function(){return this.attributeType},getTypeMember:function(){return this.attributeType},setMode:function(a){typeof a==="string"&&(a=osg.CullFace[a]);this._mode=a},getMode:function(){return this._mode},apply:function(a){a=a.getGraphicContext();this._mode===osg.CullFace.DISABLE?a.disable(a.CULL_FACE):(a.enable(a.CULL_FACE),a.cullFace(this._mode));this._dirty=
!1}});osg.CullSettings=function(){this._computeNearFar=!0;this._nearFarRatio=5.0E-4;var a=[0,0,-1];this.bbCornerFar=(a[0]>=0?1:0)|(a[1]>=0?2:0)|(a[2]>=0?4:0);this.bbCornerNear=~this.bbCornerFar&7};osg.CullSettings.prototype={setCullSettings:function(a){this._computeNearFar=a._computeNearFar;this._nearFarRatio=a._nearFarRatio},setNearFarRatio:function(a){this._nearFarRatio=a},getNearFarRatio:function(){return this._nearFarRatio},setComputeNearFar:function(a){this._computeNearFar=a},getComputeNearFar:function(){return this._computeNearFar}};
osg.Camera=function(){osg.Transform.call(this);osg.CullSettings.call(this);this.viewport=void 0;this.setClearColor([0,0,0,1]);this.setClearDepth(1);this.setClearMask(osg.Camera.COLOR_BUFFER_BIT|osg.Camera.DEPTH_BUFFER_BIT);this.setViewMatrix(osg.Matrix.makeIdentity([]));this.setProjectionMatrix(osg.Matrix.makeIdentity([]));this.renderOrder=osg.Camera.NESTED_RENDER;this.renderOrderNum=0};osg.Camera.PRE_RENDER=0;osg.Camera.NESTED_RENDER=1;osg.Camera.POST_RENDER=2;osg.Camera.COLOR_BUFFER_BIT=16384;
osg.Camera.DEPTH_BUFFER_BIT=256;osg.Camera.STENCIL_BUFFER_BIT=1024;
osg.Camera.prototype=osg.objectInehrit(osg.CullSettings.prototype,osg.objectInehrit(osg.Transform.prototype,{setClearDepth:function(a){this.clearDepth=a},getClearDepth:function(){return this.clearDepth},setClearMask:function(a){this.clearMask=a},getClearMask:function(){return this.clearMask},setClearColor:function(a){this.clearColor=a},getClearColor:function(){return this.clearColor},setViewport:function(a){this.viewport=a;this.getOrCreateStateSet().setAttributeAndMode(a)},getViewport:function(){return this.viewport},
setViewMatrix:function(a){this.modelviewMatrix=a},setProjectionMatrix:function(a){this.projectionMatrix=a},setProjectionMatrixAsOrtho:function(a,c,e,f,g,h){osg.Matrix.makeOrtho(a,c,e,f,g,h,this.getProjectionMatrix())},getViewMatrix:function(){return this.modelviewMatrix},getProjectionMatrix:function(){return this.projectionMatrix},getRenderOrder:function(){return this.renderOrder},setRenderOrder:function(a,c){this.renderOrder=a;this.renderOrderNum=c},attachTexture:function(a,c,e){this.frameBufferObject&&
this.frameBufferObject.dirty();e===void 0&&(e=0);if(this.attachments===void 0)this.attachments={};this.attachments[a]={texture:c,level:e}},attachRenderBuffer:function(a,c){this.frameBufferObject&&this.frameBufferObject.dirty();if(this.attachments===void 0)this.attachments={};this.attachments[a]={format:c}},computeLocalToWorldMatrix:function(a){this.referenceFrame===osg.Transform.RELATIVE_RF&&osg.Matrix.preMult(a,this.modelviewMatrix);return!0},computeWorldToLocalMatrix:function(a){var c=[];osg.Matrix.inverse(this.modelviewMatrix,
c);this.referenceFrame===osg.Transform.RELATIVE_RF&&osg.Matrix.postMult(c,a);return!0}}));osg.Camera.prototype.objectType=osg.objectType.generate("Camera");osg.Depth=function(a,c,e,f){osg.StateAttribute.call(this);this._func=osg.Depth.LESS;this._near=0;this._far=1;this._writeMask=!0;if(a!==void 0)this._func=typeof a==="string"?osg.Depth[a]:a;if(c!==void 0)this._near=c;if(e!==void 0)this._far=e;if(f!==void 0)this._writeMask=f};osg.Depth.DISABLE=0;osg.Depth.NEVER=512;osg.Depth.LESS=513;
osg.Depth.EQUAL=514;osg.Depth.LEQUAL=515;osg.Depth.GREATE=516;osg.Depth.NOTEQU=517;osg.Depth.GEQUAL=518;osg.Depth.ALWAYS=519;
osg.Depth.prototype=osg.objectInehrit(osg.StateAttribute.prototype,{attributeType:"Depth",cloneType:function(){return new osg.Depth},getType:function(){return this.attributeType},getTypeMember:function(){return this.attributeType},setRange:function(a,c){this._near=a;this._far=c},setWriteMask:function(a){this._writeMask=a},apply:function(a){a=a.getGraphicContext();this._func===0?a.disable(a.DEPTH_TEST):(a.enable(a.DEPTH_TEST),a.depthFunc(this._func),a.depthMask(this._writeMask),a.depthRange(this._near,
this._far))}});osg.WGS_84_RADIUS_EQUATOR=6378137;osg.WGS_84_RADIUS_POLAR=6356752.3142;osg.EllipsoidModel=function(){this._radiusEquator=osg.WGS_84_RADIUS_EQUATOR;this._radiusPolar=osg.WGS_84_RADIUS_POLAR;this.computeCoefficients()};
osg.EllipsoidModel.prototype={setRadiusEquator:function(){this._radiusEquator=radius;this.computeCoefficients()},getRadiusEquator:function(){return this._radiusEquator},setRadiusPolar:function(a){this._radiusPolar=a;this.computeCoefficients()},getRadiusPolar:function(){return this._radiusPolar},convertLatLongHeightToXYZ:function(a,c,e){var f=Math.sin(a),g=Math.cos(a),a=this._radiusEquator/Math.sqrt(1-this._eccentricitySquared*f*f),h=(a+e)*g*Math.cos(c),c=(a+e)*g*Math.sin(c);return[h,c,(a*(1-this._eccentricitySquared)+
e)*f]},convertXYZToLatLongHeight:function(a,c,e){var f=Math.sqrt(a*a+c*c),g=Math.atan2(e*this._radiusEquator,f*this._radiusPolar),h=(this._radiusEquator*this._radiusEquator-this._radiusPolar*this._radiusPolar)/(this._radiusPolar*this._radiusPolar),i=Math.sin(g),g=Math.cos(g);latitude=Math.atan((e+h*this._radiusPolar*i*i*i)/(f-this._eccentricitySquared*this._radiusEquator*g*g*g));longitude=Math.atan2(c,a);a=Math.sin(latitude);a=this._radiusEquator/Math.sqrt(1-this._eccentricitySquared*a*a);height=
f/Math.cos(latitude)-a;return[latitude,longitude,height]},computeLocalUpVector:function(a,c,e){var f,g,a=this.convertXYZToLatLongHeight(a,c,e,f,g,void 0);f=a[0];g=a[1];return[Math.cos(g)*Math.cos(f),Math.sin(g)*Math.cos(f),Math.sin(f)]},isWGS84:function(){return this._radiusEquator==osg.WGS_84_RADIUS_EQUATOR&&this._radiusPolar==osg.WGS_84_RADIUS_POLAR},computeCoefficients:function(){var a=(this._radiusEquator-this._radiusPolar)/this._radiusEquator;this._eccentricitySquared=2*a-a*a},computeLocalToWorldTransformFromLatLongHeight:function(a,
c,e){e=this.convertLatLongHeightToXYZ(a,c,e);e=osg.Matrix.makeTranslate(e[0],e[1],e[2],[]);this.computeCoordinateFrame(a,c,e);return e},computeLocalToWorldTransformFromXYZ:function(a,c,e){var f=this.convertXYZToLatLongHeight(a,c,e),a=osg.Matrix.makeTranslate(a,c,e);this.computeCoordinateFrame(f[0],f[1],a);return a},computeCoordinateFrame:function(a,c,e){var a=[Math.cos(c)*Math.cos(a),Math.sin(c)*Math.cos(a),Math.sin(a)],c=[-Math.sin(c),Math.cos(c),0],f=osg.Vec3.cross(a,c,[]);osg.Matrix.set(e,0,0,
c[0]);osg.Matrix.set(e,0,1,c[1]);osg.Matrix.set(e,0,2,c[2]);osg.Matrix.set(e,1,0,f[0]);osg.Matrix.set(e,1,1,f[1]);osg.Matrix.set(e,1,2,f[2]);osg.Matrix.set(e,2,0,a[0]);osg.Matrix.set(e,2,1,a[1]);osg.Matrix.set(e,2,2,a[2])}};osg.FrameBufferObject=function(){osg.StateAttribute.call(this);this.fbo=void 0;this.attachments=[];this.dirty()};osg.FrameBufferObject.COLOR_ATTACHMENT0=36064;osg.FrameBufferObject.DEPTH_ATTACHMENT=36096;osg.FrameBufferObject.DEPTH_COMPONENT16=33189;
osg.FrameBufferObject.prototype=osg.objectInehrit(osg.StateAttribute.prototype,{attributeType:"FrameBufferObject",cloneType:function(){return new osg.FrameBufferObject},getType:function(){return this.attributeType},getTypeMember:function(){return this.attributeType},setAttachment:function(a){this.attachments.push(a)},apply:function(a){var c=a.getGraphicContext();if(this.attachments.length>0)if(this.isDirty()){if(!this.fbo)this.fbo=c.createFramebuffer();c.bindFramebuffer(c.FRAMEBUFFER,this.fbo);for(var e=
!1,f=0,g=this.attachments.length;f<g;++f)if(this.attachments[f].texture===void 0)e=c.createRenderbuffer(),c.bindRenderbuffer(c.RENDERBUFFER,e),c.renderbufferStorage(c.RENDERBUFFER,this.attachments[f].format,this.attachments[f].width,this.attachments[f].height),c.framebufferRenderbuffer(c.FRAMEBUFFER,this.attachments[f].attachment,c.RENDERBUFFER,e),e=!0;else{var h=this.attachments[f].texture;a.applyTextureAttribute(0,h);c.framebufferTexture2D(c.FRAMEBUFFER,this.attachments[f].attachment,h.getTextureTarget(),
h.getTextureObject(),this.attachments[f].level)}a=c.checkFramebufferStatus(c.FRAMEBUFFER);a!==36053&&osg.log("framebuffer error check "+a);e&&c.bindRenderbuffer(c.RENDERBUFFER,null);this.setDirty(!1)}else c.bindFramebuffer(c.FRAMEBUFFER,this.fbo),osg.reportErrorGL===!0&&(a=c.checkFramebufferStatus(c.FRAMEBUFFER),a!==36053&&osg.log("framebuffer error check "+a));else c.bindFramebuffer(c.FRAMEBUFFER,null)}});
osg.FrameStamp=function(){var a=0,c=0,e=0;this.setReferenceTime=function(a){c=a};this.setSimulationTime=function(a){e=a};this.getReferenceTime=function(){return c};this.getSimulationTime=function(){return e};this.setFrameNumber=function(c){a=c};this.getFrameNumber=function(){return a}};osg.Geometry=function(){osg.Node.call(this);this.primitives=[];this.attributes={};this.boundingBox=new osg.BoundingBox;this.boundingBoxComputed=!1;this.cacheAttributeList={}};
osg.Geometry.prototype=osg.objectInehrit(osg.Node.prototype,{releaseGLObjects:function(a){for(var c in this.attributes)this.attributes[c].releaseGLObjects(a);c=0;for(var e=this.primitives.length;c<e;c++){var f=this.primitives[c];f.getIndices!==void 0&&f.getIndices()!==void 0&&f.getIndices()!==null&&f.indices.releaseGLObjects(a)}},dirtyBound:function(){if(this.boundingBoxComputed===!0)this.boundingBoxComputed=!1;osg.Node.dirtyBound.call(this)},dirty:function(){this.cacheAttributeList={}},getPrimitives:function(){return this.primitives},
getAttributes:function(){return this.attributes},getVertexAttributeList:function(){return this.attributes},getPrimitiveSetList:function(){return this.primitives},drawImplementation:function(a){var c=a.getLastProgramApplied(),e=c.instanceID;if(this.cacheAttributeList[e]===void 0){var f,g=c.attributesCache,h=[],c="//generated by Geometry::implementation\n";c+="state.lazyDisablingOfVertexAttributes();\n";for(var i=0,j=g.attributeKeys.length;i<j;i++){var k=g.attributeKeys[i];f=g[k];this.attributes[k]!==
void 0&&(h.push(f),c+="state.setVertexAttribArray("+f+', this.attributes["'+k+'"], false);\n')}c+="state.applyDisablingOfVertexAttributes();\n";g=this.primitives;c+="var primitives = this.primitives;\n";f=0;for(g=g.length;f<g;++f)c+="primitives["+f+"].draw(state);\n";this.cacheAttributeList[e]=new Function("state",c)}this.cacheAttributeList[e].call(this,a)},drawImplementationDummy:function(a){a.getLastProgramApplied();for(var a=0,c=this.primitives.length;a<c;++a);},getBoundingBox:function(){if(!this.boundingBoxComputed)this.computeBoundingBox(this.boundingBox),
this.boundingBoxComputed=!0;return this.boundingBox},computeBoundingBox:function(a){var c=this.getAttributes().Vertex;if(c&&c.getItemSize()>2){var e=[0,0,0];vertexes=c.getElements();for(var c=0,f=vertexes.length;c<f;c+=3)e[0]=vertexes[c],e[1]=vertexes[c+1],e[2]=vertexes[c+2],a.expandByVec3(e)}return a},computeBound:function(a){a.init();var c=this.getBoundingBox();a.expandByBox(c);return a}});osg.Geometry.prototype.objectType=osg.objectType.generate("Geometry");
osg.Light=function(a){osg.StateAttribute.call(this);a===void 0&&(a=0);this._ambient=[0.2,0.2,0.2,1];this._diffuse=[0.8,0.8,0.8,1];this._specular=[0.2,0.2,0.2,1];this._position=[0,0,1,0];this._direction=[0,0,-1];this._spotCutoffEnd=this._spotCutoff=180;this._constantAttenuation=1;this._quadraticAttenuation=this._linearAttenuation=0;this._lightUnit=a;this._enabled=0;this.dirty()};osg.Light.uniforms={};
osg.Light.prototype=osg.objectInehrit(osg.StateAttribute.prototype,{attributeType:"Light",cloneType:function(){return new osg.Light(this._lightUnit)},getType:function(){return this.attributeType},getTypeMember:function(){return this.attributeType+this._lightUnit},getOrCreateUniforms:function(){var a=osg.Light.uniforms,c=this.getTypeMember();if(a[c]===void 0){var e=osg.Uniform;a[c]={ambient:e.createFloat4([0.2,0.2,0.2,1],this.getUniformName("ambient")),diffuse:e.createFloat4([0.8,0.8,0.8,1],this.getUniformName("diffuse")),
specular:e.createFloat4([0.2,0.2,0.2,1],this.getUniformName("specular")),position:e.createFloat4([0,0,1,0],this.getUniformName("position")),direction:e.createFloat3([0,0,1],this.getUniformName("direction")),spotCutoff:e.createFloat1(180,this.getUniformName("spotCutoff")),spotBlend:e.createFloat1(0.01,this.getUniformName("spotBlend")),constantAttenuation:e.createFloat1(0,this.getUniformName("constantAttenuation")),linearAttenuation:e.createFloat1(0,this.getUniformName("linearAttenuation")),quadraticAttenuation:e.createFloat1(0,
this.getUniformName("quadraticAttenuation")),enable:e.createInt1(0,this.getUniformName("enable")),matrix:e.createMatrix4(osg.Matrix.makeIdentity([]),this.getUniformName("matrix")),invMatrix:e.createMatrix4(osg.Matrix.makeIdentity([]),this.getUniformName("invMatrix"))};a[c].uniformKeys=Object.keys(a[c])}return a[c]},setPosition:function(a){osg.Vec4.copy(a,this._position)},setAmbient:function(a){this._ambient=a;this.dirty()},setSpecular:function(a){this._specular=a;this.dirty()},setDiffuse:function(a){this._diffuse=
a;this.dirty()},setSpotCutoff:function(a){this._spotCutoff=a;this.dirty()},setSpotBlend:function(a){this._spotBlend=a;this.dirty()},setConstantAttenuation:function(a){this._constantAttenuation=a;this.dirty()},setLinearAttenuation:function(a){this._linearAttenuation=a;this.dirty()},setQuadraticAttenuation:function(a){this._quadraticAttenuation=a;this.dirty()},setDirection:function(a){this._direction=a;this.dirty()},setLightNumber:function(a){this._lightUnit=a;this.dirty()},getPrefix:function(){return this.getType()+
this._lightUnit},getParameterName:function(a){return this.getPrefix()+"_"+a},getUniformName:function(a){return this.getPrefix()+"_uniform_"+a},applyPositionedUniform:function(a){var c=this.getOrCreateUniforms();osg.Matrix.copy(a,c.matrix.get());c.matrix.dirty();osg.Matrix.copy(a,c.invMatrix.get());c.invMatrix.get()[12]=0;c.invMatrix.get()[13]=0;c.invMatrix.get()[14]=0;osg.Matrix.inverse(c.invMatrix.get(),c.invMatrix.get());osg.Matrix.transpose(c.invMatrix.get(),c.invMatrix.get());c.invMatrix.dirty()},
apply:function(){var a=this.getOrCreateUniforms();a.ambient.set(this._ambient);a.diffuse.set(this._diffuse);a.specular.set(this._specular);a.position.set(this._position);a.direction.set(this._direction);var c=Math.cos(this._spotCutoff*Math.PI/180);a.spotCutoff.get()[0]=c;a.spotCutoff.dirty();a.spotBlend.get()[0]=(1-c)*this._spotBlend;a.spotBlend.dirty();a.constantAttenuation.get()[0]=this._constantAttenuation;a.constantAttenuation.dirty();a.linearAttenuation.get()[0]=this._linearAttenuation;a.linearAttenuation.dirty();
a.quadraticAttenuation.get()[0]=this._quadraticAttenuation;a.quadraticAttenuation.dirty();this.setDirty(!1)},_replace:function(a,c,e,f){for(var g=0,h=c.length;g<h;g++)e=e.replace(RegExp(a+c[g],"g"),f.call(this,c[g]));return e},_shader:{},_shaderCommon:{},generateShader:function(a){return this._shader[a]?this._shader[a].call(this):""},generateShaderCommon:function(a){return this._shaderCommon[a]?this._shaderCommon[a].call(this):""}});
osg.Light.prototype._shaderCommon[osg.ShaderGeneratorType.VertexInit]=function(){return"\nvarying vec3 FragNormal;\nvarying vec3 FragEyeVector;\n\n"};osg.Light.prototype._shaderCommon[osg.ShaderGeneratorType.VertexFunction]=function(){return"\nvec3 computeNormal() {\n return vec3(NormalMatrix * vec4(Normal, 0.0));\n}\n\nvec3 computeEyeVertex() {\n return vec3(ModelViewMatrix * vec4(Vertex,1.0));\n}\n\n"};osg.Light.prototype._shaderCommon[osg.ShaderGeneratorType.VertexMain]=function(){return"\n FragEyeVector = computeEyeVertex();\n FragNormal = computeNormal();\n"};
osg.Light.prototype._shaderCommon[osg.ShaderGeneratorType.FragmentInit]=function(){return"varying vec3 FragNormal;\nvarying vec3 FragEyeVector;\nvec4 LightColor = vec4(0.0);\n"};osg.Light.prototype._shaderCommon[osg.ShaderGeneratorType.FragmentFunction]=function(){return"\nfloat getLightAttenuation(vec3 lightDir, float constant, float linear, float quadratic) {\n \n float d = length(lightDir);\n float att = 1.0 / ( constant + linear*d + quadratic*d*d);\n return att;\n}\nvec4 computeLightContribution(vec4 materialEmission,\n vec4 materialAmbient,\n vec4 materialDiffuse,\n vec4 materialSpecular,\n float materialShininess,\n vec4 lightAmbient,\n vec4 lightDiffuse,\n vec4 lightSpecular,\n vec3 normal,\n vec3 eye,\n vec3 lightDirection,\n vec3 lightSpotDirection,\n float lightCosSpotCutoff,\n float lightSpotBlend,\n float lightAttenuation)\n{\n vec3 L = lightDirection;\n vec3 N = normal;\n float NdotL = max(dot(L, N), 0.0);\n float halfTerm = NdotL;\n vec4 ambient = lightAmbient;\n vec4 diffuse = vec4(0.0);\n vec4 specular = vec4(0.0);\n float spot = 0.0;\n\n if (NdotL > 0.0) {\n vec3 E = eye;\n vec3 R = reflect(-L, N);\n float RdotE = pow( max(dot(R, E), 0.0), materialShininess );\n\n vec3 D = lightSpotDirection;\n spot = 1.0;\n if (lightCosSpotCutoff > 0.0) {\n float cosCurAngle = dot(-L, D);\n if (cosCurAngle < lightCosSpotCutoff) {\n spot = 0.0;\n } else {\n if (lightSpotBlend > 0.0)\n spot = cosCurAngle * smoothstep(0.0, 1.0, (cosCurAngle-lightCosSpotCutoff)/(lightSpotBlend));\n }\n }\n diffuse = lightDiffuse * ((halfTerm));\n specular = lightSpecular * RdotE;\n }\n\n return materialEmission + (materialAmbient*ambient + (materialDiffuse*diffuse + materialSpecular*specular) * spot) * lightAttenuation;\n}\nfloat linearrgb_to_srgb1(float c)\n{\n float v = 0.0;\n if(c < 0.0031308) {\n if ( c > 0.0)\n v = c * 12.92;\n } else {\n v = 1.055 * pow(c, 1.0/2.4) - 0.055;\n }\n return v;\n}\nvec4 linearrgb_to_srgb(vec4 col_from)\n{\n vec4 col_to;\n col_to.r = linearrgb_to_srgb1(col_from.r);\n col_to.g = linearrgb_to_srgb1(col_from.g);\n col_to.b = linearrgb_to_srgb1(col_from.b);\n col_to.a = col_from.a;\n return col_to;\n}\n"};
osg.Light.prototype._shaderCommon[osg.ShaderGeneratorType.FragmentMain]=function(){return"\n vec3 normal = normalize(FragNormal);\n vec3 eyeVector = normalize(-FragEyeVector);\n"};osg.Light.prototype._shaderCommon[osg.ShaderGeneratorType.FragmentEnd]=function(){return"\n fragColor *= LightColor;\n //fragColor = linearrgb_to_srgb(fragColor * LightColor);\n"};
osg.Light.prototype._shader[osg.ShaderGeneratorType.FragmentInit]=function(){var a="\nuniform vec4 Light_position;\nuniform vec3 Light_direction;\nuniform mat4 Light_matrix;\nuniform mat4 Light_invMatrix;\nuniform float Light_constantAttenuation;\nuniform float Light_linearAttenuation;\nuniform float Light_quadraticAttenuation;\nuniform vec4 Light_ambient;\nuniform vec4 Light_diffuse;\nuniform vec4 Light_specular;\nuniform float Light_spotCutoff;\nuniform float Light_spotBlend;\n";uniforms=Object.keys(this.getOrCreateUniforms());
return a=this._replace("Light_",uniforms,a,this.getUniformName)};
osg.Light.prototype._shader[osg.ShaderGeneratorType.FragmentMain]=function(){var a;a=this._replace("",["lightEye","lightDir","spotDirection","attenuation"],"\n vec3 lightEye = vec3(Light_matrix * Light_position);\n vec3 lightDir;\n if (Light_position[3] == 1.0) {\n lightDir = lightEye - FragEyeVector;\n } else {\n lightDir = lightEye;\n }\n vec3 spotDirection = normalize(mat3(Light_invMatrix)*Light_direction);\n float attenuation = getLightAttenuation(lightDir, Light_constantAttenuation, Light_linearAttenuation, Light_quadraticAttenuation);\n lightDir = normalize(lightDir);\n LightColor += computeLightContribution(MaterialEmission,\n MaterialAmbient,\n MaterialDiffuse, \n MaterialSpecular,\n MaterialShininess,\n Light_ambient,\n Light_diffuse,\n Light_specular,\n normal,\n eyeVector,\n lightDir,\n spotDirection,\n Light_spotCutoff,\n Light_spotBlend,\n attenuation);\n",this.getParameterName);
uniforms=Object.keys(this.getOrCreateUniforms());return a=this._replace("Light_",uniforms,a,this.getUniformName)};osg.LightSource=function(){osg.Node.call(this);this._light=void 0};osg.LightSource.prototype=osg.objectInehrit(osg.Node.prototype,{getLight:function(){return this._light},setLight:function(a){this._light=a}});osg.LightSource.prototype.objectType=osg.objectType.generate("LightSource");
osg.LineWidth=function(a){osg.StateAttribute.call(this);this.lineWidth=1;if(a!==void 0)this.lineWidth=a};osg.LineWidth.prototype=osg.objectInehrit(osg.StateAttribute.prototype,{attributeType:"LineWidth",cloneType:function(){return new osg.LineWidth},getType:function(){return this.attributeType},getTypeMember:function(){return this.attributeType},apply:function(a){a.getGraphicContext().lineWidth(this.lineWidth)}});
osg.Material=function(){osg.StateAttribute.call(this);this.ambient=[0.2,0.2,0.2,1];this.diffuse=[0.8,0.8,0.8,1];this.specular=[0,0,0,1];this.emission=[0,0,0,1];this.shininess=12.5;this._dirty=!0};
osg.Material.prototype=osg.objectInehrit(osg.StateAttribute.prototype,{setEmission:function(a){osg.Vec4.copy(a,this.emission);this._dirty=!0},setAmbient:function(a){osg.Vec4.copy(a,this.ambient);this._dirty=!0},setSpecular:function(a){osg.Vec4.copy(a,this.specular);this._dirty=!0},setDiffuse:function(a){osg.Vec4.copy(a,this.diffuse);this._dirty=!0},setShininess:function(a){this.shininess=a;this._dirty=!0},getEmission:function(){return this.emission},getAmbient:function(){return this.ambient},getSpecular:function(){return this.specular},
getDiffuse:function(){return this.diffuse},getShininess:function(){return this.shininess},attributeType:"Material",cloneType:function(){return new osg.Material},getType:function(){return this.attributeType},getTypeMember:function(){return this.attributeType},getOrCreateUniforms:function(){if(osg.Material.uniforms===void 0){osg.Material.uniforms={ambient:osg.Uniform.createFloat4([0,0,0,0],"MaterialAmbient"),diffuse:osg.Uniform.createFloat4([0,0,0,0],"MaterialDiffuse"),specular:osg.Uniform.createFloat4([0,
0,0,0],"MaterialSpecular"),emission:osg.Uniform.createFloat4([0,0,0,0],"MaterialEmission"),shininess:osg.Uniform.createFloat1([0],"MaterialShininess")};var a=[],c;for(c in osg.Material.uniforms)a.push(c);osg.Material.uniforms.uniformKeys=a}return osg.Material.uniforms},apply:function(){var a=this.getOrCreateUniforms();a.ambient.set(this.ambient);a.diffuse.set(this.diffuse);a.specular.set(this.specular);a.emission.set(this.emission);a.shininess.set([this.shininess]);this._dirty=!1},_shader:{},_shaderCommon:{},
generateShader:function(a){return this._shader[a]?this._shader[a].call(this):""}});osg.Material.prototype._shader[osg.ShaderGeneratorType.VertexInit]=function(){return"uniform vec4 MaterialAmbient;\nuniform vec4 MaterialDiffuse;\nuniform vec4 MaterialSpecular;\nuniform vec4 MaterialEmission;\nuniform float MaterialShininess;\n"};osg.Material.prototype._shader[osg.ShaderGeneratorType.FragmentInit]=function(){return"uniform vec4 MaterialAmbient;\nuniform vec4 MaterialDiffuse;\nuniform vec4 MaterialSpecular;\nuniform vec4 MaterialEmission;\nuniform float MaterialShininess;\n"};
osg.MatrixTransform=function(){osg.Transform.call(this);this.matrix=osg.Matrix.makeIdentity([])};
osg.MatrixTransform.prototype=osg.objectInehrit(osg.Transform.prototype,{getMatrix:function(){return this.matrix},setMatrix:function(a){this.matrix=a},computeLocalToWorldMatrix:function(a){this.referenceFrame===osg.Transform.RELATIVE_RF&&osg.Matrix.preMult(a,this.matrix);return!0},computeWorldToLocalMatrix:function(a){var c=[];osg.Matrix.inverse(this.matrix,c);this.referenceFrame===osg.Transform.RELATIVE_RF&&osg.Matrix.postMult(c,a);return!0}});osg.MatrixTransform.prototype.objectType=osg.objectType.generate("MatrixTransform");
osg.PrimitiveSet=function(){};osg.PrimitiveSet.POINTS=0;osg.PrimitiveSet.LINES=1;osg.PrimitiveSet.LINE_LOOP=2;osg.PrimitiveSet.LINE_STRIP=3;osg.PrimitiveSet.TRIANGLES=4;osg.PrimitiveSet.TRIANGLE_STRIP=5;osg.PrimitiveSet.TRIANGLE_FAN=6;osg.DrawArrays=function(a,c,e){this.mode=a;this.first=c;this.count=e};osg.DrawArrays.prototype={draw:function(a){a.getGraphicContext().drawArrays(this.mode,this.first,this.count)},getMode:function(){return this.mode},getCount:function(){return this.count},getFirst:function(){return this.first}};
osg.DrawArrays.create=function(a,c,e){osg.log("osg.DrawArrays.create is deprecated, use new osg.DrawArrays with same arguments");return new osg.DrawArrays(a,c,e)};osg.DrawArrayLengths=function(a,c,e){this._mode=a;this._first=c;this._arrayLengths=e.slice(0)};
osg.DrawArrayLengths.prototype={draw:function(a){for(var a=a.getGraphicContext(),c=this._mode,e=this._first,f=this._arrayLengths,g=0,h=f.length;g<h;g++){var i=f[g];a.drawArrays(c,e,i);e+=i}},getMode:function(){return this._mode},getNumIndices:function(){for(var a=0,c=this._arrayLengths,e=0,f=c.length;e<f;e++)a+=c[e];return a},getArrayLengths:function(){return this._arrayLengths},getFirst:function(){return this._first},setFirst:function(a){this._first=a}};
osg.DrawElements=function(a,c){this.mode=osg.PrimitiveSet.POINTS;if(a!==void 0)this.mode=a;this.offset=this.count=0;this.indices=c;if(c!==void 0)this.count=c.getElements().length};
osg.DrawElements.prototype={getMode:function(){return this.mode},draw:function(a){a.setIndexArray(this.indices);a=a.getGraphicContext();a.drawElements(this.mode,this.count,a.UNSIGNED_SHORT,this.offset)},getIndices:function(){return this.indices},setFirst:function(a){this.offset=a},getFirst:function(){return this.offset},setCount:function(a){this.count=a},getCount:function(){return this.count}};
osg.DrawElements.create=function(a,c){osg.log("osg.DrawElements.create is deprecated, use new osg.DrawElements with same arguments");return new osg.DrawElements(a,c)};osg.Program=function(a,c){osg.StateAttribute.call(this);if(osg.Program.instanceID===void 0)osg.Program.instanceID=0;this.instanceID=osg.Program.instanceID;osg.Program.instanceID+=1;this.program=null;this.setVertexShader(a);this.setFragmentShader(c);this.dirty=!0};
osg.Program.prototype=osg.objectInehrit(osg.StateAttribute.prototype,{attributeType:"Program",cloneType:function(){var a=new osg.Program;a.default_program=!0;return a},getType:function(){return this.attributeType},getTypeMember:function(){return this.attributeType},setVertexShader:function(a){this.vertex=a},setFragmentShader:function(a){this.fragment=a},getVertexShader:function(){return this.vertex},getFragmentShader:function(){return this.fragment},apply:function(){if(!this.program||this.isDirty()){if(this.default_program===
!0)return;this.vertex.shader||this.vertex.compile();this.fragment.shader||this.fragment.compile();this.program=gl.createProgram();gl.attachShader(this.program,this.vertex.shader);gl.attachShader(this.program,this.fragment.shader);gl.linkProgram(this.program);gl.validateProgram(this.program);if(!gl.getProgramParameter(this.program,gl.LINK_STATUS)&&!gl.isContextLost())return osg.log("can't link program\nvertex shader:\n"+this.vertex.text+"\n fragment shader:\n"+this.fragment.text),osg.log(gl.getProgramInfoLog(this.program)),
this.setDirty(!1),null;this.uniformsCache={};this.uniformsCache.uniformKeys=[];this.attributesCache={};this.attributesCache.attributeKeys=[];this.cacheUniformList(this.vertex.text);this.cacheUniformList(this.fragment.text);this.cacheAttributeList(this.vertex.text);this.setDirty(!1)}gl.useProgram(this.program)},cacheUniformList:function(a){a=a.match(/uniform\s+\w+\s+\w+/g);if(a!==null)for(var c=0,e=a.length;c<e;c++){var f=a[c].match(/uniform\s+\w+\s+(\w+)/)[1],g=gl.getUniformLocation(this.program,
f);g!==void 0&&g!==null&&this.uniformsCache[f]===void 0&&(this.uniformsCache[f]=g,this.uniformsCache.uniformKeys.push(f))}},cacheAttributeList:function(a){a=a.match(/attribute\s+\w+\s+\w+/g);if(a!==null)for(var c=0,e=a.length;c<e;c++){var f=a[c].match(/attribute\s+\w+\s+(\w+)/)[1],g=gl.getAttribLocation(this.program,f);g!==-1&&g!==void 0&&this.attributesCache[f]===void 0&&(this.attributesCache[f]=g,this.attributesCache.attributeKeys.push(f))}}});
osg.Program.create=function(a,c){console.log("osg.Program.create is deprecated use new osg.Program(vertex, fragment) instead");return new osg.Program(a,c)};osg.Projection=function(){osg.Node.call(this);this.projection=osg.Matrix.makeIdentity([])};osg.Projection.prototype=osg.objectInehrit(osg.Node.prototype,{getProjectionMatrix:function(){return this.projection},setProjectionMatrix:function(a){this.projection=a}});osg.Projection.prototype.objectType=osg.objectType.generate("Projection");
osg.Quat={copy:function(a,c){c[0]=a[0];c[1]=a[1];c[2]=a[2];c[3]=a[3];return c},makeIdentity:function(a){return osg.Quat.init(a)},zeroRotation:function(a){return osg.Quat.init(a)},init:function(a){a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a},sub:function(a,c,e){e[0]=a[0]-c[0];e[1]=a[1]-c[1];e[2]=a[2]-c[2];e[3]=a[3]-c[3];return e},add:function(a,c,e){e[0]=a[0]+c[0];e[1]=a[1]+c[1];e[2]=a[2]+c[2];e[3]=a[3]+c[3];return e},dot:function(a,c){return a[0]*c[0]+a[1]*c[1]+a[2]*c[2]+a[3]*c[3]},length2:function(a){return a[0]*
a[0]+a[1]*a[1]+a[2]*a[2]+a[3]*a[3]},neg:function(a,c){c[0]=-a[0];c[1]=-a[1];c[2]=-a[2];c[3]=-a[3];return c},makeRotate:function(a,c,e,f,g){var h=Math.sqrt(c*c+e*e+f*f);if(h<1.0E-7)return this.init();var h=1/h,i=Math.cos(0.5*a),a=Math.sin(0.5*a);g===void 0&&(g=[]);g[0]=c*a*h;g[1]=e*a*h;g[2]=f*a*h;g[3]=i;return g},lerp:function(a,c,e,f){f[0]=c[0]+(e[0]-c[0])*a;f[1]=c[1]+(e[1]-c[1])*a;f[2]=c[2]+(e[2]-c[2])*a;f[3]=c[3]+(e[3]-c[3])*a;return f},slerp:function(a,c,e,f){var g=this.dot(c,e);g<0&&(g=-g,this.neg(e,
e));var h,i;1-g>1.0E-5?(h=Math.acos(g),i=Math.sin(h),g=Math.sin((1-a)*h)/i,a=Math.sin(a*h)/i):g=1-a;f[0]=c[0]*g+e[0]*a;f[1]=c[1]*g+e[1]*a;f[2]=c[2]*g+e[2]*a;f[3]=c[3]*g+e[3]*a;return f},normalize:function(a,c){var e=1/this.length2(a);c[0]=a[0]*e;c[1]=a[1]*e;c[2]=a[2]*e;c[3]=a[3]*e;return c},conj:function(a,c){c[0]=-a[0];c[1]=-a[1];c[2]=-a[2];c[3]=a[3];return c},inverse:function(a,c){var e=1/this.length2(a);this.conj(a,c);c[0]*=e;c[1]*=e;c[2]*=e;c[3]*=e;return c},mult:function(a,c,e){e[0]=a[0]*c[3]+
a[1]*c[2]-a[2]*c[1]+a[3]*c[0];e[1]=-a[0]*c[2]+a[1]*c[3]+a[2]*c[0]+a[3]*c[1];e[2]=a[0]*c[1]-a[1]*c[0]+a[2]*c[3]+a[3]*c[2];e[3]=-a[0]*c[0]-a[1]*c[1]-a[2]*c[2]+a[3]*c[3];return e},div:function(a,c,e){c=1/c;e[0]=a[0]*c;e[1]=a[1]*c;e[2]=a[2]*c;e[3]=a[3]*c;return e},exp:function(a,c){var e=Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]),f=Math.exp(a[3]),g=0;e>1.0E-5&&(g=f*Math.sin(e)/e);c===void 0&&(c=[]);c[0]=g*a[0];c[1]=g*a[1];c[2]=g*a[2];c[3]=f*Math.cos(e);return c},ln:function(a,c){var e=a[0]*a[0]+a[1]*a[1]+
a[2]*a[2],f=Math.sqrt(e),g=0;f>1.0E-5&&(g=Math.atan2(f,a[3])/f);c===void 0&&(c=[]);e+=a[3]*a[3];c[0]=g*a[0];c[1]=g*a[1];c[2]=g*a[2];c[3]=0.5*Math.log(e);return c},squad:function(a,c,e,f,g,h){c=this.slerp(a,c,g);e=this.slerp(a,e,f);return this.slerp(2*a*(1-a),c,e,h)},computeTangent:function(a,c,e,f){c=this.inv(c);this.mult(e,c,void 0);this.ln(void 0,void 0);this.mult(a,c,void 0);this.ln(void 0,void 0);this.add(void 0,void 0,void 0);this.div(void 0,-4,void 0);this.exp(void 0,void 0);return this.mult(void 0,
q1,f)}};osg.RenderBin=function(){this._leafs=[];this.positionedAttribute=[];this._renderStage=void 0;this._bins={};this.stateGraphList=[];this._parent=void 0;this._binNum=0;this._sorted=!1;this._sortMode=osg.RenderBin.SORT_BY_STATE};osg.RenderBin.SORT_BY_STATE=0;osg.RenderBin.SORT_BACK_TO_FRONT=1;osg.RenderBin.BinPrototypes={RenderBin:function(){return new osg.RenderBin},DepthSortedBin:function(){var a=new osg.RenderBin;a._sortMode=osg.RenderBin.SORT_BACK_TO_FRONT;return a}};
osg.RenderBin.prototype={_createRenderBin:function(a){return a===void 0||osg.RenderBin.BinPrototypes[a]===void 0?osg.RenderBin.BinPrototypes.RenderBin():osg.RenderBin.BinPrototypes[a]()},getStateGraphList:function(){return this.stateGraphList},copyLeavesFromStateGraphListToRenderLeafList:function(){this._leafs.splice(0,this._leafs.length);for(var a=!1,c=0,e=this.stateGraphList.length;c<e;c++)for(var f=this.stateGraphList[c].leafs,g=0,h=f.length;g<h;g++){var i=f[g];isNaN(i.depth)?a=!0:this._leafs.push(i)}a&&
osg.debug("warning: RenderBin::copyLeavesFromStateGraphListToRenderLeafList() detected NaN depth values, database may be corrupted.");this.stateGraphList.splice(0,this.stateGraphList.length)},sortBackToFront:function(){this.copyLeavesFromStateGraphListToRenderLeafList();this._leafs.sort(function(a,c){return c.depth-a.depth})},sortImplementation:function(){var a=osg.RenderBin;switch(this._sortMode){case a.SORT_BACK_TO_FRONT:this.sortBackToFront()}},sort:function(){if(!this._sorted){for(var a=this._bins,
c=Object.keys(a),e=0,f=c.length;e<f;e++)a[c[e]].sort();this.sortImplementation();_sorted=!0}},setParent:function(a){this._parent=a},getParent:function(){return this._parent},getBinNumber:function(){return this._binNum},findOrInsert:function(a,c){var e=this._bins[a];if(e===void 0)e=this._createRenderBin(c),e._parent=this,e._binNum=a,e._renderStage=this._renderStage,this._bins[a]=e;return e},getStage:function(){return this._renderStage},addStateGraph:function(a){this.stateGraphList.push(a)},reset:function(){this.stateGraphList.length=
0;this._bins={};this.positionedAttribute.length=0;this._leafs.length=0;this._sorted=!1},applyPositionedAttribute:function(a,c){for(var e=0,f=c.length;e<f;e++){var g=c[e],h=g[1],g=g[0];a.setGlobalDefaultValue(h);h.applyPositionedUniform(g,a);h.apply(a);a.haveAppliedAttribute(h)}},drawImplementation:function(a,c){for(var e=c,f=Object.keys(this._bins),g=this._bins,h=[],i=0,j=f.length;i<j;i++)h.push(g[f[i]]);h.sort(function(a,c){return a._binNum-c._binNum});f=0;for(g=h.length;f<g;f++){i=h[f];if(i.getBinNumber()>
0)break;e=i.drawImplementation(a,e)}for(e=this.drawLeafs(a,e);f<g;f++)i=h[f],e=i.drawImplementation(a,e);return e},drawLeafs:function(a,c){var e=this.stateGraphList,f=this._leafs,g,h,i,j=c,k=[],m=osg.Matrix;j&&osg.StateGraph.prototype.moveToRootStateGraph(a,c.parent);for(var n,o,p,q,s=0,u=f.length;s<u;s++)n=f[s],o=!1,j!==void 0?(j=j.parent,p=j.parent,q=n.parent,p!==q.parent?(q.moveStateGraph(a,p,q.parent),a.pushStateSet(q.stateset),o=!0):q!==j&&(a.pushStateSet(q.stateset),o=!0)):(n.parent.moveStateGraph(a,
void 0,n.parent.parent),a.pushStateSet(n.parent.stateset),o=!0),o===!0&&(a.apply(),g=a.getLastProgramApplied(),h=g.uniformsCache[a.modelViewMatrix.name],i=g.uniformsCache[a.projectionMatrix.name],g=g.uniformsCache[a.normalMatrix.name]),h!==void 0&&(a.modelViewMatrix.set(n.modelview),a.modelViewMatrix.apply(h)),i!==void 0&&(a.projectionMatrix.set(n.projection),a.projectionMatrix.apply(i)),g!==void 0&&(m.copy(n.modelview,k),k[12]=0,k[13]=0,k[14]=0,m.inverse(k,k),m.transpose(k,k),a.normalMatrix.set(k),
a.normalMatrix.apply(g)),n.geometry.drawImplementation(a),o===!0&&(a.popGeneratedProgram(),a.popStateSet()),j=n;f=0;for(s=e.length;f<s;f++)for(var u=e[f],y=0,z=u.leafs.length;y<z;y++)n=u.leafs[y],o=!1,j!==void 0?(j=j.parent,p=j.parent,q=n.parent,p!==q.parent?(q.moveStateGraph(a,p,q.parent),a.pushStateSet(q.stateset),o=!0):q!==j&&(a.pushStateSet(q.stateset),o=!0)):(n.parent.moveStateGraph(a,void 0,n.parent.parent),a.pushStateSet(n.parent.stateset),o=!0),o===!0&&(a.apply(),g=a.getLastProgramApplied(),
h=g.uniformsCache[a.modelViewMatrix.name],i=g.uniformsCache[a.projectionMatrix.name],g=g.uniformsCache[a.normalMatrix.name]),h!==void 0&&(a.modelViewMatrix.set(n.modelview),a.modelViewMatrix.apply(h)),i!==void 0&&(a.projectionMatrix.set(n.projection),a.projectionMatrix.apply(i)),g!==void 0&&(m.copy(n.modelview,k),k[12]=0,k[13]=0,k[14]=0,m.inverse(k,k),m.transpose(k,k),a.normalMatrix.set(k),a.normalMatrix.apply(g)),n.geometry.drawImplementation(a),o===!0&&(a.popGeneratedProgram(),a.popStateSet()),
j=n;return j}};osg.RenderStage=function(){osg.RenderBin.call(this);this.positionedAttribute=[];this.clearDepth=1;this.clearColor=[0,0,0,1];this.clearMask=osg.Camera.COLOR_BUFFER_BIT|osg.Camera.DEPTH_BUFFER_BIT;this.viewport=this.camera=void 0;this.preRenderList=[];this.postRenderList=[];this._renderStage=this};
osg.RenderStage.prototype=osg.objectInehrit(osg.RenderBin.prototype,{reset:function(){osg.RenderBin.prototype.reset.call(this);this.preRenderList.length=0;this.postRenderList.length=0},setClearDepth:function(a){this.clearDepth=a},getClearDepth:function(){return this.clearDepth},setClearColor:function(a){this.clearColor=a},getClearColor:function(){return this.clearColor},setClearMask:function(a){this.clearMask=a},getClearMask:function(){return this.clearMask},setViewport:function(a){this.viewport=
a},getViewport:function(){return this.viewport},setCamera:function(a){this.camera=a},addPreRenderStage:function(a,c){for(var e=0,f=this.preRenderList.length;e<f;e++)if(c<this.preRenderList[e].order)break;e<this.preRenderList.length?this.preRenderList=this.preRenderList.splice(e,0,{order:c,renderStage:a}):this.preRenderList.push({order:c,renderStage:a})},addPostRenderStage:function(a,c){for(var e=0,f=this.postRenderList.length;e<f;e++)if(c<this.postRenderList[e].order)break;e<this.postRenderList.length?
this.postRenderList=this.postRenderList.splice(e,0,{order:c,renderStage:a}):this.postRenderList.push({order:c,renderStage:a})},drawPreRenderStages:function(a,c){for(var e=c,f=0,g=this.preRenderList.length;f<g;++f)e=this.preRenderList[f].renderStage.draw(a,e);return e},draw:function(a,c){var e=this.drawPreRenderStages(a,c),e=this.drawImplementation(a,e);return e=this.drawPostRenderStages(a,e)},sort:function(){for(var a=0,c=this.preRenderList.length;a<c;++a)this.preRenderList[a].renderStage.sort();
for(osg.RenderBin.prototype.sort.call(this);a<c;++a)this.postRenderList[a].renderStage.sort()},drawPostRenderStages:function(a,c){for(var e=c,f=0,g=this.postRenderList.length;f<g;++f)e=this.postRenderList[f].renderStage.draw(a,e);return e},applyCamera:function(a){var c=a.getGraphicContext();if(this.camera===void 0)c.bindFramebuffer(c.FRAMEBUFFER,null);else{var c=this.camera.getViewport(),e=this.camera.frameBufferObject;if(!e)e=new osg.FrameBufferObject,this.camera.frameBufferObject=e;if(e.isDirty()&&
this.camera.attachments!==void 0)for(var f in this.camera.attachments){var g=this.camera.attachments[f],h;if(g.texture===void 0)h={attachment:f,format:g.format,width:c.width(),height:c.height()};else if(g.texture!==void 0&&(h={attachment:f,texture:g.texture,level:g.level},g.format))h.format=g.format;e.setAttachment(h)}e.apply(a)}},drawImplementation:function(a,c){var e=a.getGraphicContext();this.applyCamera(a);this.viewport===void 0&&osg.log("RenderStage does not have a valid viewport");a.applyAttribute(this.viewport);
this.clearMask&e.COLOR_BUFFER_BIT&&e.clearColor(this.clearColor[0],this.clearColor[1],this.clearColor[2],this.clearColor[3]);this.clearMask&e.DEPTH_BUFFER_BIT&&(e.depthMask(!0),e.clearDepth(this.clearDepth));e.clear(this.clearMask);this.positionedAttribute&&this.applyPositionedAttribute(a,this.positionedAttribute);return osg.RenderBin.prototype.drawImplementation.call(this,a,c)}});osg.ShaderGenerator=function(){this.cache=[]};
osg.ShaderGenerator.prototype={getActiveTypeMember:function(a){for(var c=[],e=0,f=a.attributeMap.attributeKeys.length;e<f;e++){var g=a.attributeMap.attributeKeys[e],h=a.attributeMap[g];h.length===0&&h.globalDefault.applyPositionedUniform===void 0||(h.globalDefault.getOrCreateUniforms!==void 0||h.globalDefault.writeToShader!==void 0)&&c.push(g)}e=0;for(f=a.textureAttributeMapList.length;e<f;e++)if(g=a.textureAttributeMapList[e],g!==void 0)for(var h=0,i=g.attributeKeys.length;h<i;h++){var j=g.attributeKeys[h],
k=g[j];k.length!==0&&(k.globalDefault.getOrCreateUniforms!==void 0||k.globalDefault.writeToShader!==void 0)&&c.push(j+e)}return c},getActiveAttributeMapKeys:function(a){for(var c=[],e=0,f=a.attributeMap.attributeKeys.length;e<f;e++){var g=a.attributeMap.attributeKeys[e],h=a.attributeMap[g];h.length===0&&h.globalDefault.applyPositionedUniform===void 0||(h.globalDefault.getOrCreateUniforms!==void 0||h.globalDefault.writeToShader!==void 0)&&c.push(g)}return c},getActiveTextureAttributeMapKeys:function(a){for(var c=
[],e=0,f=a.textureAttributeMapList.length;e<f;e++){var g=a.textureAttributeMapList[e];if(g!==void 0){c[e]=[];for(var h=0,i=g.attributeKeys.length;h<i;h++){var j=g.attributeKeys[h],k=g[j];k.length!==0&&(k.globalDefault.getOrCreateUniforms!==void 0||k.globalDefault.writeToShader!==void 0)&&c[e].push(j)}}}return c},getActiveUniforms:function(a,c,e){for(var f={},g=0,h=c.length;g<h;g++){var i=c[g];if(a.attributeMap[i].globalDefault.getOrCreateUniforms!==void 0)for(var i=a.attributeMap[i].globalDefault.getOrCreateUniforms(),
j=0,k=i.uniformKeys.length;j<k;j++){var m=i[i.uniformKeys[j]];f[m.name]=m}}c=0;for(g=e.length;c<g;c++)if(h=e[c],h!==void 0){i=0;for(j=h.length;i<j;i++)if(k=a.textureAttributeMapList[c][h[i]].globalDefault,k.getOrCreateUniforms!==void 0)for(var k=k.getOrCreateUniforms(c),m=0,n=k.uniformKeys.length;m<n;m++){var o=k[k.uniformKeys[m]];f[o.name]=o}}var a=[],p;for(p in f)a.push(p);f.uniformKeys=a;return f},getOrCreateProgram:function(a){for(var c=this.getActiveTypeMember(a),e=0,f=this.cache.length;e<f;++e)if(this.compareAttributeMap(c,
this.cache[e].flattenKeys)===0)return this.cache[e];var e=this.getActiveAttributeMapKeys(a),f=this.getActiveTextureAttributeMapKeys(a),g=this.getOrCreateVertexShader(a,e,f),h=this.getOrCreateFragmentShader(a,e,f),g=new osg.Program(new osg.Shader(gl.VERTEX_SHADER,g),new osg.Shader(gl.FRAGMENT_SHADER,h));g.flattenKeys=c;g.activeAttributeKeys=e;g.activeTextureAttributeKeys=f;g.activeUniforms=this.getActiveUniforms(a,e,f);g.generated=!0;osg.log(g.vertex.text);osg.log(g.fragment.text);this.cache.push(g);
return g},compareAttributeMap:function(a,c){for(var e,f=0,g=a.length;f<g;f++)if(e=a[f],c.indexOf(e)===-1)return 1;return c.length!==a.length?-1:0},fillTextureShader:function(a,c,e){for(var f="",g={},h=0,i=c.length;h<i;h++){var j=c[h];if(j!==void 0)for(var k=a[h],m=0,n=j.length;m<n;m++){var o=j[m],p=k[o].globalDefault;p.generateShaderCommon!==void 0&&g[o]===void 0&&(f+=p.generateShaderCommon(h,e),g[o]=!0);p.generateShader&&(f+=p.generateShader(h,e))}}return f},fillShader:function(a,c,e){for(var f=
"",g={},h=0,i=c.length;h<i;h++){var j=a[c[h]].globalDefault,k=j.getType();j.generateShaderCommon!==void 0&&g[k]===void 0&&(f+=j.generateShaderCommon(e),g[k]=!0);j.generateShader&&(f+=j.generateShader(e))}return f},getOrCreateVertexShader:function(a,c,e){var f=osg.ShaderGeneratorType,g="\n#ifdef GL_ES\nprecision highp float;\n#endif\nattribute vec3 Vertex;\nattribute vec4 Color;\nattribute vec3 Normal;\nuniform int ArrayColorEnabled;\nuniform mat4 ModelViewMatrix;\nuniform mat4 ProjectionMatrix;\nuniform mat4 NormalMatrix;\nvarying vec4 VertexColor;\n";
g+=this._writeShaderFromMode(a,c,e,f.VertexInit);g+="\nvec4 ftransform() {\n return ProjectionMatrix * ModelViewMatrix * vec4(Vertex, 1.0);\n}";g+=this._writeShaderFromMode(a,c,e,f.VertexFunction);g+="\nvoid main(void) {\n gl_Position = ftransform();\n if (ArrayColorEnabled == 1)\n VertexColor = Color;\n else\n VertexColor = vec4(1.0,1.0,1.0,1.0);\n";g+=this._writeShaderFromMode(a,c,e,f.VertexMain);g+="}\n";return g},_writeShaderFromMode:function(a,c,e,f){var g="";g+=this.fillTextureShader(a.textureAttributeMapList,
e,f);g+=this.fillShader(a.attributeMap,c,f);return g},getOrCreateFragmentShader:function(a,c,e){var f="\n#ifdef GL_ES\nprecision highp float;\n#endif\nvarying vec4 VertexColor;\nuniform int ArrayColorEnabled;\nvec4 fragColor;\n",g=osg.ShaderGeneratorType;f+=this._writeShaderFromMode(a,c,e,g.FragmentInit);f+=this._writeShaderFromMode(a,c,e,g.FragmentFunction);f+="void main(void) {\n fragColor = VertexColor;\n";f+=this._writeShaderFromMode(a,c,e,g.FragmentMain);f+=this._writeShaderFromMode(a,c,e,g.FragmentEnd);
f+="\n gl_FragColor = fragColor;\n}";return f}};
osg.createTexturedBoxGeometry=function(a,c,e,f,g,h){var i=new osg.Geometry;f/=2;g/=2;h/=2;var j=[],k=[],m=[];j[0]=a-f;j[1]=c-g;j[2]=e+h;m[0]=0;m[1]=-1;m[2]=0;k[0]=0;k[1]=1;j[3]=a-f;j[4]=c-g;j[5]=e-h;m[3]=0;m[4]=-1;m[5]=0;k[2]=0;k[3]=0;j[6]=a+f;j[7]=c-g;j[8]=e-h;m[6]=0;m[7]=-1;m[8]=0;k[4]=1;k[5]=0;j[9]=a+f;j[10]=c-g;j[11]=e+h;m[9]=0;m[10]=-1;m[11]=0;k[6]=1;k[7]=1;j[12]=a+f;j[13]=c+g;j[14]=e+h;m[12]=0;m[13]=1;m[14]=0;k[8]=0;k[9]=1;j[15]=a+f;j[16]=c+g;j[17]=e-h;m[15]=0;m[16]=1;m[17]=0;k[10]=0;k[11]=
0;j[18]=a-f;j[19]=c+g;j[20]=e-h;m[18]=0;m[19]=1;m[20]=0;k[12]=1;k[13]=0;j[21]=a-f;j[22]=c+g;j[23]=e+h;m[21]=0;m[22]=1;m[23]=0;k[14]=1;k[15]=1;j[24]=a+f;j[25]=c-g;j[26]=e+h;m[24]=1;m[25]=0;m[26]=0;k[16]=0;k[17]=1;j[27]=a+f;j[28]=c-g;j[29]=e-h;m[27]=1;m[28]=0;m[29]=0;k[18]=0;k[19]=0;j[30]=a+f;j[31]=c+g;j[32]=e-h;m[30]=1;m[31]=0;m[32]=0;k[20]=1;k[21]=0;j[33]=a+f;j[34]=c+g;j[35]=e+h;m[33]=1;m[34]=0;m[35]=0;k[22]=1;k[23]=1;j[36]=a-f;j[37]=c+g;j[38]=e+h;m[36]=-1;m[37]=0;m[38]=0;k[24]=0;k[25]=1;j[39]=a-
f;j[40]=c+g;j[41]=e-h;m[39]=-1;m[40]=0;m[41]=0;k[26]=0;k[27]=0;j[42]=a-f;j[43]=c-g;j[44]=e-h;m[42]=-1;m[43]=0;m[44]=0;k[28]=1;k[29]=0;j[45]=a-f;j[46]=c-g;j[47]=e+h;m[45]=-1;m[46]=0;m[47]=0;k[30]=1;k[31]=1;j[48]=a-f;j[49]=c+g;j[50]=e+h;m[48]=0;m[49]=0;m[50]=1;k[32]=0;k[33]=1;j[51]=a-f;j[52]=c-g;j[53]=e+h;m[51]=0;m[52]=0;m[53]=1;k[34]=0;k[35]=0;j[54]=a+f;j[55]=c-g;j[56]=e+h;m[54]=0;m[55]=0;m[56]=1;k[36]=1;k[37]=0;j[57]=a+f;j[58]=c+g;j[59]=e+h;m[57]=0;m[58]=0;m[59]=1;k[38]=1;k[39]=1;j[60]=a+f;j[61]=
c+g;j[62]=e-h;m[60]=0;m[61]=0;m[62]=-1;k[40]=0;k[41]=1;j[63]=a+f;j[64]=c-g;j[65]=e-h;m[63]=0;m[64]=0;m[65]=-1;k[42]=0;k[43]=0;j[66]=a-f;j[67]=c-g;j[68]=e-h;m[66]=0;m[67]=0;m[68]=-1;k[44]=1;k[45]=0;j[69]=a-f;j[70]=c+g;j[71]=e-h;m[69]=0;m[70]=0;m[71]=-1;k[46]=1;k[47]=1;i.getAttributes().Vertex=new osg.BufferArray(osg.BufferArray.ARRAY_BUFFER,j,3);i.getAttributes().Normal=new osg.BufferArray(osg.BufferArray.ARRAY_BUFFER,m,3);i.getAttributes().TexCoord0=new osg.BufferArray(osg.BufferArray.ARRAY_BUFFER,
k,2);a=new osg.DrawElements(osg.PrimitiveSet.TRIANGLES,new osg.BufferArray(osg.BufferArray.ELEMENT_ARRAY_BUFFER,[0,1,2,0,2,3,4,5,6,4,6,7,8,9,10,8,10,11,12,13,14,12,14,15,16,17,18,16,18,19,20,21,22,20,22,23],1));i.getPrimitives().push(a);return i};
osg.createTexturedQuadGeometry=function(a,c,e,f,g,h,i,j,k,m,n,o,p){o===void 0&&p===void 0&&(o=m,p=n,n=m=0);var q=new osg.Geometry,s=[];s[0]=a+i;s[1]=c+j;s[2]=e+k;s[3]=a;s[4]=c;s[5]=e;s[6]=a+f;s[7]=c+g;s[8]=e+h;s[9]=a+f+i;s[10]=c+g+j;s[11]=e+h+k;o===void 0&&(o=1);p===void 0&&(p=1);a=[];a[0]=m;a[1]=p;a[2]=m;a[3]=n;a[4]=o;a[5]=n;a[6]=o;a[7]=p;f=osg.Vec3.cross([f,g,h],[i,j,k],[]);g=[];g[0]=f[0];g[1]=f[1];g[2]=f[2];g[3]=f[0];g[4]=f[1];g[5]=f[2];g[6]=f[0];g[7]=f[1];g[8]=f[2];g[9]=f[0];g[10]=f[1];g[11]=
f[2];q.getAttributes().Vertex=new osg.BufferArray(osg.BufferArray.ARRAY_BUFFER,s,3);q.getAttributes().Normal=new osg.BufferArray(osg.BufferArray.ARRAY_BUFFER,g,3);q.getAttributes().TexCoord0=new osg.BufferArray(osg.BufferArray.ARRAY_BUFFER,a,2);s=new osg.DrawElements(osg.PrimitiveSet.TRIANGLES,new osg.BufferArray(osg.BufferArray.ELEMENT_ARRAY_BUFFER,[0,1,2,0,2,3],1));q.getPrimitives().push(s);return q};
osg.createTexturedBox=function(a,c,e,f,g,h){osg.log("osg.createTexturedBox is deprecated use instead osg.createTexturedBoxGeometry");return osg.createTexturedBoxGeometry(a,c,e,f,g,h)};osg.createTexturedQuad=function(a,c,e,f,g,h,i,j,k,m,n,o,p){osg.log("osg.createTexturedQuad is deprecated use instead osg.createTexturedQuadGeometry");return osg.createTexturedQuadGeometry(a,c,e,f,g,h,i,j,k,m,n,o,p)};
osg.createAxisGeometry=function(a){a===void 0&&(a=5);if(osg.createAxisGeometry.getShader===void 0)osg.createAxisGeometry.getShader=function(){if(osg.createAxisGeometry.getShader.program===void 0){var a=new osg.Program(new osg.Shader(gl.VERTEX_SHADER,"#ifdef GL_ES\nprecision highp float;\n#endif\nattribute vec3 Vertex;\nattribute vec4 Color;\nuniform mat4 ModelViewMatrix;\nuniform mat4 ProjectionMatrix;\n\nvarying vec4 FragColor;\n\nvec4 ftransform() {\nreturn ProjectionMatrix * ModelViewMatrix * vec4(Vertex, 1.0);\n}\n\nvoid main(void) {\ngl_Position = ftransform();\nFragColor = Color;\n}"),
new osg.Shader(gl.FRAGMENT_SHADER,"#ifdef GL_ES\nprecision highp float;\n#endif\nvarying vec4 FragColor;\nvoid main(void) {\ngl_FragColor = FragColor;\n}"));osg.createAxisGeometry.getShader.program=a}return osg.createAxisGeometry.getShader.program};var c=new osg.Geometry,e=[];e.push(0,0,0);e.push(a,0,0);e.push(0,0,0);e.push(0,a,0);e.push(0,0,0);e.push(0,0,a);a=[];a.push(1,0,0,1);a.push(1,0,0,1);a.push(0,1,0,1);a.push(0,1,0,1);a.push(0,0,1,1);a.push(0,0,1,1);c.getAttributes().Vertex=new osg.BufferArray(osg.BufferArray.ARRAY_BUFFER,
e,3);c.getAttributes().Color=new osg.BufferArray(osg.BufferArray.ARRAY_BUFFER,a,4);e=new osg.DrawArrays(osg.PrimitiveSet.LINES,0,6);c.getPrimitives().push(e);c.getOrCreateStateSet().setAttributeAndMode(osg.createAxisGeometry.getShader());return c};osg.Stack=function(){};osg.Stack.create=function(){var a=[];a.globalDefault=void 0;a.lastApplied=void 0;a.back=function(){return this[this.length-1]};return a};
osg.StateGraph=function(){this.depth=0;this.children={};this.children.keys=[];this.leafs=[];this.parent=this.stateset=void 0};
osg.StateGraph.prototype={clean:function(){this.leafs.splice(0,this.leafs.length);this.parent=this.stateset=void 0;for(var a=this.children.keys,c=0,e=a.length;c<e;c++)this.children[a[c]].clean();this.children={};a.splice(0,a.length);this.children.keys=a},getStateSet:function(){return this.stateset},findOrInsert:function(a){var c;this.children[a.id]?c=this.children[a.id]:(c=new osg.StateGraph,c.parent=this,c.depth=this.depth+1,c.stateset=a,this.children[a.id]=c,this.children.keys.push(a.id));return c},
moveToRootStateGraph:function(a,c){for(;c;)c.stateSet&&a.popStateSet(),c=c._parent},moveStateGraph:function(a,c,e){var f;if(!(e===c||e===void 0))if(c===void 0){f=[];do e.stateset!==void 0&&f.push(e.stateset),e=e.parent;while(e);f.reverse();for(c=0,l=f.length;c<l;++c)a.pushStateSet(f[c])}else if(c.parent===e.parent)c.stateset!==void 0&&a.popStateSet(),e.stateset!==void 0&&a.pushStateSet(e.stateset);else{for(;c.depth>e.depth;)c.stateset!==void 0&&a.popStateSet(),c=c.parent;for(f=[];e.depth>c.depth;)e.stateset!==
void 0&&f.push(e.stateset),e=e.parent;for(;c!==e;)c.stateset!==void 0&&a.popStateSet(),c=c.parent,e.stateset!==void 0&&f.push(e.stateset),e=e.parent;f.reverse();stackLength=f.length;for(c=0;c<stackLength;++c)a.pushStateSet(f[c])}}};
osg.State=function(){this._graphicContext=void 0;this.currentVBO=null;this.vertexAttribList=[];this.programs=osg.Stack.create();this.stateSets=osg.Stack.create();this.uniforms={};this.uniforms.uniformKeys=[];this.textureAttributeMapList=[];this.attributeMap={};this.attributeMap.attributeKeys=[];this.modeMap={};this.shaderGenerator=new osg.ShaderGenerator;this.modelViewMatrix=osg.Uniform.createMatrix4(osg.Matrix.makeIdentity([]),"ModelViewMatrix");this.projectionMatrix=osg.Uniform.createMatrix4(osg.Matrix.makeIdentity([]),
"ProjectionMatrix");this.normalMatrix=osg.Uniform.createMatrix4(osg.Matrix.makeIdentity([]),"NormalMatrix");this.uniformArrayState={};this.uniformArrayState.uniformKeys=[];this.uniformArrayState.Color=osg.Uniform.createInt1(0,"ArrayColorEnabled");this.uniformArrayState.uniformKeys.push("Color");this.vertexAttribMap={};this.vertexAttribMap._disable=[];this.vertexAttribMap._keys=[]};
osg.State.prototype={setGraphicContext:function(a){this._graphicContext=a},getGraphicContext:function(){return this._graphicContext},pushStateSet:function(a){this.stateSets.push(a);a.attributeMap&&this.pushAttributeMap(this.attributeMap,a.attributeMap);if(a.textureAttributeMapList)for(var c=a.textureAttributeMapList,e=0,f=c.length;e<f;e++)if(c[e]!==void 0){if(!this.textureAttributeMapList[e])this.textureAttributeMapList[e]={},this.textureAttributeMapList[e].attributeKeys=[];this.pushAttributeMap(this.textureAttributeMapList[e],
c[e])}a.uniforms&&this.pushUniformsList(this.uniforms,a.uniforms)},applyStateSet:function(a){this.pushStateSet(a);this.apply();this.popStateSet()},popAllStateSets:function(){for(;this.stateSets.length;)this.popStateSet()},popStateSet:function(){var a=this.stateSets.pop();a.program&&this.programs.pop();a.attributeMap&&this.popAttributeMap(this.attributeMap,a.attributeMap);if(a.textureAttributeMapList)for(var c=a.textureAttributeMapList,e=0,f=c.length;e<f;e++)c[e]!==void 0&&this.popAttributeMap(this.textureAttributeMapList[e],
c[e]);a.uniforms&&this.popUniformsList(this.uniforms,a.uniforms)},haveAppliedAttribute:function(a){var c=this.attributeMap[a.getTypeMember()];c.lastApplied=a;c.asChanged=!0},applyAttribute:function(a){var c=a.getTypeMember(),e=this.attributeMap[c];if(e===void 0)e=osg.Stack.create(),this.attributeMap[c]=e,this.attributeMap[c].globalDefault=a.cloneType(),this.attributeMap.attributeKeys.push(c);if(e.lastApplied!==a)a.apply&&a.apply(this),e.lastApplied=a,e.asChanged=!0},applyTextureAttribute:function(a,
c){var e=this.getGraphicContext();e.activeTexture(e.TEXTURE0+a);e=c.getTypeMember();if(!this.textureAttributeMapList[a])this.textureAttributeMapList[a]={},this.textureAttributeMapList[a].attributeKeys=[];var f=this.textureAttributeMapList[a][e];if(f===void 0)f=osg.Stack.create(),this.textureAttributeMapList[a][e]=f,f.globalDefault=c.cloneType(),this.textureAttributeMapList[a].attributeKeys.push(e);if(f.lastApplied!==c)c.apply&&c.apply(this),f.lastApplied=c,f.asChanged=!0},getLastProgramApplied:function(){return this.programs.lastApplied},
pushGeneratedProgram:function(){var a;if(this.attributeMap.Program!==void 0&&this.attributeMap.Program.length!==0&&(a=this.attributeMap.Program.back().object,value=this.attributeMap.Program.back().value,a!==void 0&&value!==osg.StateAttribute.OFF))return this.programs.push(this.getObjectPair(a,value)),a;a=this.shaderGenerator.getOrCreateProgram({textureAttributeMapList:this.textureAttributeMapList,attributeMap:this.attributeMap});this.programs.push(this.getObjectPair(a,osg.StateAttribute.ON));return a},
popGeneratedProgram:function(){this.programs.pop()},applyWithoutProgram:function(){this.applyAttributeMap(this.attributeMap);this.applyTextureAttributeMapList(this.textureAttributeMapList)},apply:function(){var a=this._graphicContext;this.applyAttributeMap(this.attributeMap);this.applyTextureAttributeMapList(this.textureAttributeMapList);this.pushGeneratedProgram();var c=this.programs.back().object;if(this.programs.lastApplied!==c)c.apply(this),this.programs.lastApplied=c;var e,f,g,h;if(c.generated!==
void 0&&c.generated===!0){e=c.uniformsCache;f=c.activeUniforms;c=!1;for(g=0,l=f.uniformKeys.length;g<l;g++){var i=f.uniformKeys[g],a=e[i];a!==void 0?f[i].apply(a):(c=!0,delete f[i])}if(c){e=[];for(h in f)h!=="uniformKeys"&&e.push(h);f.uniformKeys=e}}else{var j=c.program;e=c.uniformsCache;i=this.uniforms;f=[];g=c.trackUniforms;var k;if(c.trackAttributes!==void 0&&g===void 0){var m=c.trackAttributes.attributeKeys;if(m!==void 0)for(g=0,l=m.length;g<l;g++)if(h=m[g],attributeStack=this.attributeMap[h],
attributeStack!==void 0&&(h=attributeStack.globalDefault,h.getOrCreateUniforms!==void 0)){h=h.getOrCreateUniforms();for(k=0,b=h.uniformKeys.length;k<b;k++)f.push(h[h.uniformKeys[k]])}m=c.trackAttributes.textureAttributeKeys;if(m!==void 0)for(g=0,l=m.length;g<l;g++){var n=m[g];if(n!==void 0)for(var o=0,p=n.length;o<p;o++)if(h=n[o],k=this.textureAttributeMapList[g],k!==void 0&&(attributeStack=k[h],attributeStack!==void 0&&(h=attributeStack.globalDefault,h.getOrCreateUniforms!==void 0))){h=h.getOrCreateUniforms(g);
for(k=0,b=h.uniformKeys.length;k<b;k++)f.push(h[h.uniformKeys[k]])}}h={};for(g=0,l=f.length;g<l;g++)m=f[g],n=a.getUniformLocation(j,m.name),n!==void 0&&n!==null&&(h[m.name]=f[g]);c.trackUniforms=h}for(g=0,l=e.uniformKeys.length;g<l;g++)j=e.uniformKeys[g],f=e[j],a=i[j],a===void 0?c.trackUniforms!==void 0&&(a=c.trackUniforms[j],a!==void 0&&a.apply(f)):(a=a.length===0?a.globalDefault:a.back().object,a.apply(f))}},applyUniformList:function(a,c){for(var e,f,g=this.getLastProgramApplied().uniformsCache,
h=0,i=g.uniformKeys.length;h<i;h++){var j=g.uniformKeys[h];e=g[j];f=c[j];if(f===void 0){f=a[j];if(f===void 0)continue;f=f.length===0?f.globalDefault:f.back().object}f.apply(e)}},applyAttributeMap:function(a){for(var c,e=0,f=a.attributeKeys.length;e<f;e++)if(c=a[a.attributeKeys[e]],c!==void 0){var g;g=c.length===0?c.globalDefault:c.back().object;if(c.asChanged)g.apply&&g.apply(this),c.lastApplied=g,c.asChanged=!1}},getObjectPair:function(a,c){return{object:a,value:c}},pushUniformsList:function(a,c){for(var e,
f,g=0,h=c.uniformKeys.length;g<h;g++){uniformPair=c[c.uniformKeys[g]];f=uniformPair.object;e=f.name;if(a[e]===void 0)a[e]=osg.Stack.create(),a[e].globalDefault=f,a.uniformKeys.push(e);e=a[e];e.length===0?e.push(this.getObjectPair(f,uniformPair.value)):e[e.length-1].value&osg.StateAttribute.OVERRIDE&&!(uniformPair.value&osg.StateAttribute.PROTECTED)?e.push(e[e.length-1]):e.push(this.getObjectPair(f,uniformPair.value))}},popUniformsList:function(a,c){for(var e=0,f=c.uniformKeys.length;e<f;e++)a[c.uniformKeys[e]].pop()},
applyTextureAttributeMapList:function(a){for(var c=this._graphicContext,e,f=0,g=a.length;f<g;f++)if(e=a[f],e!==void 0)for(var h=0,i=e.attributeKeys.length;h<i;h++){var j=e[e.attributeKeys[h]];if(j!==void 0){var k;k=j.length===0?j.globalDefault:j.back().object;if(j.asChanged)c.activeTexture(c.TEXTURE0+f),k.apply(this),j.lastApplied=k,j.asChanged=!1}}},setGlobalDefaultValue:function(a){var c=a.getTypeMember();this.attributeMap[c]?this.attributeMap[c].globalDefault=a:(this.attributeMap[c]=osg.Stack.create(),
this.attributeMap[c].globalDefault=a,this.attributeMap.attributeKeys.push(c))},pushAttributeMap:function(a,c){for(var e,f=0,g=c.attributeKeys.length;f<g;f++){e=c.attributeKeys[f];var h=c[e],i=h.object;if(a[e]===void 0)a[e]=osg.Stack.create(),a[e].globalDefault=i.cloneType(),a.attributeKeys.push(e);e=a[e];e.length===0?e.push(this.getObjectPair(i,h.value)):e[e.length-1].value&osg.StateAttribute.OVERRIDE&&!(h.value&osg.StateAttribute.PROTECTED)?e.push(e[e.length-1]):e.push(this.getObjectPair(i,h.value));
e.asChanged=!0}},popAttributeMap:function(a,c){for(var e,f=0,g=c.attributeKeys.length;f<g;f++)type=c.attributeKeys[f],e=a[type],e.pop(),e.asChanged=!0},setIndexArray:function(a){var c=this._graphicContext;if(this.currentIndexVBO!==a)a.bind(c),this.currentIndexVBO=a;a.isDirty()&&a.compile(c)},lazyDisablingOfVertexAttributes:function(){for(var a=this.vertexAttribMap._keys,c=0,e=a.length;c<e;c++){var f=a[c];this.vertexAttribMap[f]&&(this.vertexAttribMap._disable[f]=!0)}},applyDisablingOfVertexAttributes:function(){for(var a=
this.vertexAttribMap._keys,c=0,e=a.length;c<e;c++)if(this.vertexAttribMap._disable[a[c]]===!0){var f=a[c];this._graphicContext.disableVertexAttribArray(f);this.vertexAttribMap._disable[f]=!1;this.vertexAttribMap[f]=!1}c=this.programs.lastApplied;if(c.generated===!0&&(e=!1,this.previousAppliedProgram!==this.programs.lastApplied?(e=!0,this.previousAppliedProgram=this.programs.lastApplied):(a=c.attributesCache.Color,this.vertexAttribMap[a]!==this.previousColorAttrib&&(e=!0)),e&&(a=c.attributesCache.Color,
a!==void 0)))this.vertexAttribMap[a]?this.uniformArrayState.Color.set([1]):this.uniformArrayState.Color.set([0]),this.previousColorAttrib=this.vertexAttribMap[a],this.uniformArrayState.Color.apply(c.uniformsCache.ArrayColorEnabled)},setVertexAttribArray:function(a,c,e){var f=this.vertexAttribMap;f._disable[a]=!1;var g=this._graphicContext,h=!1;c.isDirty()&&(c.bind(g),c.compile(g),h=!0);f[a]!==c&&(h||c.bind(g),f[a]||(g.enableVertexAttribArray(a),f[a]===void 0&&f._keys.push(a)),f[a]=c,g.vertexAttribPointer(a,
c._itemSize,g.FLOAT,e,0,0))}};osg.StateSet=function(){osg.Object.call(this);this.id=osg.StateSet.instance++;this.attributeMap={};this.attributeMap.attributeKeys=[];this.textureAttributeMapList=[];this._binName=void 0;this._binNumber=0};osg.StateSet.instance=0;
osg.StateSet.prototype=osg.objectInehrit(osg.Object.prototype,{getObjectPair:function(a,c){return{object:a,value:c}},addUniform:function(a,c){if(c===void 0)c=osg.StateAttribute.ON;if(!this.uniforms)this.uniforms={},this.uniforms.uniformKeys=[];var e=a.name;this.uniforms[e]=this.getObjectPair(a,c);this.uniforms.uniformKeys.indexOf(e)===-1&&this.uniforms.uniformKeys.push(e)},getUniform:function(a){if(this.uniforms&&this.uniforms[a])return this.uniforms[a].object},getUniformList:function(){return this.uniforms},
setTextureAttributeAndMode:function(a,c,e){if(e===void 0)e=osg.StateAttribute.ON;this._setTextureAttribute(a,this.getObjectPair(c,e))},getTextureAttribute:function(a,c){return this.textureAttributeMapList[a]===void 0||this.textureAttributeMapList[a][c]===void 0?void 0:this.textureAttributeMapList[a][c].object},getAttribute:function(a){return this.attributeMap[a]===void 0?void 0:this.attributeMap[a].object},setAttributeAndMode:function(a,c){if(c===void 0)c=osg.StateAttribute.ON;this._setAttribute(this.getObjectPair(a,
c))},removeAttribute:function(a){this.attributeMap[a]!==void 0&&(delete this.attributeMap[a],this.attributeMap.attributeKeys.splice(this.attributeMap.attributeKeys.indexOf(a),1))},setRenderingHint:function(a){a==="OPAQUE_BIN"?this.setRenderBinDetails(0,"RenderBin"):a==="TRANSPARENT_BIN"?this.setRenderBinDetails(10,"DepthSortedBin"):this.setRenderBinDetails(0,"")},setRenderBinDetails:function(a,c){this._binNumber=a;this._binName=c},getBinNumber:function(){return this._binNumber},getBinName:function(){return this._binName},
setBinNumber:function(a){this._binNumber=a},setBinName:function(a){this._binName=a},_getUniformMap:function(){return this.uniforms},_setTextureAttribute:function(a,c){if(this.textureAttributeMapList[a]===void 0)this.textureAttributeMapList[a]={},this.textureAttributeMapList[a].attributeKeys=[];var e=c.object.getTypeMember();this.textureAttributeMapList[a][e]=c;this.textureAttributeMapList[a].attributeKeys.indexOf(e)===-1&&this.textureAttributeMapList[a].attributeKeys.push(e)},_setAttribute:function(a){var c=
a.object.getTypeMember();this.attributeMap[c]=a;this.attributeMap.attributeKeys.indexOf(c)===-1&&this.attributeMap.attributeKeys.push(c)}});osg.Texture=function(){osg.StateAttribute.call(this);this.setDefaultParameters()};osg.Texture.DEPTH_COMPONENT=6402;osg.Texture.ALPHA=6406;osg.Texture.RGB=6407;osg.Texture.RGBA=6408;osg.Texture.LUMINANCE=6409;osg.Texture.LUMINANCE_ALPHA=6410;osg.Texture.LINEAR=9729;osg.Texture.NEAREST=9728;osg.Texture.NEAREST_MIPMAP_NEAREST=9984;
osg.Texture.LINEAR_MIPMAP_NEAREST=9985;osg.Texture.NEAREST_MIPMAP_LINEAR=9986;osg.Texture.LINEAR_MIPMAP_LINEAR=9987;osg.Texture.CLAMP_TO_EDGE=33071;osg.Texture.REPEAT=10497;osg.Texture.MIRRORED_REPEAT=33648;osg.Texture.TEXTURE_2D=3553;osg.Texture.TEXTURE_CUBE_MAP=34067;osg.Texture.TEXTURE_BINDING_CUBE_MAP=34068;osg.Texture.TEXTURE_CUBE_MAP_POSITIVE_X=34069;osg.Texture.TEXTURE_CUBE_MAP_NEGATIVE_X=34070;osg.Texture.TEXTURE_CUBE_MAP_POSITIVE_Y=34071;osg.Texture.TEXTURE_CUBE_MAP_NEGATIVE_Y=34072;
osg.Texture.TEXTURE_CUBE_MAP_POSITIVE_Z=34073;osg.Texture.TEXTURE_CUBE_MAP_NEGATIVE_Z=34074;osg.Texture.MAX_CUBE_MAP_TEXTURE_SIZE=34076;
osg.Texture.prototype=osg.objectInehrit(osg.StateAttribute.prototype,{attributeType:"Texture",cloneType:function(){var a=new osg.Texture;a.default_type=!0;return a},getType:function(){return this.attributeType},getTypeMember:function(){return this.attributeType},getOrCreateUniforms:function(a){if(osg.Texture.uniforms===void 0)osg.Texture.uniforms=[];if(osg.Texture.uniforms[a]===void 0){var c=this.getType()+a,e={};e[c]=osg.Uniform.createInt1(a,c);e.uniformKeys=[c];osg.Texture.uniforms[a]=e}return osg.Texture.uniforms[a]},
setDefaultParameters:function(){this._minFilter=this._magFilter=osg.Texture.LINEAR;this._wrapT=this._wrapS=osg.Texture.CLAMP_TO_EDGE;this._textureHeight=this._textureWidth=0;this._unrefImageDataAfterApply=!1;this.setInternalFormat(osg.Texture.RGBA);this._textureTarget=osg.Texture.TEXTURE_2D},getTextureTarget:function(){return this._textureTarget},getTextureObject:function(){return this._textureObject},setTextureSize:function(a,c){this._textureWidth=a;this._textureHeight=c},init:function(a){if(!this._textureObject)this._textureObject=
a.createTexture(),this.dirty()},getWidth:function(){return this._textureWidth},getHeight:function(){return this._textureHeight},releaseGLObjects:function(a){if(this._textureObject!==void 0&&this._textureObject!==null)a.deleteTexture(this._textureObject),this._textureObject=null,this._image=void 0},setWrapS:function(a){this._wrapS=typeof a==="string"?osg.Texture[a]:a},setWrapT:function(a){this._wrapT=typeof a==="string"?osg.Texture[a]:a},getWrapT:function(){return this._wrapT},getWrapS:function(){return this._wrapS},
getMinFilter:function(){return this._minFilter},getMagFilter:function(){return this._magFilter},setMinFilter:function(a){this._minFilter=typeof a==="string"?osg.Texture[a]:a},setMagFilter:function(a){this._magFilter=typeof a==="string"?osg.Texture[a]:a},setImage:function(a,c){this._image=a;this.setImageFormat(c);this.dirty()},getImage:function(){return this._image},setImageFormat:function(a){a?(typeof a==="string"&&(a=osg.Texture[a]),this._imageFormat=a):this._imageFormat=osg.Texture.RGBA;this.setInternalFormat(this._imageFormat)},
setUnrefImageDataAfterApply:function(a){this._unrefImageDataAfterApply=a},setInternalFormat:function(a){this._internalFormat=a},setFromCanvas:function(a,c){this.setImage(a,c)},isImageReady:function(a){if(a)if(a instanceof Image){if(a.complete)return a.naturalWidth!==void 0&&a.naturalWidth===0?!1:!0}else if(a instanceof HTMLCanvasElement)return!0;return!1},applyFilterParameter:function(a,c){a.texParameteri(c,a.TEXTURE_MAG_FILTER,this._magFilter);a.texParameteri(c,a.TEXTURE_MIN_FILTER,this._minFilter);
a.texParameteri(c,a.TEXTURE_WRAP_S,this._wrapS);a.texParameteri(c,a.TEXTURE_WRAP_T,this._wrapT)},generateMipmap:function(a,c){(this._minFilter===a.NEAREST_MIPMAP_NEAREST||this._minFilter===a.LINEAR_MIPMAP_NEAREST||this._minFilter===a.NEAREST_MIPMAP_LINEAR||this._minFilter===a.LINEAR_MIPMAP_LINEAR)&&a.generateMipmap(c)},apply:function(a){a=a.getGraphicContext();if(this._textureObject!==void 0&&!this.isDirty())a.bindTexture(this._textureTarget,this._textureObject);else if(this.default_type)a.bindTexture(this._textureTarget,
null);else{var c=this._image;c!==void 0?this.isImageReady(c)?(this._textureObject||this.init(a),c instanceof Image?this.setTextureSize(c.naturalWidth,c.naturalHeight):c instanceof HTMLCanvasElement&&this.setTextureSize(c.width,c.height),this.setDirty(!1),a.bindTexture(this._textureTarget,this._textureObject),a.texImage2D(this._textureTarget,0,this._internalFormat,this._imageFormat,a.UNSIGNED_BYTE,this._image),this.applyFilterParameter(a,this._textureTarget),this.generateMipmap(a,this._textureTarget),
this._unrefImageDataAfterApply&&delete this._image):a.bindTexture(this._textureTarget,null):this._textureHeight!==0&&this._textureWidth!==0&&(this._textureObject||this.init(a),a.bindTexture(this._textureTarget,this._textureObject),a.texImage2D(this._textureTarget,0,this._internalFormat,this._textureWidth,this._textureHeight,0,this._internalFormat,a.UNSIGNED_BYTE,null),this.applyFilterParameter(a,this._textureTarget),this.generateMipmap(a,this._textureTarget),this.setDirty(!1))}},setShaderGeneratorFunction:function(a,
c){this[c]=a},generateShader:function(a,c){return this[c]?this[c].call(this,a):""}});osg.Texture.prototype[osg.ShaderGeneratorType.VertexInit]=function(a){var c="attribute vec2 TexCoord"+a+";\n";c+="varying vec2 FragTexCoord"+a+";\n";return c};osg.Texture.prototype[osg.ShaderGeneratorType.VertexMain]=function(a){return"FragTexCoord"+a+" = TexCoord"+a+";\n"};
osg.Texture.prototype[osg.ShaderGeneratorType.FragmentInit]=function(a){var c="varying vec2 FragTexCoord"+a+";\n";c+="uniform sampler2D Texture"+a+";\n";c+="vec4 texColor"+a+";\n";return c};osg.Texture.prototype[osg.ShaderGeneratorType.FragmentMain]=function(a){var c="texColor"+a+" = texture2D( Texture"+a+", FragTexCoord"+a+".xy );\n";c+="fragColor = fragColor * texColor"+a+";\n";return c};osg.Texture.createFromURL=function(a,c){return osg.Texture.createFromImg(osgDB.readImage(a),c)};
osg.Texture.createFromImg=function(a,c){var e=new osg.Texture;e.setImage(a,c);return e};osg.Texture.createFromImage=osg.Texture.createFromImg;osg.Texture.createFromCanvas=function(a,c){var e=new osg.Texture;e.setFromCanvas(a,c);return e};osg.Texture.create=function(a){osg.log("osg.Texture.create is deprecated, use osg.Texture.createFromURL instead");return osg.Texture.createFromURL(a)};osg.TextureCubeMap=function(){osg.Texture.call(this);this._images={}};
osg.TextureCubeMap.prototype=osg.objectInehrit(osg.Texture.prototype,{attributeType:"TextureCubeMap",setDefaultParameters:function(){osg.Texture.prototype.setDefaultParameters.call(this);this._textureTarget=osg.Texture.TEXTURE_CUBE_MAP},cloneType:function(){var a=new osg.TextureCubeMap;a.default_type=!0;return a},setImage:function(a,c,e){typeof a==="string"&&(a=osg.Texture[a]);this._images[a]===void 0&&(this._images[a]={});typeof e==="string"&&(e=osg.Texture[e]);if(e===void 0)e=osg.Texture.RGBA;this._images[a].image=
c;this._images[a].format=e;this._images[a].dirty=!0;this.dirty()},getImage:function(a){return this._images[a].image},applyTexImage2D_load:function(a,c,e,f,g,h,i){if(!i)return!1;if(!osg.Texture.prototype.isImageReady(i))return!1;i instanceof Image?this.setTextureSize(i.naturalWidth,i.naturalHeight):i instanceof HTMLCanvasElement&&this.setTextureSize(i.width,i.height);a.texImage2D(c,0,f,g,h,i);return!0},_applyImageTarget:function(a,c,e){var f=this._images[e];if(!f)return 0;if(!f.dirty)return 1;return this.applyTexImage2D_load(a,
e,0,c,f.format,a.UNSIGNED_BYTE,f.image)?(f.dirty=!1,this._unrefImageDataAfterApply&&delete this._images[e],1):0},apply:function(a){a=a.getGraphicContext();if(this._textureObject!==void 0&&!this.isDirty())a.bindTexture(this._textureTarget,this._textureObject);else if(this.default_type)a.bindTexture(this._textureTarget,null);else{this._textureObject||this.init(a);a.bindTexture(this._textureTarget,this._textureObject);var c=this._internalFormat,e=0;e+=this._applyImageTarget(a,c,a.TEXTURE_CUBE_MAP_POSITIVE_X);
e+=this._applyImageTarget(a,c,a.TEXTURE_CUBE_MAP_NEGATIVE_X);e+=this._applyImageTarget(a,c,a.TEXTURE_CUBE_MAP_POSITIVE_Y);e+=this._applyImageTarget(a,c,a.TEXTURE_CUBE_MAP_NEGATIVE_Y);e+=this._applyImageTarget(a,c,a.TEXTURE_CUBE_MAP_POSITIVE_Z);e+=this._applyImageTarget(a,c,a.TEXTURE_CUBE_MAP_NEGATIVE_Z);e===6&&(this.setDirty(!1),this.applyFilterParameter(a,this._textureTarget),this.generateMipmap(a,this._textureTarget))}}});
osg.UpdateVisitor=function(){osg.NodeVisitor.call(this);var a=new osg.FrameStamp;this.getFrameStamp=function(){return a};this.setFrameStamp=function(c){a=c}};osg.UpdateVisitor.prototype=osg.objectInehrit(osg.NodeVisitor.prototype,{apply:function(a){for(var c=a.getUpdateCallbackList(),e=0,f=c.length;e<f;e++)if(!c[e].update(a,this))return;this.traverse(a)}});
osg.Viewport=function(a,c,e,f){osg.StateAttribute.call(this);a===void 0&&(a=0);c===void 0&&(c=0);e===void 0&&(e=800);f===void 0&&(f=600);this._x=a;this._y=c;this._width=e;this._height=f;this._dirty=!0};
osg.Viewport.prototype=osg.objectInehrit(osg.StateAttribute.prototype,{attributeType:"Viewport",cloneType:function(){return new osg.Viewport},getType:function(){return this.attributeType},getTypeMember:function(){return this.attributeType},apply:function(a){a.getGraphicContext().viewport(this._x,this._y,this._width,this._height);this._dirty=!1},setViewport:function(a,c,e,f){this._x=a;this._y=c;this._width=e;this._height=f;this.dirty()},x:function(){return this._x},y:function(){return this._y},width:function(){return this._width},
height:function(){return this._height},computeWindowMatrix:function(){var a=osg.Matrix.makeTranslate(1,1,1),c=osg.Matrix.makeScale(0.5*this._width,0.5*this._height,0.5),e=osg.Matrix.makeTranslate(this._x,this._y,0);return osg.Matrix.preMult(e,osg.Matrix.preMult(c,a))}});osg.CullStack=function(){this._modelviewMatrixStack=[];this._projectionMatrixStack=[];this._viewportStack=[];this._bbCornerNear=this._bbCornerFar=0};
osg.CullStack.prototype={getViewport:function(){return this._viewportStack.length===0?void 0:this._viewportStack[this._viewportStack.length-1]},getLookVectorLocal:function(){var a=this._modelviewMatrixStack[this._modelviewMatrixStack.length-1];return[-a[2],-a[6],-a[10]]},pushViewport:function(a){this._viewportStack.push(a)},popViewport:function(){this._viewportStack.pop()},pushModelviewMatrix:function(a){this._modelviewMatrixStack.push(a);a=this.getLookVectorLocal();this._bbCornerFar=(a[0]>=0?1:0)|
(a[1]>=0?2:0)|(a[2]>=0?4:0);this._bbCornerNear=~this._bbCornerFar&7},popModelviewMatrix:function(){this._modelviewMatrixStack.pop();var a;a=this._modelviewMatrixStack.length!==0?this.getLookVectorLocal():[0,0,-1];this._bbCornerFar=(a[0]>=0?1:0)|(a[1]>=0?2:0)|(a[2]>=0?4:0);this._bbCornerNear=~this._bbCornerFar&7},pushProjectionMatrix:function(a){this._projectionMatrixStack.push(a)},popProjectionMatrix:function(){this._projectionMatrixStack.pop()}};
osg.CullVisitor=function(){osg.NodeVisitor.call(this);osg.CullSettings.call(this);osg.CullStack.call(this);this._rootRenderStage=this._currentRenderStage=this._currentRenderBin=this._currentStateGraph=this._rootStateGraph=void 0;this._computeNearFar=!0;this._computedNear=Number.POSITIVE_INFINITY;this._computedFar=Number.NEGATIVE_INFINITY;var a=[0,0,-1];this._bbCornerFar=(a[0]>=0?1:0)|(a[1]>=0?2:0)|(a[2]>=0?4:0);this._bbCornerNear=~this._bbCornerFar&7;this._reserveMatrixStack=[[]];this._reserveMatrixStack.current=
0;this._reserveLeafStack=[{}];this._reserveLeafStack.current=0;this._renderBinStack=[]};
osg.CullVisitor.prototype=osg.objectInehrit(osg.CullStack.prototype,osg.objectInehrit(osg.CullSettings.prototype,osg.objectInehrit(osg.NodeVisitor.prototype,{distance:function(a,c){return-(a[0]*c[2]+a[1]*c[6]+a[2]*c[10]+c[14])},updateCalculatedNearFar:function(a,c){var e=c.getBoundingBox(),f;f=this.distance(e.corner(this._bbCornerNear),a);e=this.distance(e.corner(this._bbCornerFar),a);if(f>e){var g=f;f=e;e=g}if(e<0)return!1;if(f<this._computedNear)this._computedNear=f;if(e>this._computedFar)this._computedFar=
e;return!0},clampProjectionMatrix:function(a,c,e,f,g){if(e<c-1.0E-6)return osg.log("clampProjectionMatrix not applied, invalid depth range, znear = "+c+" zfar = "+e),!1;var h,i;e<c+1.0E-6&&(e=(c+e)*0.5,c=e-1.0E-6,e+=1.0E-6);if(Math.abs(osg.Matrix.get(a,0,3))<1.0E-6&&Math.abs(osg.Matrix.get(a,1,3))<1.0E-6&&Math.abs(osg.Matrix.get(a,2,3))<1.0E-6)i=(e-c)*0.02,i<1&&(i=1),h=c-i,i=e+i,c=h,e=i,osg.Matrix.set(a,2,2,-2/(i-h)),osg.Matrix.set(a,3,2,-(i+h)/(i-h));else{h=c*0.98;i=e*1.02;c=e*f;h<c&&(h=c);var c=
h,e=i,f=osg.Matrix.get(a,2,2),j=osg.Matrix.get(a,3,2),k=osg.Matrix.get(a,2,3),m=osg.Matrix.get(a,3,3);h=(-h*f+j)/(-h*k+m);i=(-i*f+j)/(-i*k+m);f=Math.abs(2/(h-i));osg.Matrix.postMult([1,0,0,0,0,1,0,0,0,0,f,0,0,0,-(h+i)/2*f,1],a)}g!==void 0&&(g[0]=c,g[1]=e);return!0},setStateGraph:function(a){this._currentStateGraph=this._rootStateGraph=a},setRenderStage:function(a){this._currentRenderBin=this._rootRenderStage=a},reset:function(){this._modelviewMatrixStack.splice(0,this._modelviewMatrixStack.length);
this._projectionMatrixStack.splice(0,this._projectionMatrixStack.length);this._reserveMatrixStack.current=0;this._reserveLeafStack.current=0;this._computedNear=Number.POSITIVE_INFINITY;this._computedFar=Number.NEGATIVE_INFINITY},getCurrentRenderBin:function(){return this._currentRenderBin},setCurrentRenderBin:function(a){this._currentRenderBin=a},addPositionedAttribute:function(a){var c=this._modelviewMatrixStack[this._modelviewMatrixStack.length-1];this._currentRenderBin.getStage().positionedAttribute.push([c,
a])},pushStateSet:function(a){this._currentStateGraph=this._currentStateGraph.findOrInsert(a);if(a.getBinName()!==void 0){var c=this._currentRenderBin;this._renderBinStack.push(c);this._currentRenderBin=c.getStage().findOrInsert(a.getBinNumber(),a.getBinName())}},popStateSet:function(){var a=this._currentStateGraph,c=a.getStateSet();this._currentStateGraph=a.parent;if(c.getBinName()!==void 0)a=this._renderBinStack,this._currentRenderBin=a.length===0?this._currentRenderBin.getStage():a.pop()},popProjectionMatrix:function(){this._computeNearFar===
!0&&this._computedFar>=this._computedNear&&this.clampProjectionMatrix(this._projectionMatrixStack[this._projectionMatrixStack.length-1],this._computedNear,this._computedFar,this._nearFarRatio);osg.CullStack.prototype.popProjectionMatrix.call(this)},apply:function(a){this[a.objectType].call(this,a)},_getReservedMatrix:function(){var a=this._reserveMatrixStack[this._reserveMatrixStack.current++];this._reserveMatrixStack.current===this._reserveMatrixStack.length&&this._reserveMatrixStack.push(osg.Matrix.makeIdentity([]));
return a},_getReservedLeaf:function(){var a=this._reserveLeafStack[this._reserveLeafStack.current++];this._reserveLeafStack.current===this._reserveLeafStack.length&&this._reserveLeafStack.push({});return a}})));
osg.CullVisitor.prototype[osg.Camera.prototype.objectType]=function(a){var c=a.getStateSet();c&&this.pushStateSet(c);a.light&&this.addPositionedAttribute(a.light);var e=this._getReservedMatrix(),f=this._getReservedMatrix();a.getReferenceFrame()===osg.Transform.RELATIVE_RF?(osg.Matrix.mult(this._projectionMatrixStack[this._projectionMatrixStack.length-1],a.getProjectionMatrix(),f),osg.Matrix.mult(this._modelviewMatrixStack[this._modelviewMatrixStack.length-1],a.getViewMatrix(),e)):(osg.Matrix.copy(a.getViewMatrix(),
e),osg.Matrix.copy(a.getProjectionMatrix(),f));this.pushProjectionMatrix(f);this.pushModelviewMatrix(e);a.getViewport()&&this.pushViewport(a.getViewport());var e=this._computedNear,f=this._computedFar,g=new osg.CullSettings;g.setCullSettings(this);this._computedNear=Number.POSITIVE_INFINITY;this._computedFar=Number.NEGATIVE_INFINITY;this.setCullSettings(a);if(a.getRenderOrder()===osg.Camera.NESTED_RENDER)a.traverse&&this.traverse(a);else{var h=this.getCurrentRenderBin().getStage(),i=new osg.RenderStage;
i.setCamera(a);i.setClearDepth(a.getClearDepth());i.setClearColor(a.getClearColor());i.setClearMask(a.getClearMask());h=a.getViewport()===void 0?h.getViewport():a.getViewport();i.setViewport(h);h=this.getCurrentRenderBin();this.setCurrentRenderBin(i);a.traverse&&a.traverse(this);this.setCurrentRenderBin(h);a.getRenderOrder()===osg.Camera.PRE_RENDER?this.getCurrentRenderBin().getStage().addPreRenderStage(i,a.renderOrderNum):this.getCurrentRenderBin().getStage().addPostRenderStage(i,a.renderOrderNum)}this.popModelviewMatrix();
this.popProjectionMatrix();a.getViewport()&&this.popViewport();this.setCullSettings(g);this._computedNear=e;this._computedFar=f;c&&this.popStateSet()};
osg.CullVisitor.prototype[osg.MatrixTransform.prototype.objectType]=function(a){var c=this._getReservedMatrix();a.getReferenceFrame()===osg.Transform.RELATIVE_RF?osg.Matrix.mult(this._modelviewMatrixStack[this._modelviewMatrixStack.length-1],a.getMatrix(),c):osg.Matrix.copy(a.getMatrix(),c);this.pushModelviewMatrix(c);(c=a.getStateSet())&&this.pushStateSet(c);a.light&&this.addPositionedAttribute(a.light);a.traverse&&this.traverse(a);c&&this.popStateSet();this.popModelviewMatrix()};
osg.CullVisitor.prototype[osg.Projection.prototype.objectType]=function(a){lastMatrixStack=this._projectionMatrixStack[this._projectionMatrixStack.length-1];var c=this._getReservedMatrix();osg.Matrix.mult(lastMatrixStack,a.getProjectionMatrix(),c);this.pushProjectionMatrix(c);(c=a.getStateSet())&&this.pushStateSet(c);a.traverse&&this.traverse(a);c&&this.popStateSet();this.popProjectionMatrix()};
osg.CullVisitor.prototype[osg.Node.prototype.objectType]=function(a){var c=a.getStateSet();c&&this.pushStateSet(c);a.light&&this.addPositionedAttribute(a.light);a.traverse&&this.traverse(a);c&&this.popStateSet()};osg.CullVisitor.prototype[osg.LightSource.prototype.objectType]=function(a){var c=a.getStateSet();c&&this.pushStateSet(c);var e=a.getLight();e&&this.addPositionedAttribute(e);this.traverse(a);c&&this.popStateSet()};
osg.CullVisitor.prototype[osg.Geometry.prototype.objectType]=function(a){var c=this._modelviewMatrixStack[this._modelviewMatrixStack.length-1],e=a.getBoundingBox();if(!this._computeNearFar||!e.valid()||this.updateCalculatedNearFar(c,a)){var f=a.getStateSet();f&&this.pushStateSet(f);var g=this._currentStateGraph.leafs;g.length===0&&this._currentRenderBin.addStateGraph(this._currentStateGraph);var h=this._getReservedLeaf(),i=0;e.valid()&&(i=this.distance(e.center(),c));isNaN(i)?osg.log("warning geometry has a NaN depth, "+
c+" center "+e.center()):(h.parent=this._currentStateGraph,h.projection=this._projectionMatrixStack[this._projectionMatrixStack.length-1],h.geometry=a,h.modelview=c,h.depth=i,g.push(h));f&&this.popStateSet()}};
var osgAnimation={EaseOutQuad:function(a){return-(a*(a-2))},EaseInQuad:function(a){return a*a},EaseOutCubic:function(a){a-=1;return a*a*a+1},EaseInCubic:function(a){return a*a*a},EaseOutQuart:function(a){a-=1;return-(a*a*a*a-1)},EaseInQuart:function(a){return a*a*a*a},EaseOutElastic:function(a){return Math.pow(2,-10*a)*Math.sin((a-0.075)*2*Math.PI/0.3)+1}};osgAnimation.easeOutQuad=osgAnimation.EaseOutQuad;osgAnimation.easeInQuad=osgAnimation.EaseInQuad;osgAnimation.easeOutCubic=osgAnimation.EaseOutCubic;
osgAnimation.easeInCubic=osgAnimation.EaseInCubic;osgAnimation.easeOutQuart=osgAnimation.EaseOutQuart;osgAnimation.easeInQuart=osgAnimation.EaseInQuart;osgAnimation.easeOutElastic=osgAnimation.EaseOutElastic;osgAnimation.Animation=function(){osg.Object.call(this);this._channels=[]};
osgAnimation.Animation.prototype=osg.objectInehrit(osg.Object.prototype,{getChannels:function(){return this._channels},getDuration:function(){for(var a=1E5,c=-1E5,e=0,f=this._channels.length;e<f;e++)var g=this._channels[e],a=Math.min(a,g.getStartTime()),c=Math.max(c,g.getEndTime());return c-a}});osgAnimation.BasicAnimationManager=function(){osg.Object.call(this);this._animations={};this._actives={};this._actives._keys=[];this._lastUpdate=void 0;this._targets=[]};
osgAnimation.BasicAnimationManager.prototype=osg.objectInehrit(osg.Object.prototype,{_updateAnimation:function(a,c,e){var f=a.duration,g=a.weight,h=a.anim,i=a.start,j=a.loop;if(j>0&&c-i>=j*f)return!0;c=(c-i)%f;(a=a.callback)&&a(c);h=h.getChannels();a=0;for(f=h.length;a<f;a++)h[a].update(c,g,e);return!1},update:function(a,c){this.updateManager(c.getFrameStamp().getSimulationTime());return!0},updateManager:function(a){for(var c=this._targets,e=0,f=c.length;e<f;e++)c[e].reset();if(this._actives._keys.length>
0)for(c=this._actives._keys.length-1;c>=0;){for(var e=this._actives[c],f=this._actives[c]._keys,g=[],h=0,i=f.length;h<i;h++){var j=e[f[h]];if(j.start===void 0)j.start=a;this._updateAnimation(j,a,c)&&g.push(h)}for(g=g.length-1;g>=0;g--)h=f[g],f.splice(g,1),delete e[h];c--}},stopAll:function(){},isPlaying:function(a){if(this._actives._keys.length>0)for(var c=this._actives._keys.length-1;c>=0;){if(this._actives[c][a])return!0;c--}return!1},stopAnimation:function(a){if(this._actives._keys.length>0)for(var c=
this._actives._keys.length-1,e=function(a){return a!=="_keys"};c>=0;){if(this._actives[c][a]){delete this._actives[c][a];this._actives[c]._keys=Object.keys(this._actives[c]).filter(e);break}c--}},playAnimationObject:function(a){if(a.name!==void 0){var c=this._animations[a.name];if(c===void 0)osg.log("no animation "+a.name+" found");else if(!this.isPlaying(a.name)){if(a.priority===void 0)a.priority=0;if(a.weight===void 0)a.weight=1;if(a.timeFactor===void 0)a.timeFactor=1;if(a.loop===void 0)a.loop=
0;if(this._actives[a.priority]===void 0)this._actives[a.priority]={},this._actives[a.priority]._keys=[],this._actives._keys.push(a.priority);a.start=void 0;a.duration=c.getDuration();a.anim=c;this._actives[a.priority][a.name]=a;this._actives[a.priority]._keys.push(a.name)}}},playAnimation:function(a,c,e){var f=a;if(typeof a==="object")if(a.getName===void 0)return this.playAnimationObject(a);else f=a.getName();return this.playAnimationObject({name:f,priority:c,weight:e})},registerAnimation:function(a){this._animations[a.getName()]=
a;this.buildTargetList()},getAnimationMap:function(){return this._animations},buildTargetList:function(){this._targets.length=0;for(var a=Object.keys(this._animations),c=0,e=a.length;c<e;c++)for(var f=this._animations[a[c]].getChannels(),g=0,h=f.length;g<h;g++)this._targets.push(f[g].getTarget())}});osgAnimation.Channel=function(a,c){osg.Object.call(this);this._sampler=a;this._target=c;this._targetName=void 0;this._data={value:void 0,key:0}};
osgAnimation.Channel.prototype=osg.objectInehrit(osg.Object.prototype,{getKeyframes:function(){return this._sampler.getKeyframes()},setKeyframes:function(a){this._sampler.setKeyframes(a)},getStartTime:function(){return this._sampler.getStartTime()},getEndTime:function(){return this._sampler.getEndTime()},getSampler:function(){return this._sampler},setSampler:function(a){this._sampler=a},getTarget:function(){return this._target},setTarget:function(a){this._target=a},setTargetName:function(a){this._targetName=
a},getTargetName:function(){return this._targetName},update:function(a,c,e){c=c||1;e=e||0;if(!(c<1.0E-4)){var f=this._data;this._sampler.getValueAt(a,f);this._target.update.call(this._target,c,f.value,e)}},reset:function(){this._target.reset()}});
osgAnimation.Vec3LerpChannel=function(a,c){var e=new osgAnimation.Sampler;a||(a=[]);c||(c=new osgAnimation.Vec3Target);osgAnimation.Channel.call(this,e,c);e.setInterpolator(osgAnimation.Vec3LerpInterpolator);this.setKeyframes(a);this._data.value=osg.Vec3.copy(c.getValue(),[])};osgAnimation.Vec3LerpChannel.prototype=osgAnimation.Channel.prototype;
osgAnimation.FloatLerpChannel=function(a,c){var e=new osgAnimation.Sampler;a||(a=[]);c||(c=new osgAnimation.FloatTarget);osgAnimation.Channel.call(this,e,c);e.setInterpolator(osgAnimation.FloatLerpInterpolator);this.setKeyframes(a);this._data.value=c.getValue()};osgAnimation.FloatLerpChannel.prototype=osgAnimation.Channel.prototype;
osgAnimation.QuatLerpChannel=function(a,c){var e=new osgAnimation.Sampler;a||(a=[]);c||(c=new osgAnimation.QuatTarget);osgAnimation.Channel.call(this,e,c);e.setInterpolator(osgAnimation.QuatLerpInterpolator);this.setKeyframes(a);this._data.value=osg.Quat.copy(c.getValue(),[])};osgAnimation.QuatLerpChannel.prototype=osgAnimation.Channel.prototype;osgAnimation.QuatSlerpChannel=function(a,c){osgAnimation.QuatLerpChannel.call(this,a,c);this.getSampler().setInterpolator(osgAnimation.QuatSlerpInterpolator)};
osgAnimation.QuatSlerpChannel.prototype=osgAnimation.Channel.prototype;osgAnimation.Vec3LerpInterpolator=function(a,c,e){var f,g;f=a[a.length-1];if(c>=f.t)e.key=0,e.value[0]=f[0],e.value[1]=f[1],e.value[2]=f[2];else if(f=a[0],g=f.t,c<=g)e.key=0,e.value[0]=f[0],e.value[1]=f[1],e.value[2]=f[2];else{for(f=e.key;a[f+1].t<c;)f++;g=f+1;var h=a[f].t,i=a[f][0],j=a[f][1],k=a[f][2],m=a[g][1],n=a[g][2],c=(c-h)/(a[g].t-h);e.value[0]=i+(a[g][0]-i)*c;e.value[1]=j+(m-j)*c;e.value[2]=k+(n-k)*c;e.key=f}};
osgAnimation.QuatLerpInterpolator=function(a,c,e){var f,g;f=a[a.length-1];if(c>=f.t)e.key=0,e.value[0]=f[0],e.value[1]=f[1],e.value[2]=f[2],e.value[3]=f[3];else if(f=a[0],g=f.t,c<=g)e.key=0,e.value[0]=f[0],e.value[1]=f[1],e.value[2]=f[2],e.value[3]=f[3];else{for(f=e.key;a[f+1].t<c;)f++;g=f+1;var h=a[f].t,i=a[f][0],j=a[f][1],k=a[f][2],m=a[f][3],n=a[g][1],o=a[g][2],p=a[g][3],c=(c-h)/(a[g].t-h);e.value[0]=i+(a[g][0]-i)*c;e.value[1]=j+(n-j)*c;e.value[2]=k+(o-k)*c;e.value[3]=m+(p-m)*c;e.key=f}};
osgAnimation.QuatSlerpInterpolator=function(a,c,e){var f,g;f=a[a.length-1];if(c>=f.t)e.key=0,e.value[0]=f[0],e.value[1]=f[1],e.value[2]=f[2],e.value[3]=f[3];else if(f=a[0],g=f.t,c<=g)e.key=0,e.value[0]=f[0],e.value[1]=f[1],e.value[2]=f[2],e.value[3]=f[3];else{for(f=e.key;a[f+1].t<c;)f++;g=f+1;var h=a[f].t;osg.Quat.slerp((c-h)/(a[g].t-h),a[f],a[g],e.value);e.key=f}};
osgAnimation.FloatLerpInterpolator=function(a,c,e){var f,g;f=a[a.length-1];if(c>=f.t)e.key=0,e.value=f[0];else if(f=a[0],g=f.t,c<=g)e.key=0,e.value=f[0];else{for(f=e.key;a[f+1].t<c;)f++;g=f+1;var h=a[f].t,i=a[f][0];e.value=i+(a[g][0]-i)*((c-h)/(a[g].t-h));e.key=f}};osgAnimation.FloatStepInterpolator=function(a,c,e){var f,g;f=a[a.length-1];if(c>=f.t)e.key=0,e.value=f[0];else if(f=a[0],g=f.t,c<=g)e.key=0,e.value=f[0];else{for(f=e.key;a[f+1].t<c;)f++;e.value=a[f][0];e.key=f}};
osgAnimation.createVec3Keyframe=function(a,c){var e=c.slice(0);e.t=a;return e};osgAnimation.createQuatKeyframe=function(a,c){var e=c.slice(0);e.t=a;return e};osgAnimation.createFloatKeyframe=function(a,c){var e=[c];e.t=a;return e};osgAnimation.LinkVisitor=function(){osg.NodeVisitor.call(this);this._animations=void 0;this._nbLinkTarget=0};
osgAnimation.LinkVisitor.prototype=osg.objectInehrit(osg.NodeVisitor.prototype,{setAnimationMap:function(a){this._animations=a;this._animationKeys=Object.keys(a)},apply:function(a){for(var c=a.getUpdateCallbackList(),e=0,f=c.length;e<f;e++){var g=c[e];g instanceof osgAnimation.AnimationUpdateCallback&&this.link(g)}this.traverse(a)},link:function(a){for(var c=0,e=this._animations,f=this._animationKeys,g=0,h=f.length;g<h;g++)c+=a.linkAnimation(e[f[g]]);this._nbLinkedTarget+=c;osg.log("linked "+c+' for "'+
a.getName()+'"')}});osgAnimation.Sampler=function(a,c){a||(a=[]);this._keys=a;this._interpolator=c};
osgAnimation.Sampler.prototype={getKeyframes:function(){return this._keys},setKeyframes:function(a){this._keys=a},setInterpolator:function(a){this._interpolator=a},getInterpolator:function(){return this._interpolator},getStartTime:function(){return this._keys.length===0?void 0:this._keys[0].t},getEndTime:function(){return this._keys.length===0?void 0:this._keys[this._keys.length-1].t},getValueAt:function(a,c){if(this._keys[c.key].t>a)c.key=0;this._interpolator(this._keys,a,c)}};
osgAnimation.StackedTranslate=function(a,c){osg.Object.call(this);c||(c=[0,0,0]);this._translate=c;this._target=void 0;this.setName(a)};
osgAnimation.StackedTranslate.prototype=osg.objectInehrit(osg.Object.prototype,{setTranslate:function(a){osg.Vec3.copy(a,this._translate)},setTarget:function(a){this._target=a},getTarget:function(){return this._target},update:function(){this._target!==void 0&&osg.Vec3.copy(this._target.getValue(),this._translate)},getOrCreateTarget:function(){if(!this._target)this._target=new osgAnimation.Vec3Target(this._translate);return this._target},applyToMatrix:function(a){osg.Matrix.preMultTranslate(a,this._translate)}});
osgAnimation.StackedRotateAxis=function(a,c,e){osg.Object.call(this);c||(c=[1,0,0]);e||(e=0);this._axis=c;this._angle=e;this._target=void 0;this.setName(a);this._matrixTmp=[];osg.Matrix.makeIdentity(this._matrixTmp);this._quatTmp=[];osg.Quat.makeIdentity(this._quatTmp)};
osgAnimation.StackedRotateAxis.prototype=osg.objectInehrit(osg.Object.prototype,{setAxis:function(a){osg.Vec3.copy(a,this._axis)},setAngle:function(a){this._angle=a},setTarget:function(a){this._target=a},getTarget:function(){return this._target},update:function(){if(this._target!==void 0)this._angle=this._target.getValue()},getOrCreateTarget:function(){if(!this._target)this._target=new osgAnimation.FloatTarget(this._angle);return this._target},applyToMatrix:function(a){var c=this._axis,e=this._quatTmp,
f=this._matrixTmp;osg.Quat.makeRotate(this._angle,c[0],c[1],c[2],e);osg.Matrix.setRotateFromQuat(f,e);osg.Matrix.preMult(a,f)}});osgAnimation.StackedQuaternion=function(a,c){osg.Object.call(this);c||(c=[0,0,0,1]);this._quaternion=c;this._target=void 0;this._matrixTmp=[];osg.Matrix.makeIdentity(this._matrixTmp);this.setName(a)};
osgAnimation.StackedQuaternion.prototype=osg.objectInehrit(osg.Object.prototype,{setQuaternion:function(a){osg.Quat.copy(a,this._quaternion)},setTarget:function(a){this._target=a},getTarget:function(){return this._target},update:function(){this._target!==void 0&&osg.Quat.copy(this._target.getValue(),this._quaternion)},getOrCreateTarget:function(){if(!this._target)this._target=new osgAnimation.QuatTarget(this._quaternion);return this._target},applyToMatrix:function(a){var c=this._matrixTmp;osg.Matrix.setRotateFromQuat(c,
this._quaternion);osg.Matrix.preMult(a,c)}});osgAnimation.Target=function(){this._lastPriority=this._count=this._priorityWeight=this._weight=0;this._target=void 0};osgAnimation.Target.prototype={reset:function(){this._priorityWeight=this._weight=0},getValue:function(){return this._target}};osgAnimation.Vec3Target=function(){osgAnimation.Target.call(this);this._target=[0,0,0]};
osgAnimation.Vec3Target.prototype=osg.objectInehrit(osgAnimation.Target.prototype,{update:function(a,c,e){if(this._weight||this._priorityWeight){if(this._lastPriority!=e)this._weight+=this._priorityWeight*(1-this._weight),this._priorityWeight=0,this._lastPriority=e;this._priorityWeight+=a;t=(1-this._weight)*a/this._priorityWeight;osg.Vec3.lerp(t,this._target,c,this._target)}else this._priorityWeight=a,this._lastPriority=e,osg.Vec3.copy(c,this._target)}});
osgAnimation.FloatTarget=function(a){osgAnimation.Target.call(this);this._target=[a]};
osgAnimation.FloatTarget.prototype=osg.objectInehrit(osgAnimation.Target.prototype,{update:function(a,c,e){if(this._weight||this._priorityWeight){if(this._lastPriority!=e)this._weight+=this._priorityWeight*(1-this._weight),this._priorityWeight=0,this._lastPriority=e;this._priorityWeight+=a;t=(1-this._weight)*a/this._priorityWeight;this._target+=(c-this._target)*t}else this._priorityWeight=a,this._lastPriority=e,this._target=c}});
osgAnimation.QuatTarget=function(){osgAnimation.Target.call(this);this._target=[];osg.Quat.makeIdentity(this._target)};
osgAnimation.QuatTarget.prototype=osg.objectInehrit(osgAnimation.Target.prototype,{update:function(a,c,e){if(this._weight||this._priorityWeight){if(this._lastPriority!=e)this._weight+=this._priorityWeight*(1-this._weight),this._priorityWeight=0,this._lastPriority=e;this._priorityWeight+=a;t=(1-this._weight)*a/this._priorityWeight;osg.Quat.lerp(t,this._target,c,this._target);osg.Quat.normalize(this._target,this._target)}else this._priorityWeight=a,this._lastPriority=e,osg.Quat.copy(c,this._target)}});
osgAnimation.AnimationUpdateCallback=function(){};osgAnimation.AnimationUpdateCallback.prototype=osg.objectInehrit(osg.Object.prototype,{linkChannel:function(){},linkAnimation:function(a){var c=this.getName();if(c.length===0)return osg.log("no name on an update callback, discard"),0;for(var e=0,a=a.getChannels(),f=0,g=a.length;f<g;f++){var h=a[f];h.getTargetName()===c&&(this.linkChannel(h),e++)}return e}});
osgAnimation.UpdateMatrixTransform=function(){osgAnimation.AnimationUpdateCallback.call(this);this._stackedTransforms=[]};
osgAnimation.UpdateMatrixTransform.prototype=osg.objectInehrit(osgAnimation.AnimationUpdateCallback.prototype,{getStackedTransforms:function(){return this._stackedTransforms},update:function(a){a=a.getMatrix();osg.Matrix.makeIdentity(a);for(var c=this._stackedTransforms,e=0,f=c.length;e<f;e++){var g=c[e];g.update();g.applyToMatrix(a)}return!0},linkChannel:function(a){for(var c=a.getName(),e=this._stackedTransforms,f=0,g=e.length;f<g;f++){var h=e[f],i=h.getName();if(c.length>0&&i===c&&(h=h.getOrCreateTarget()))return a.setTarget(h),
!0}osg.log("can't link channel "+c+", does not contain a symbolic name that can be linked to TransformElements")}});var osgUtil={TriangleHit:function(a,c,e,f,g,h,i,j){this.index=a;this.normal=c;this.r1=e;this.v1=f;this.r2=g;this.v2=h;this.r3=i;this.v3=j},TriangleIntersect:function(){this.hits=[];this.nodePath=[]}};
osgUtil.TriangleIntersect.prototype={setNodePath:function(a){this.nodePath=a},set:function(a,c){this.start=a;this.end=c;this.dir=osg.Vec3.sub(c,a,[]);this.length=osg.Vec3.length(this.dir);osg.Vec3.mult(this.dir,1/this.length,this.dir)},applyDrawElementsTriangles:function(a,c,e){for(var f=[],g=[],h=[],i,j=0;j<a;j+=3)i=e[j]*3,f[0]=c[i],f[1]=c[i+1],f[2]=c[i+2],i=e[j+1]*3,g[0]=c[i],g[1]=c[i+1],g[2]=c[i+2],i=e[j+2]*3,h[0]=c[i],h[1]=c[i+1],h[2]=c[i+2],this.intersect(f,g,h)},applyDrawElementsTriangleStrip:function(a,
c,e){for(var f=[],g=[],h=[],i,j,k,m=2,n=0;m<a;m++,n++)m%2?(i=e[n]*3,j=e[n+2]*3,k=e[n+1]*3):(i=e[n]*3,j=e[n+1]*3,k=e[n+2]*3),f[0]=c[i],f[1]=c[i+1],f[2]=c[i+2],g[0]=c[j],g[1]=c[j+1],g[2]=c[j+2],h[0]=c[k],h[1]=c[k+1],h[2]=c[k+2],this.intersect(f,g,h)},applyDrawElementsTriangleFan:function(a,c,e){var f=[],g=[],h=[],i=e[0]*3;f[0]=c[i];f[1]=c[i+1];f[2]=c[i+2];for(var j,k=2,m=1;k<a;k++,m++)i=e[m]*3,j=e[m+1]*3,g[0]=c[i],g[1]=c[i+1],g[2]=c[i+2],h[0]=c[j],h[1]=c[j+1],h[2]=c[j+2],this.intersect(f,g,h)},applyDrawArraysTriangles:function(a,
c,e){for(var f=[],g=[],h=[];a<c;a+=9)f[0]=e[a],f[1]=e[a+1],f[2]=e[a+2],g[0]=e[a+3],g[1]=e[a+4],g[2]=e[a+5],h[0]=e[a+6],h[1]=e[a+7],h[2]=e[a+8],this.intersect(f,g,h)},applyDrawArraysTriangleStrip:function(a,c,e){for(var f=[],g=[],h=[],i,j,k=2,m=a;k<c;k++,m++)k%2?(a=m*3,i=(m+2)*3,j=(m+1)*3):(a=m*3,i=(m+1)*3,j=(m+2)*3),f[0]=e[a],f[1]=e[a+1],f[2]=e[a+2],g[0]=e[i],g[1]=e[i+1],g[2]=e[i+2],h[0]=e[j],h[1]=e[j+1],h[2]=e[j+2],this.intersect(f,g,h)},applyDrawArraysTriangleFan:function(a,c,e){var f=[],g=[],h=
[],i=a*3;f[0]=e[i];f[1]=e[i+1];f[2]=e[i+2];for(var j,i=2,k=a+1;i<c;i++,k++)a=k*3,j=(k+1)*3,g[0]=e[a],g[1]=e[a+1],g[2]=e[a+2],h[0]=e[j],h[1]=e[j+1],h[2]=e[j+2],this.intersect(f,g,h)},apply:function(a){for(var c,e=a.getAttributes().Vertex.getElements(),f=this.index=0,g=a.primitives.length;f<g;f++)if(c=a.primitives[f],c.getIndices!==void 0){var h=c.indices.getElements();switch(c.getMode()){case gl.TRIANGLES:this.applyDrawElementsTriangles(c.getCount(),e,h);break;case gl.TRIANGLE_STRIP:this.applyDrawElementsTriangleStrip(c.getCount(),
e,h);break;case gl.TRIANGLE_FAN:this.applyDrawElementsTriangleFan(c.getCount(),e,h)}}else switch(c.getMode()){case gl.TRIANGLES:this.applyDrawArraysTriangles(c.getFirst(),c.getCount(),e);break;case gl.TRIANGLE_STRIP:this.applyDrawArraysTriangleStrip(c.getFirst(),c.getCount(),e);break;case gl.TRIANGLE_FAN:this.applyDrawArraysTriangleFan(c.getFirst(),c.getCount(),e)}},intersect:function(a,c,e){this.index++;if(!(a==c||c==e||a==e)){var f=osg.Vec3.sub(c,a,[]),g=osg.Vec3.cross(f,this.dir,[]),h=osg.Vec3.dot(osg.Vec3.sub(this.start,
a,[]),g),i=osg.Vec3.dot(osg.Vec3.sub(e,a,[]),g);if(i>=0){if(h<0)return;if(h>i)return}else{if(h>0)return;if(h<i)return}var g=osg.Vec3.sub(e,c,[]),j=osg.Vec3.cross(g,this.dir,[]),k=osg.Vec3.dot(osg.Vec3.sub(this.start,c,[]),j),j=osg.Vec3.dot(osg.Vec3.sub(a,c,[]),j);if(j>=0){if(k<0)return;if(k>j)return}else{if(k>0)return;if(k<j)return}var m=osg.Vec3.sub(a,e,[]),n=osg.Vec3.cross(m,this.dir,[]),m=osg.Vec3.dot(osg.Vec3.sub(this.start,e,[]),n),n=osg.Vec3.dot(osg.Vec3.sub(c,e,[]),n);if(n>=0){if(m<0)return;
if(m>n)return}else{if(m>0)return;if(m<n)return}if(h===0)h=0;else if(i!==0)h/=i;else return;if(k===0)k=0;else if(j!==0)k/=j;else return;if(m===0)i=0;else if(n!==0)i=m/n;else return;j=k+i+h;if(j!==1){if(j===0)return;j=1/j;k*=j;i*=j;h*=j}j=[];osg.Vec3.add(osg.Vec3.mult(a,k,[]),osg.Vec3.mult(c,i,[]),j);osg.Vec3.add(osg.Vec3.mult(e,h,[]),j,j);if(osg.Vec3.valid(j)){if(j=osg.Vec3.dot(osg.Vec3.sub(j,this.start,[]),this.dir),!(j<0)&&!(j>this.length))f=osg.Vec3.cross(f,g,[]),osg.Vec3.normalize(f,f),g=j/this.length,
j=[],j[0]=this.start[0]*(1-g)+this.end[0]*g,j[1]=this.start[1]*(1-g)+this.end[1]*g,j[2]=this.start[2]*(1-g)+this.end[2]*g,this.hits.push({ratio:g,nodepath:this.nodePath.slice(0),triangleHit:new osgUtil.TriangleHit(this.index-1,f,k,a,i,c,h,e),point:j}),this.hit=!0}else osg.log("Warning: TriangleIntersect "),osg.log("hit: "+j),osg.log(" "+a),osg.log(" "+c),osg.log(" "+e)}}};
osgUtil.IntersectVisitor=function(){osg.NodeVisitor.call(this);this.matrix=[];this.hits=[];this.nodePath=[]};
osgUtil.IntersectVisitor.prototype=osg.objectInehrit(osg.NodeVisitor.prototype,{addLineSegment:function(a,c){this.start=a;this.end=c},intersectSegmentWithSphere:function(a,c,e){var f=osg.Vec3.sub(a,e.center),e=osg.Vec3.length2(f)-e.radius*e.radius;if(e<0)return!0;c=osg.Vec3.sub(c,a);a=osg.Vec3.length2(c);f=osg.Vec3.dot(f,c)*2;e=f*f-4*a*e;if(e<0)return!1;e=Math.sqrt(e);c=0.5*a;a=(-f-e)*c;f=(-f+e)*c;return a<=0&&f<=0?!1:a>=1&&f>=1?!1:!0},pushModelMatrix:function(a){if(this.matrix.length>0){var c=osg.Matrix.copy(this.matrix[this.matrix.length-
1]);osg.Matrix.preMult(c,a);this.matrix.push(c)}else this.matrix.push(a)},getModelMatrix:function(){return this.matrix.length===0?osg.Matrix.makeIdentity([]):this.matrix[this.matrix.length-1]},popModelMatrix:function(){return this.matrix.pop()},getWindowMatrix:function(){return this.windowMatrix},getProjectionMatrix:function(){return this.projectionMatrix},getViewMatrix:function(){return this.viewMatrix},intersectSegmentWithGeometry:function(a,c,e){ti=new osgUtil.TriangleIntersect;ti.setNodePath(this.nodePath);
ti.set(a,c);ti.apply(e);a=ti.hits.length;if(a>0){for(c=0;c<a;c++)this.hits.push(ti.hits[c]);return!0}return!1},pushCamera:function(a){this.projectionMatrix=a.getProjectionMatrix();this.viewMatrix=a.getViewMatrix();a=a.getViewport();if(a!==void 0)this.windowMatrix=a.computeWindowMatrix()},applyCamera:function(a){this.pushCamera(a);this.traverse(a)},applyNode:function(a){a.getMatrix&&this.pushModelMatrix(a.getMatrix());if(a.primitives){var c=[];osg.Matrix.copy(this.getWindowMatrix(),c);osg.Matrix.preMult(c,
this.getProjectionMatrix());osg.Matrix.preMult(c,this.getViewMatrix());osg.Matrix.preMult(c,this.getModelMatrix());var e=[];if(!osg.Matrix.inverse(c,e))return;c=osg.Matrix.transformVec3(e,this.start);e=osg.Matrix.transformVec3(e,this.end);this.intersectSegmentWithGeometry(c,e,a)}a.traverse&&this.traverse(a);a.getMatrix&&this.popModelMatrix()},apply:function(a){this.enterNode(a)!==!1&&(a.getViewMatrix?this.applyCamera(a):this.applyNode(a))},enterNode:function(a){return a.boundingSphere!==void 0&&!this.intersectSegmentWithSphere?
!1:!0}});
osgUtil.ParameterVisitor=function(){osg.NodeVisitor.call(this);this.targetHTML=document.body;var a=function(){this.params={}};a.prototype={setTargetHTML:function(a){this.parent=a},selectParamFromName:function(a){var c=Object.keys(this.params);if(c.length===1)return this.params[c[0]];for(var e=0;e<c.length;e++){var f=this.params[c[e]],g=f.match;g===void 0&&(g=[c[e]]);for(var n=0;n<g.length;n++)if(a.search(g[n])!==-1)return f}return this.params.default},getValue:function(a){return window.localStorage?window.localStorage.getItem(a):
null},setValue:function(a,c){window.localStorage&&window.localStorage.setItem(a,c)},addToDom:function(a){var c=document.createElement("div");c.innerHTML=a;this.parent.appendChild(c)},createSlider:function(a,c,e,f,g,n){var o=n+"(this.value)",a='<div>NAME [ MIN - MAX ] <input type="range" min="MIN" max="MAX" value="VALUE" step="STEP" onchange="ONCHANGE" /><span id="UPDATE"></span></div>'.replace(/MIN/g,a),a=a.replace(/MAX/g,c+e),a=a.replace("STEP",e),a=a.replace("VALUE",f),a=a.replace(/NAME/g,g),a=
a.replace(/UPDATE/g,n);return a=a.replace("ONCHANGE",o)},createUniformFunction:function(a,c,e,f){self=this;return function(){return function(g){e.get()[c]=g;e.dirty();osg.log(a+" value "+g);document.getElementById(f).innerHTML=Number(g).toFixed(4);self.setValue(f,g)}}()},createFunction:function(a,c,e,f,g){self=this;return function(){return function(n){typeof n==="string"&&(n=parseFloat(n));typeof e[f]==="number"?e[f]=n:e[f][c]=n;osg.log(a+" value "+n);document.getElementById(g).innerHTML=Number(n).toFixed(4);
self.setValue(g,n)}}()},getCallbackName:function(a,c){return"change_"+c+"_"+a},createInternalSliderUniform:function(a,c,e,f,g){var n=this.selectParamFromName(a),o=n.value(),p=g;p===void 0&&(p=e(o,a));e=this.getCallbackName(a,f);for(f=0;f<c;f++){var q=f.toString(),s=a+q,q=e+q,u=o[f],y=this.getValue(q);y!==null?u=y:g&&g.get()[f]&&(u=g.get()[f]);this.addToDom(this.createSlider(n.min,n.max,n.step,u,s,q));window[q]=this.createUniformFunction(s,f,p,q);osg.log(s+" "+u);window[q](u)}return this.uniform=p},
createInternalSlider:function(a,c,e,f,g){for(var n=this.selectParamFromName(a),o=n.value(),e=this.getCallbackName(a,e),p=0;p<c;p++){var q=p.toString(),s=a+q,q=e+q,u=o[p],u=this.getValue(q),u=u!==null?u:typeof f[g]==="number"?f[g]:f[g][p];this.addToDom(this.createSlider(n.min,n.max,n.step,u,s,q));window[q]=this.createFunction(s,p,f,g,q);osg.log(s+" "+u);window[q](u)}}};var c=function(){this.params={};this.params.color={min:0,max:1,step:0.01,value:function(){return[0.5,0.5,0.5,1]},match:["color","diffuse",
"specular","ambient","emission"]};this.params["default"]=this.params.color};c.prototype=osg.objectInehrit(a.prototype,{createSliderUniform:function(a,c,e){return this.createInternalSliderUniform(a,4,osg.Uniform.createFloat4,c,e)},createSliderObject:function(a,c,e,f){return this.createInternalSlider(a,4,c,e,f)}});var e=function(){this.params={};this.params.position={min:-50,max:50,step:0.1,value:function(){return[0,0,0]},match:["position"]};this.params.normalized={min:0,max:1,step:0.01,value:function(){return[1,
0,0]},match:["normal","direction"]};this.params["default"]=this.params.position};e.prototype=osg.objectInehrit(a.prototype,{createSliderUniform:function(a,c,e){return this.createInternalSliderUniform(a,3,osg.Uniform.createFloat3,c,e)},createSliderObject:function(a,c,e,f){return this.createInternalSlider(a,3,c,e,f)}});var f=function(){this.params={};this.params.uv={min:-1,max:1,step:0.01,value:function(){return[0,0]},match:["texcoord, uv"]};this.params["default"]=this.params.uv};f.prototype=osg.objectInehrit(a.prototype,
{createSliderUniform:function(a,c,e){return this.createInternalSliderUniform(a,2,osg.Uniform.createFloat2,c,e)},createSliderObject:function(a,c,e,f){return this.createInternalSlider(a,2,c,e,f)}});var g=function(){this.params={};this.params["default"]={min:-1,max:1,step:0.01,value:function(){return[0]},match:[]}};g.prototype=osg.objectInehrit(a.prototype,{createSliderUniform:function(a,c,e){return this.createInternalSliderUniform(a,1,osg.Uniform.createFloat1,c,e)},createSliderObject:function(a,c,e,
f){return this.createInternalSlider(a,1,c,e,f)}});this.types={};this.types.vec4=new c;this.types.vec3=new e;this.types.vec2=new f;this.types.float=new g;this.setTargetHTML(document.body)};
osgUtil.ParameterVisitor.prototype=osg.objectInehrit(osg.NodeVisitor.prototype,{setTargetHTML:function(a){this.targetHTML=a;for(var a=Object.keys(this.types),c=0,e=a.length;c<e;c++)this.types[a[c]].setTargetHTML(this.targetHTML)},getUniformList:function(a,c){var e=a.match(/uniform\s+\w+\s+\w+/g);if(e!==null)for(var f=0,g=e.length;f<g;f++){var h=e[f].match(/uniform\s+(\w+)\s+(\w+)/),i=h[2];c[i]={type:h[1],name:i}}return c},getUniformFromStateSet:function(a,c){var e=a.getUniformList();if(e)for(var f=
Object.keys(c),g=0,h=f.length;g<h;g++){var i=f[g];if(e[i]!==void 0&&c[i].uniform===void 0)c[i].uniform=e[i].object}},findExistingUniform:function(a,c){var e=function(){osg.NodeVisitor.call(this,osg.NodeVisitor.TRAVERSE_PARENTS)};e.prototype=osg.objectInehrit(osg.NodeVisitor.prototype,{setUniformMap:function(a){this.uniformMap=a},apply:function(a){var c=a.getStateSet(),e=osgUtil.ShaderParameterVisitor.prototype.getUniformFromStateSet;c&&e(c,this.uniformMap);this.traverse(a)}});e=new e;e.setUniformMap(c);
a.accept(e)},applyProgram:function(a,c){var e=c.getAttribute("Program"),f=e.getName();e.getVertexShader().getText();var g={};this.getUniformList(e.getVertexShader().getText(),g);this.getUniformList(e.getFragmentShader().getText(),g);e=Object.keys(g);f===void 0&&(f=function(a){var c=0,e=0;if(a.length==0)return c;for(i=0;i<a.length;i++)e=a.charCodeAt(i),c=(c<<5)-c+e,c&=c;c<0&&(c=-c);return c}(e.join("")).toString());this.findExistingUniform(a,g);for(var h=!1,i=0;i<e.length;i++){var j=g[e[i]],k=j.type,
m=j.name;this.types[k]!==void 0&&(h=this.types[k].createSliderUniform(m,f,j.uniform),j.uniform===void 0&&h&&c.addUniform(h),h=!0)}if(h)f=document.createElement("div"),f.innerHTML="<p> </p>",this.targetHTML.appendChild(f);osg.log(g)},applyLight:function(a,c){var e=c.getAttribute("Light0");this.types.float.params.spotCutoff={min:0,max:180,step:1,value:function(){return 180}};this.types.float.params.spotCutoffEnd=this.types.float.params.spotCutoff;this.types.vec4.params.position={min:-50,max:50,step:1,
value:function(){return[0,0,1,0]}};this.types.vec4.createSliderObject("ambient",e.getTypeMember()+"_ambient",e,"_ambient");this.types.vec4.createSliderObject("diffuse",e.getTypeMember()+"_diffuse",e,"_diffuse");this.types.vec4.createSliderObject("specular",e.getTypeMember()+"_specular",e,"_specular");this.types.vec3.createSliderObject("direction",e.getTypeMember()+"_direction",e,"_direction");this.types.vec4.createSliderObject("position",e.getTypeMember()+"_position",e,"_position");this.types.float.createSliderObject("spotCutoff",
e.getTypeMember()+"_spotCutoff",e,"_spotCutoff");this.types.float.createSliderObject("spotCutoffEnd",e.getTypeMember()+"_spotCutoffEnd",e,"_spotCutoffEnd");e=document.createElement("div");e.innerHTML="<p> </p>";this.targetHTML.appendChild(e)},applyStateSet:function(a,c){c.getAttribute("Program")!==void 0?this.applyProgram(a,c):c.getAttribute("Light0")!==void 0&&this.applyLight(a,c)},apply:function(a){var c=this.targetHTML;c===void 0||c===null||(c=a.getStateSet(),c!==void 0&&this.applyStateSet(a,c),
this.traverse(a))}});osgUtil.ParameterVisitor.SliderParameter=function(){};
osgUtil.ParameterVisitor.SliderParameter.prototype={addToDom:function(a,c){var e=document.createElement("div");e.innerHTML=c;a.appendChild(e)},createInternalSlider:function(a,c,e,f,g,h){for(var e=this.getCallbackName(a,e),i=0;i<c;i++){var j=i.toString(),k=a+j,j=e+j,m;m=this.getValue(j);m=m!==null?m:typeof g[h]==="number"?g[h]:g[h][i];var n=this.createDomSlider(m,f.min,f.max,f.step,k,j);this.addToDom(f.dom,n);window[j]=this.createFunction(k,i,g,h,j,f.onchange);osg.log(k+" "+m);window[j](m)}},createDomSlider:function(a,
c,e,f,g,h){var i=h+"(this.value)",c='<div>NAME [ MIN - MAX ] <input type="range" min="MIN" max="MAX" value="VALUE" step="STEP" onchange="ONCHANGE" /><span id="UPDATE"></span></div>'.replace(/MIN/g,c),c=c.replace(/MAX/g,e+0.0010),c=c.replace("STEP",f),c=c.replace("VALUE",a),c=c.replace(/NAME/g,g),c=c.replace(/UPDATE/g,h);return c=c.replace("ONCHANGE",i)},getCallbackName:function(a,c){return"change_"+c+"_"+a},createFunction:function(a,c,e,f,g,h){self=this;return function(){return function(i){typeof i===
"string"&&(i=parseFloat(i));typeof e[f]==="number"?e[f]=i:e[f][c]=i;osg.log(a+" value "+i);document.getElementById(g).innerHTML=Number(i).toFixed(4);self.setValue(g,i);h&&h(e[f])}}()},getValue:function(a){return window.localStorage?window.localStorage.getItem(a):null},setValue:function(a,c){window.localStorage&&window.localStorage.setItem(a,c)}};
osgUtil.ParameterVisitor.createSlider=function(a,c,e,f,g,h,i,j,k,m){var n=osgUtil.ParameterVisitor;if(n.sliders===void 0)n.sliders=new n.SliderParameter;g={value:g,min:h,max:i,step:j,onchange:m,dom:k};return typeof e[f]==="number"?n.sliders.createInternalSlider(a,1,c,g,e,f):n.sliders.createInternalSlider(a,e[f].length,c,g,e,f)};osgUtil.ShaderParameterVisitor=osgUtil.ParameterVisitor;var osgDB={ObjectWrapper:{}};osgDB.ObjectWrapper.serializers={};osgDB.ObjectWrapper.global=this;
osgDB.ObjectWrapper.getObject=function(a){for(var c=osgDB.ObjectWrapper.global,a=a.split("."),e=0,f=a.length;e<f;e++)if(c=c[a[e]],c===void 0)return;return new c};
osgDB.ObjectWrapper.readObject=function(a){var c=Object.keys(a)[0];if(c){var e=osgDB.ObjectWrapper.getObject(c);if(e){for(var f=osgDB.ObjectWrapper.serializers,g=c.split("."),h=0,i=g.length;h<i;h++)if(f=f[g[h]],f===void 0){osg.log("can't find function to read object "+c+" - undefined");return}f(a[c],e);return e}else osg.log("can't instanciate object "+c)}else osg.log("can't find property for object "+a)};
osgDB.readImage=function(a){var c=new Image;c.onerror=function(){osg.warn("warning use white texture as fallback instead of "+a);c.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2P8DwQACgAD/il4QJ8AAAAASUVORK5CYII="};c.src=a;return c};
osgDB.parseSceneGraph=function(a){if(a.Version&&a.Version>0){var c=function(a){for(var a=Object.keys(a),c=0,e=a.length;c<e;c++)if(a[c]!=="Generator"&&a[c]!=="Version")return a[c]}(a);if(c){var e={};e[c]=a[c];return osgDB.ObjectWrapper.readObject(e)}else osg.log("Can't parse scenegraph "+a)}else return osgDB.parseSceneGraph_deprecated(a)};
osgDB.parseSceneGraph_deprecated=function(a){var c=function(a,c){var e=c[a];e===void 0&&(e=c[a.toLowerCase()]);return e},e=function(a,e){var f=c("Name",e);f&&a.setName!==void 0&&a.setName(f)},f=function(a,f){e(a,f);var g=c("Textures",f)||c("TextureAttributeList",f)||void 0;if(g)for(var h=0,k=g.length;h<k;h++)if(c("File",g[h])){var i=new osg.Texture,j=i,m=g[h],n=m.MagFilter||m.mag_filter||void 0;n&&j.setMagFilter(n);(n=m.MinFilter||m.min_filter||void 0)&&j.setMinFilter(n);(n=m.WrapT||m.wrap_t||void 0)&&
j.setWrapT(n);(n=m.WrapS||m.wrap_s||void 0)&&j.setWrapS(n);m=c("File",m);m=osgDB.readImage(m);j.setImage(m);a.setTextureAttributeAndMode(h,i);a.addUniform(osg.Uniform.createInt1(h,"Texture"+h))}else osg.log("no texture on unit "+h+" skip it");if(g=c("BlendFunc",f))h=new osg.BlendFunc,e(h,g),h.setSourceRGB(g.SourceRGB),h.setSourceAlpha(g.SourceAlpha),h.setDestinationRGB(g.DestinationRGB),h.setDestinationAlpha(g.DestinationAlpha),a.setAttributeAndMode(h);if(g=c("Material",f))h=new osg.Material,e(h,
g),h.setAmbient(c("Ambient",g)),h.setDiffuse(c("Diffuse",g)),h.setEmission(c("Emission",g)),h.setSpecular(c("Specular",g)),h.setShininess(c("Shininess",g)),a.setAttributeAndMode(h)},g,h=a.children,i=a.primitives||a.Primitives||void 0,j=a.attributes||a.Attributes||void 0;if(i||j){g=new osg.Geometry;e(g,a);osg.extend(g,a);a=g;a.primitives=i;a.attributes=j;g=0;for(var k=i.length;g<k;g++){var m=i[g].mode;if(i[g].indices){var n=i[g].indices,n=new osg.BufferArray(osg.BufferArray[n.type],n.elements,n.itemSize),
m=m?osg.PrimitiveSet[m]:gl.TRIANGLES;i[g]=new osg.DrawElements(m,n)}else m=gl[m],i[g]=new osg.DrawArrays(m,i[g].first,i[g].count)}for(var o in j)j.hasOwnProperty(o)&&(i=j[o],j[o]=new osg.BufferArray(gl[i.type],i.elements,i.itemSize))}if(j=c("StateSet",a))o=new osg.StateSet,f(o,j),a.stateset=o;if(f=a.matrix||a.Matrix||void 0)g=new osg.MatrixTransform,e(g,a),osg.extend(g,a),g.setMatrix(osg.Matrix.copy(f)),a=g;if(f=a.projection||a.Projection||void 0)g=new osg.Projection,e(g,a),osg.extend(g,a),g.setProjectionMatrix(osg.Matrix.copy(f)),
a=g;a.objectType===void 0&&(g=new osg.Node,e(g,a),osg.extend(g,a),a=g);if(h){a.children=[];f=0;for(j=h.length;f<j;f++)a.addChild(osgDB.parseSceneGraph_deprecated(h[f]))}return a};var osgViewer={};
WebGLUtils=function(){var a='This page requires a browser that supports WebGL.<br/><a href="http://get.webgl.org">Click here to upgrade your browser.</a>',c='It doesn\'t appear your computer can support WebGL.<br/><a href="http://get.webgl.org">Click here for more information.</a>',e=function(a,c){for(var e=["webgl","experimental-webgl","webkit-3d","moz-webgl"],i=null,j=0;j<e.length;++j){try{i=a.getContext(e[j],c)}catch(k){}if(i)break}return i};return{create3DContext:e,setupWebGL:function(f,g,h){function i(e){var f=
document.getElementsByTagName("body")[0];if(f){var g=window.WebGLRenderingContext?c:a;e&&(g+="<br/><br/>Status: "+e);f.innerHTML='<div style="margin: auto; width:500px;z-index:10000;margin-top:20em;text-align:center;">'+g+"</div>"}}h=h||i;f.addEventListener&&f.addEventListener("webglcontextcreationerror",function(a){h(a.statusMessage)},!1);(f=e(f,g))||h("");return f}}}();
if(!window.requestAnimationFrame)window.requestAnimationFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){window.setTimeout(a,1E3/60)}}();
if(!window.cancelRequestAnimFrame)window.cancelRequestAnimFrame=function(){return window.cancelAnimationFrame||window.webkitCancelRequestAnimationFrame||window.mozCancelRequestAnimationFrame||window.oCancelRequestAnimationFrame||window.msCancelRequestAnimationFrame||clearTimeout}();
WebGLDebugUtils=function(){function a(a){if(j===null){j={};for(var c in a)typeof a[c]=="number"&&(j[a[c]]=c)}}function c(){if(j===null)throw"WebGLDebugUtils.init(ctx) not called";}function e(a){c();var e=j[a];return e!==void 0?e:"*UNKNOWN WebGL ENUM (0x"+a.toString(16)+")"}function f(a,c,f){a=i[a];return a!==void 0&&a[c]?e(f):f.toString()}function g(a,c,e){a.__defineGetter__(e,function(){return c[e]});a.__defineSetter__(e,function(a){c[e]=a})}function h(a){var c=a.getParameter(a.MAX_VERTEX_ATTRIBS),
e=a.createBuffer();a.bindBuffer(a.ARRAY_BUFFER,e);var f;for(f=0;f<c;++f)a.disableVertexAttribArray(f),a.vertexAttribPointer(f,4,a.FLOAT,!1,0,0),a.vertexAttrib1f(f,0);a.deleteBuffer(e);c=a.getParameter(a.MAX_TEXTURE_IMAGE_UNITS);for(f=0;f<c;++f)a.activeTexture(a.TEXTURE0+f),a.bindTexture(a.TEXTURE_CUBE_MAP,null),a.bindTexture(a.TEXTURE_2D,null);a.activeTexture(a.TEXTURE0);a.useProgram(null);a.bindBuffer(a.ARRAY_BUFFER,null);a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,null);a.bindFramebuffer(a.FRAMEBUFFER,
null);a.bindRenderbuffer(a.RENDERBUFFER,null);a.disable(a.BLEND);a.disable(a.CULL_FACE);a.disable(a.DEPTH_TEST);a.disable(a.DITHER);a.disable(a.SCISSOR_TEST);a.blendColor(0,0,0,0);a.blendEquation(a.FUNC_ADD);a.blendFunc(a.ONE,a.ZERO);a.clearColor(0,0,0,0);a.clearDepth(1);a.clearStencil(-1);a.colorMask(!0,!0,!0,!0);a.cullFace(a.BACK);a.depthFunc(a.LESS);a.depthMask(!0);a.depthRange(0,1);a.frontFace(a.CCW);a.hint(a.GENERATE_MIPMAP_HINT,a.DONT_CARE);a.lineWidth(1);a.pixelStorei(a.PACK_ALIGNMENT,4);a.pixelStorei(a.UNPACK_ALIGNMENT,
4);a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,!1);a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1);a.UNPACK_COLORSPACE_CONVERSION_WEBGL&&a.pixelStorei(a.UNPACK_COLORSPACE_CONVERSION_WEBGL,a.BROWSER_DEFAULT_WEBGL);a.polygonOffset(0,0);a.sampleCoverage(1,!1);a.scissor(0,0,a.canvas.width,a.canvas.height);a.stencilFunc(a.ALWAYS,0,4294967295);a.stencilMask(4294967295);a.stencilOp(a.KEEP,a.KEEP,a.KEEP);a.viewport(0,0,a.canvas.width,a.canvas.height);for(a.clear(a.COLOR_BUFFER_BIT|a.DEPTH_BUFFER_BIT|a.STENCIL_BUFFER_BIT);a.getError(););
}var i={enable:{0:!0},disable:{0:!0},getParameter:{0:!0},drawArrays:{0:!0},drawElements:{0:!0,2:!0},createShader:{0:!0},getShaderParameter:{1:!0},getProgramParameter:{1:!0},getVertexAttrib:{1:!0},vertexAttribPointer:{2:!0},bindTexture:{0:!0},activeTexture:{0:!0},getTexParameter:{0:!0,1:!0},texParameterf:{0:!0,1:!0},texParameteri:{0:!0,1:!0,2:!0},texImage2D:{0:!0,2:!0,6:!0,7:!0},texSubImage2D:{0:!0,6:!0,7:!0},copyTexImage2D:{0:!0,2:!0},copyTexSubImage2D:{0:!0},generateMipmap:{0:!0},bindBuffer:{0:!0},
bufferData:{0:!0,2:!0},bufferSubData:{0:!0},getBufferParameter:{0:!0,1:!0},pixelStorei:{0:!0,1:!0},readPixels:{4:!0,5:!0},bindRenderbuffer:{0:!0},bindFramebuffer:{0:!0},checkFramebufferStatus:{0:!0},framebufferRenderbuffer:{0:!0,1:!0,2:!0},framebufferTexture2D:{0:!0,1:!0,2:!0},getFramebufferAttachmentParameter:{0:!0,1:!0,2:!0},getRenderbufferParameter:{0:!0,1:!0},renderbufferStorage:{0:!0,1:!0},clear:{0:!0},depthFunc:{0:!0},blendFunc:{0:!0,1:!0},blendFuncSeparate:{0:!0,1:!0,2:!0,3:!0},blendEquation:{0:!0},
blendEquationSeparate:{0:!0,1:!0},stencilFunc:{0:!0},stencilFuncSeparate:{0:!0,1:!0},stencilMaskSeparate:{0:!0},stencilOp:{0:!0,1:!0,2:!0},stencilOpSeparate:{0:!0,1:!0,2:!0,3:!0},cullFace:{0:!0},frontFace:{0:!0}},j=null;return{init:a,mightBeEnum:function(a){c();return j[a]!==void 0},glEnumToString:e,glFunctionArgToString:f,makeDebugContext:function(c,h){function i(a,c){return function(){var e=a[c].apply(a,arguments),f=a.getError();f!==0&&(j[f]=!0,h(f,c,arguments));return e}}a(c);var h=h||function(a,
c,g){for(var h="",i=0;i<g.length;++i)h+=(i===0?"":", ")+f(c,i,g[i]);a="WebGL error "+e(a)+" in "+c+"("+h+")";window.console&&window.console.log&&window.console.log(a)},j={},p={},q;for(q in c)typeof c[q]=="function"?p[q]=i(c,q):g(p,c,q);p.getError=function(){for(var a in j)if(j[a])return j[a]=!1,a;return c.NO_ERROR};return p},makeLostContextSimulatingCanvas:function(a){function c(a){return typeof a=="function"?a:function(c){a.handleEvent(c)}}function e(){for(var a=Object.keys(B),c=0;c<a.length;++c)delete B[a]}
function f(){++A;w||D==A&&a.loseContext()}function i(a,c){var e=a[c];return function(){f();if(!w)return e.apply(a,arguments)}}function j(a){return{statusMessage:a,preventDefault:function(){E=!0}}}function s(a){for(var c in a)typeof a[c]=="function"?v[c]=i(a,c):g(v,a,c);v.getError=function(){f();var a;if(!w)for(;a=u.getError();)B[a]=!0;for(a in B)if(B[a])return delete B[a],a;return v.NO_ERROR};var e="createBuffer,createFramebuffer,createProgram,createRenderbuffer,createShader,createTexture".split(",");
for(c=0;c<e.length;++c){var h=e[c];v[h]=function(c){return function(){f();if(w)return null;var e=c.apply(a,arguments);e.__webglDebugContextLostId__=G;C.push(e);return e}}(a[h])}e="getActiveAttrib,getActiveUniform,getBufferParameter,getContextAttributes,getAttachedShaders,getFramebufferAttachmentParameter,getParameter,getProgramParameter,getProgramInfoLog,getRenderbufferParameter,getShaderParameter,getShaderInfoLog,getShaderSource,getTexParameter,getUniform,getUniformLocation,getVertexAttrib".split(",");
for(c=0;c<e.length;++c)h=e[c],v[h]=function(c){return function(){f();return w?null:c.apply(a,arguments)}}(v[h]);e="isBuffer,isEnabled,isFramebuffer,isProgram,isRenderbuffer,isShader,isTexture".split(",");for(c=0;c<e.length;++c)h=e[c],v[h]=function(c){return function(){f();return w?!1:c.apply(a,arguments)}}(v[h]);v.checkFramebufferStatus=function(c){return function(){f();return w?v.FRAMEBUFFER_UNSUPPORTED:c.apply(a,arguments)}}(v.checkFramebufferStatus);v.getAttribLocation=function(c){return function(){f();
return w?-1:c.apply(a,arguments)}}(v.getAttribLocation);v.getVertexAttribOffset=function(c){return function(){f();return w?0:c.apply(a,arguments)}}(v.getVertexAttribOffset);v.isContextLost=function(){return w};return v}var u,y=[],z=[],v={},G=1,w=!1,C=[],D=0,A=0,E=!1,F=0,B={};a.getContext=function(c){return function(){var e=c.apply(a,arguments);if(e instanceof WebGLRenderingContext){if(e!=u){if(u)throw"got different context";u=e;v=s(u)}return v}return e}}(a.getContext);(function(a){var e=a.addEventListener;
a.addEventListener=function(f,g,h){switch(f){case "webglcontextlost":y.push(c(g));break;case "webglcontextrestored":z.push(c(g));break;default:e.apply(a,arguments)}}})(a);a.loseContext=function(){if(!w){w=!0;D=0;for(++G;u.getError(););e();B[u.CONTEXT_LOST_WEBGL]=!0;var c=j("context lost"),f=y.slice();setTimeout(function(){for(var e=0;e<f.length;++e)f[e](c);F>=0&&setTimeout(function(){a.restoreContext()},F)},0)}};a.restoreContext=function(){w&&z.length&&setTimeout(function(){if(!E)throw"can not restore. webglcontestlost listener did not call event.preventDefault";
for(var a=0;a<C.length;++a){var c=C[a];c instanceof WebGLBuffer?u.deleteBuffer(c):c instanceof WebGLFramebuffer?u.deleteFramebuffer(c):c instanceof WebGLProgram?u.deleteProgram(c):c instanceof WebGLRenderbuffer?u.deleteRenderbuffer(c):c instanceof WebGLShader?u.deleteShader(c):c instanceof WebGLTexture&&u.deleteTexture(c)}h(u);w=!1;A=0;E=!1;for(var a=z.slice(),c=j("context restored"),e=0;e<a.length;++e)a[e](c)},0)};a.loseContextInNCalls=function(a){if(w)throw"You can not ask a lost contet to be lost";
D=A+a};a.getNumCalls=function(){return A};a.setRestoreTimeout=function(a){F=a};return a},resetToInitialState:h}}();var Stats={Stats:function(a){this.layers=[];this.last_update=void 0;this.canvas=a}};
Stats.Stats.prototype={addLayer:function(a,c){a===void 0&&(a="rgb(255,255,255)");this.layers.push({previous:0,color:a,getValue:c})},update:function(){var a=(new Date).getTime();if(this.last_update===void 0)this.last_update=a;var c=(a-this.last_update)*120/1E3;if(!(c<1)){a-=(c-Math.floor(c))/0.12;var c=Math.floor(c),e=this.canvas,f=e.width,g=e.height,h=e.getContext("2d");h.save();h.globalCompositeOperation="copy";h.mozImageSmoothingEnabled=!1;h.translate(-c,0);h.drawImage(e,0,0,f,g);h.restore();h.clearRect(f-
c,0,c,g);for(var i=0,j=this.layers.length;i<j;i++){var k=this.layers[i],e=this.canvas,m=k.getValue(a),f=e.width,g=e.height;h.lineWidth=1;h.strokeStyle=k.color;h.beginPath();h.moveTo(f-c,g-k.previous);h.lineTo(f,g-m);h.stroke();k.previous=m}this.last_update=a}}};
osgViewer.View=function(){this._graphicContext=void 0;this._camera=new osg.Camera;this._scene=new osg.Node;this._sceneData=void 0;this._frameStamp=new osg.FrameStamp;this._manipulator=this._lightingMode=void 0;this.setLightingMode(osgViewer.View.LightingMode.HEADLIGHT);this._scene.getOrCreateStateSet().setAttributeAndMode(new osg.Material);this._scene.getOrCreateStateSet().setAttributeAndMode(new osg.Depth);this._scene.getOrCreateStateSet().setAttributeAndMode(new osg.BlendFunc);this._scene.getOrCreateStateSet().setAttributeAndMode(new osg.CullFace)};
osgViewer.View.LightingMode={NO_LIGHT:0,HEADLIGHT:1,SKY_LIGHT:2};
osgViewer.View.prototype={setGraphicContext:function(a){this._graphicContext=a},getGraphicContext:function(){return this._graphicContext},setUpView:function(a){var c=a.width/a.height;this._camera.setViewport(new osg.Viewport(0,0,a.width,a.height));osg.Matrix.makeLookAt([0,0,-10],[0,0,0],[0,1,0],this._camera.getViewMatrix());osg.Matrix.makePerspective(60,c,1,1E3,this._camera.getProjectionMatrix())},computeIntersections:function(a,c,e){e===void 0&&(e=-1);var f=new osgUtil.IntersectVisitor;f.setTraversalMask(e);
f.addLineSegment([a,c,0],[a,c,1]);f.pushCamera(this._camera);this._sceneData.accept(f);return f.hits},setFrameStamp:function(a){this._frameStamp=a},getFrameStamp:function(){return this._frameStamp},setCamera:function(a){this._camera=a},getCamera:function(){return this._camera},setSceneData:function(a){this._scene.removeChildren();this._scene.addChild(a);this._sceneData=a},getSceneData:function(){return this._sceneData},getScene:function(){return this._scene},getManipulator:function(){return this._manipulator},
setManipulator:function(a){this._manipulator=a},getLight:function(){return this._light},setLight:function(a){this._light=a;this._lightingMode!==osgViewer.View.LightingMode.NO_LIGHT&&this._scene.getOrCreateStateSet().setAttributeAndMode(this._light)},getLightingMode:function(){return this._lightingMode},setLightingMode:function(a){if(this._lightingMode!==a)if(this._lightingMode=a,this._lightingMode!==osgViewer.View.LightingMode.NO_LIGHT){if(!this._light)this._light=new osg.Light,this._light.setAmbient([0.2,
0.2,0.2,1]),this._light.setDiffuse([0.8,0.8,0.8,1]),this._light.setSpecular([0.5,0.5,0.5,1])}else this._light=void 0}};
osgViewer.Viewer=function(a,c,e){osgViewer.View.call(this);c===void 0&&(c={antialias:!0});osg.SimulateWebGLLostContext&&(a=WebGLDebugUtils.makeLostContextSimulatingCanvas(a),a.loseContextInNCalls(osg.SimulateWebGLLostContext));gl=WebGLUtils.setupWebGL(a,c,e);var f=this;a.addEventListener("webglcontextlost",function(a){f.contextLost();a.preventDefault()},!1);a.addEventListener("webglcontextrestored",function(){f.contextRestored()},!1);osg.ReportWebGLError&&(gl=WebGLDebugUtils.makeDebugContext(gl));
if(gl){this.setGraphicContext(gl);osg.init();this._canvas=a;this._frameRate=60;osgUtil.UpdateVisitor=osg.UpdateVisitor;osgUtil.CullVisitor=osg.CullVisitor;this._urlOptions=!0;this._mouseEventNode=this._mouseWheelEventNode=a;this._keyboardEventNode=document;if(c){if(c.mouseWheelEventNode)this._mouseWheelEventNode=c.mouseWheelEventNode;if(c.mouseEventNode)this._mouseEventNode=c.mouseEventNode;if(c.keyboardEventNode)this._keyboardEventNode=c.keyboardEventNode}this.setUpView(a)}else throw"No WebGL implementation found";
};
osgViewer.Viewer.prototype=osg.objectInehrit(osgViewer.View.prototype,{contextLost:function(){osg.log("webgl context lost");cancelRequestAnimFrame(this._requestID)},contextRestored:function(){osg.log("webgl context restored, but not supported - reload the page")},init:function(){this._done=!1;this._state=new osg.State;var a=this.getGraphicContext();this._state.setGraphicContext(a);a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,!0);this._updateVisitor=new osgUtil.UpdateVisitor;this._cullVisitor=new osgUtil.CullVisitor;this._renderStage=
new osg.RenderStage;this._stateGraph=new osg.StateGraph;this._urlOptions&&this.parseOptions();this.getCamera().setClearColor([0,0,0,0])},getState:function(){return this._state},parseOptions:function(){var a=function(){for(var a=[],c,g=window.location.href.slice(window.location.href.indexOf("?")+1).split("&"),h=0;h<g.length;h++){c=g[h].split("=");var i=c[0].toLowerCase();a.push(i);c=c[1];c===void 0&&(c="1");a[i]=c.toLowerCase()}return a}();a.stats==="1"&&this.initStats(a);var c=this.getGraphicContext();
a.depth_test==="0"&&this.getGraphicContext().disable(c.DEPTH_TEST);a.blend==="0"&&this.getGraphicContext().disable(c.BLEND);a.cull_face==="0"&&this.getGraphicContext().disable(c.CULL_FACE);a.light==="0"&&this.setLightingMode(osgViewer.View.LightingMode.NO_LIGHT)},initStats:function(a){var c=50,e=10;a.statsMaxMS!==void 0&&(c=parseInt(a.statsMaxMS,10));a.statsStepMS!==void 0&&(e=parseInt(a.statsStepMS,10));a=function(a){var a=a===void 0?document.body:document.getElementById(a),f=document.createElement("div");
f.innerHTML="<div id='StatsDiv' style='float: left; position: relative; width: 300px; height: 150px; z-index: 10;'>\n<div id='StatsLegends' style='position: absolute; left: 0px; font-size: 14px;color: #ffffff;'>\n<div id='frameRate' style='color: #00ff00;' > frameRate </div>\n<div id='frameTime' style='color: #ffff00;' > frameTime </div>\n<div id='updateTime' style='color: #d07b1f;'> updateTime </div>\n<div id='cullTime' style='color: #73e0ff;'> cullTime </div>\n<div id='drawTime' style='color: #ff0000;'> drawTime </div>\n<div id='fps'> </div>\n</div>\n<div id='StatsCanvasDiv' style='position: relative;'>\n<canvas id='StatsCanvasGrid' width='300' height='150' style='z-index:-1; position: absolute; background: rgba(14,14,14,0.8); ' ></canvas>\n<canvas id='StatsCanvas' width='300' height='150' style='z-index:8; position: absolute;' ></canvas>\n<canvas id='StatsCanvasFps' width='30' height='15' style='z-index:9; position: absolute; top: 130px' ></canvas>\n</div>\n</div>";
a.appendChild(f);a=document.getElementById("StatsCanvasGrid");f=a.getContext("2d");f.clearRect(0,0,a.width,a.height);var g=Math.floor(c/e).toFixed(0),h=a.height/g;f.strokeStyle="rgb(70,70,70)";for(var n=0;n<g;n++)f.beginPath(),f.moveTo(0,n*h),f.lineTo(a.width,n*h),f.stroke();f=document.getElementById("StatsCanvasFps").getContext("2d");f.font="14px Sans";return document.getElementById("StatsCanvas")};if(this._canvasStats===void 0||this._canvasStats===null)this._canvasStats=a();this._stats=new Stats.Stats(this._canvasStats);
var f=this;this._frameRate=1;this._drawTime=this._cullTime=this._updateTime=this._frameTime=0;var g=this._canvasStats.height,h=g/c;g-=2;a=function(a,c){var e=document.getElementById(a);return e.style?e.style.getPropertyValue(c):null};this._stats.addLayer(a("frameRate","color"),function(){var a=g/60*(1E3/f._frameRate);return a>g?g:a});this._stats.addLayer(a("frameTime","color"),function(){var a=f._frameTime*h;return a>g?g:a});this._stats.addLayer(a("updateTime","color"),function(){var a=f._updateTime*
h;return a>g?g:a});this._stats.addLayer(a("cullTime","color"),function(){var a=f._cullTime*h;return a>g?g:a});this._stats.addLayer(a("drawTime","color"),function(){var a=f._drawTime*h;return a>g?g:a})},update:function(){this.getScene().accept(this._updateVisitor)},cull:function(){this._stateGraph.clean();this._renderStage.reset();this._cullVisitor.reset();this._cullVisitor.setStateGraph(this._stateGraph);this._cullVisitor.setRenderStage(this._renderStage);var a=this.getCamera();this._cullVisitor.pushStateSet(a.getStateSet());
this._cullVisitor.pushProjectionMatrix(a.getProjectionMatrix());a.getBound();this._cullVisitor.pushModelviewMatrix(osg.Matrix.makeIdentity([]));this._light&&this._cullVisitor.addPositionedAttribute(this._light);this._cullVisitor.pushModelviewMatrix(a.getViewMatrix());this._cullVisitor.pushViewport(a.getViewport());this._cullVisitor.setCullSettings(a);this._renderStage.setClearDepth(a.getClearDepth());this._renderStage.setClearColor(a.getClearColor());this._renderStage.setClearMask(a.getClearMask());
this._renderStage.setViewport(a.getViewport());this.getScene().accept(this._cullVisitor);this._cullVisitor.popModelviewMatrix();this._cullVisitor.popProjectionMatrix();this._cullVisitor.popViewport();this._cullVisitor.popStateSet();this._renderStage.sort()},draw:function(){var a=this.getState();this._renderStage.draw(a);a.popAllStateSets()},frame:function(){var a;a=(new Date).getTime();if(this._lastFrameTime===void 0)this._lastFrameTime=0;this._frameRate=a-this._lastFrameTime;this._lastFrameTime=
a;var c=this.getFrameStamp();if(c.getFrameNumber()===0)c.setReferenceTime(a/1E3),this._numberFrame=0;c.setSimulationTime(a/1E3-c.getReferenceTime());this.getManipulator()&&osg.Matrix.copy(this.getManipulator().getInverseMatrix(),this.getCamera().getViewMatrix());this._updateVisitor.setFrameStamp(this.getFrameStamp());var e=(new Date).getTime();this.update();var f=(new Date).getTime();this._updateTime=f-e;this.cull();e=(new Date).getTime();this._cullTime=e-f;this.draw();this._drawTime=e=(new Date).getTime()-
e;f=c.getFrameNumber()+1;c.setFrameNumber(f);this._numberFrame++;c=(new Date).getTime();this._frameTime=(new Date).getTime()-a;if(this._stats!==void 0&&(this._stats.update(),this._numberFrame%60===0))a=(this._numberFrame*1E3/(c-this._statsStartTime)).toFixed(1),this._statsStartTime=c,this._numberFrame=0,c=document.getElementById("StatsCanvasFps"),f=c.getContext("2d"),f.clearRect(0,0,c.width,c.height),f.fillStyle="rgb(255,255,255)",f.fillText(a,0,c.height)},setDone:function(){this._done=!0},done:function(){return this._done},
run:function(){var a=this,c=function(){if(!a.done())a._requestID=window.requestAnimationFrame(c,a.canvas),a.frame()};c()},setupManipulator:function(a,c){a===void 0&&(a=new osgGA.OrbitManipulator);a.setNode!==void 0?a.setNode(this.getSceneData()):a.view=this;this.setManipulator(a);var e=this;if(c===void 0||c===!1){var f=!1;this._canvas.addEventListener("MozTouchDown",function(a){f=!0;return e.getManipulator().touchDown(a)},!1);this._canvas.addEventListener("MozTouchUp",function(a){f=!0;return e.getManipulator().touchUp(a)},
!1);this._canvas.addEventListener("MozTouchMove",function(a){f=!0;return e.getManipulator().touchMove(a)},!1);var g=function(a){if(f===!1)return e.getManipulator().mousedown(a)},h=function(a){if(f===!1)return e.getManipulator().mouseup(a)},i=function(a){if(f===!1)return e.getManipulator().mousemove(a)},j=function(a){if(f===!1)return e.getManipulator().dblclick(a)},k=function(a){if(f===!1){var c=a||window.event,g=[].slice.call(arguments,1),h=0,i=0,j=0;a.type="mousewheel";a.wheelDelta&&(h=a.wheelDelta/
120);a.detail&&(h=-a.detail/3);j=h;c.axis!==void 0&&c.axis===c.HORIZONTAL_AXIS&&(j=0,i=-1*h);c.wheelDeltaY!==void 0&&(j=c.wheelDeltaY/120);c.wheelDeltaX!==void 0&&(i=-1*c.wheelDeltaX/120);g.unshift(a,h,i,j);c=e.getManipulator();return c.mousewheel.apply(c,g)}};e.getManipulator().mousedown&&this._mouseEventNode.addEventListener("mousedown",g,!1);e.getManipulator().mouseup&&this._mouseEventNode.addEventListener("mouseup",h,!1);e.getManipulator().mousemove&&this._mouseEventNode.addEventListener("mousemove",
i,!1);e.getManipulator().dblclick&&this._mouseEventNode.addEventListener("dblclick",j,!1);e.getManipulator().mousewheel&&(this._mouseWheelEventNode.addEventListener("DOMMouseScroll",k,!1),this._mouseWheelEventNode.addEventListener("mousewheel",k,!1));g=function(a){return e.getManipulator().keydown(a)};h=function(a){return e.getManipulator().keyup(a)};e.getManipulator().keydown&&this._keyboardEventNode.addEventListener("keydown",g,!1);e.getManipulator().keyup&&this._keyboardEventNode.addEventListener("keyup",
h,!1);var m=this;window.onresize=function(){var a=window.innerWidth,c=window.innerHeight,e=m._canvas.width,f=m._canvas.height;m._canvas.width=a;m._canvas.height=c;m._canvas.style.width=a;m._canvas.style.height=c;osg.log("window resize "+e+"x"+f+" to "+a+"x"+c);e=m.getCamera();f=e.getViewport();a/=f.width();c/=f.height();var g=a/c;f.setViewport(f.x()*a,f.y()*c,f.width()*a,f.height()*c);g!==1&&osg.Matrix.postMult(osg.Matrix.makeScale(1,g,1,[]),e.getProjectionMatrix())}}}});osgGA={Manipulator:function(){}};
osgGA.Manipulator.prototype={getPositionRelativeToCanvas:function(a){var c=a.target,e,f;if(a.pageX||a.pageY)e=a.pageX,f=a.pageY;else if(a.clientX||a.clientY)e=a.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,f=a.clientY+document.body.scrollTop+document.documentElement.scrollTop;a=function(a){for(var c=0,e=0,c=a.offsetLeft,e=a.offsetTop,f=document.getElementsByTagName("body")[0];a.offsetParent&&a!=f;)c+=a.offsetParent.offsetLeft,e+=a.offsetParent.offsetTop,a=a.offsetParent;return[c,
e]}(c);e-=a[0];f=c.height-(f-a[1]);return[e,f]},keydown:function(){},keyup:function(){},mouseup:function(){},mousedown:function(){},mousemove:function(){},dblclick:function(){},touchDown:function(){},touchUp:function(){},touchMove:function(){},mousewheel:function(){},getInverseMatrix:function(){return osg.Matrix.makeIdentity([])}};osgGA.OrbitManipulatorMode={Rotate:0,Pan:1,Zoom:2};osgGA.OrbitManipulator=function(){osgGA.Manipulator.call(this);this.init()};
osgGA.OrbitManipulator.prototype=osg.objectInehrit(osgGA.Manipulator.prototype,{init:function(){this.distance=25;this.target=[0,0,0];this.eye=[0,this.distance,0];this.rotation=osg.Matrix.mult(osg.Matrix.makeRotate(Math.PI,0,0,1,[]),osg.Matrix.makeRotate(-Math.PI/10,1,0,0,[]),[]);this.up=[0,0,1];this.dy=this.dx=this.time=0;this.buttonup=!0;this.scale=1;this.targetDistance=this.distance;this.currentMode=osgGA.OrbitManipulatorMode.Rotate;this.minDistance=this.maxDistance=0},reset:function(){this.init()},
setNode:function(a){this.node=a},setTarget:function(a){osg.Vec3.copy(a,this.target)},computeHomePosition:function(){if(this.node!==void 0){var a=this.node.getBound();this.setDistance(a.radius()*1.5);this.setTarget(a.center())}},keydown:function(a){if(a.keyCode===32)this.computeHomePosition();else if(a.keyCode===33)return this.distanceIncrease(),!1;else if(a.keyCode===34)return this.distanceDecrease(),!1},mouseup:function(a){this.panning=this.dragging=!1;this.releaseButton(a)},mousedown:function(a){this.dragging=
this.panning=!0;var c=this.getPositionRelativeToCanvas(a);this.clientX=c[0];this.clientY=c[1];this.pushButton(a);a.preventDefault()},mousemove:function(a){if(this.buttonup!==!0){var c,e,f;c=this.getPositionRelativeToCanvas(a);a=c[0];c=c[1];e=(this.clientX-a)/10;f=(this.clientY-c)/10;this.clientX=a;this.clientY=c;this.update(e,f);return!1}},setMaxDistance:function(a){this.maxDistance=a},setMinDistance:function(a){this.minDistance=a},setDistance:function(a){this.targetDistance=this.distance=a},panModel:function(a,
c){var e=[];osg.Matrix.inverse(this.rotation,e);var f=[osg.Matrix.get(e,0,0),osg.Matrix.get(e,0,1),0];osg.Vec3.normalize(f,f);e=[osg.Matrix.get(e,1,0),osg.Matrix.get(e,1,1),0];osg.Vec3.normalize(e,e);osg.Vec3.add(this.target,osg.Vec3.mult(f,-a),this.target);osg.Vec3.add(this.target,osg.Vec3.mult(e,-c),this.target)},zoomModel:function(a,c){this.distance+=c},computeRotation:function(a,c){var e=osg.Matrix.makeRotate(a/10,0,0,1,[]),f=osg.Matrix.mult(this.rotation,e,[]),e=osg.Matrix.makeRotate(c/10,1,
0,0,[]),e=osg.Matrix.mult(e,f,[]),g=[];osg.Matrix.inverse(e,g);g=osg.Matrix.transformVec3(g,[0,this.distance,0]);g=osg.Vec3.neg(g,[]);osg.Vec3.normalize(g,g);g=osg.Vec3.dot(g,[0,0,1]);this.rotation=Math.abs(g)>0.95?f:e},update:function(a,c){this.dx=a;this.dy=c;if(Math.abs(a)+Math.abs(c)>0)this.time=(new Date).getTime()},updateWithDelay:function(){var a=1,c,e=this.dx,f=this.dy;this.buttonup?(a=0,c=((new Date).getTime()-this.time)/1E3,c<2&&(a=1-osgAnimation.EaseOutQuad(c/2)),e*=a,f*=a):this.dy=this.dx=
0;Math.abs(e)+Math.abs(f)>0&&(this.currentMode===osgGA.OrbitManipulatorMode.Pan?this.panModel(e/this.scale,f/this.scale):this.currentMode===osgGA.OrbitManipulatorMode.Rotate?this.computeRotation(e,f):this.currentMode===osgGA.OrbitManipulatorMode.Zoom&&this.zoomModel(e,f))},releaseButton:function(){this.buttonup=!0},changeScale:function(a){var c=this.scale/a;this.scale=a;this.distance=this.targetDistance;this.targetDistance=this.distance*c;this.timeMotion=(new Date).getTime()},mousewheel:function(a,
c){c>0?this.distanceDecrease&&this.distanceDecrease():c<0&&this.distanceIncrease&&this.distanceIncrease()},distanceIncrease:function(){var a=this.targetDistance,c=a+this.distance/10;if(this.maxDistance>0&&c>this.maxDistance)c=this.maxDistance;this.distance=a;this.targetDistance=c;this.timeMotion=(new Date).getTime()},distanceDecrease:function(){var a=this.targetDistance,c=a-this.distance/10;if(this.minDistance>0&&c<this.minDistance)c=this.minDistance;this.distance=a;this.targetDistance=c;this.timeMotion=
(new Date).getTime()},pushButton:function(){this.dx=this.dy=0;this.buttonup=!1},getInverseMatrix:function(){this.updateWithDelay();var a=this.target,c=this.distance;if(this.timeMotion!==void 0){var e=((new Date).getTime()-this.timeMotion)/1E3;if(e<1)e=osgAnimation.EaseOutQuad(e/1),this.targetMotion&&(a=osg.Vec3.add(this.target,osg.Vec3.mult(osg.Vec3.sub(this.targetMotion,this.target),e))),this.targetDistance&&(c=this.distance+(this.targetDistance-this.distance)*e);else{if(this.targetMotion)a=this.target=
this.targetMotion;if(this.targetDistance)c=this.distance=this.targetDistance;this.timeMotion=void 0}}var e=[],f=[];osg.Matrix.inverse(this.rotation,e);osg.Matrix.transformVec3(e,[0,c,0],f);osg.Matrix.makeLookAt(osg.Vec3.add(a,f,f),a,[0,0,1],e);return e}});osgGA.FirstPersonManipulator=function(){osgGA.Manipulator.call(this);this.init()};
osgGA.FirstPersonManipulator.prototype=osg.objectInehrit(osgGA.Manipulator.prototype,{setNode:function(a){this.node=a},computeHomePosition:function(){if(this.node)this.eye=[0,-this.node.getBound().radius()*1.5,0]},init:function(){this.direction=[0,1,0];this.angleHorizontal=this.angleVertical=0;this.eye=[0,25,10];this.up=[0,0,1];this.time=0;this.buttonup=!0},reset:function(){this.init()},mouseup:function(a){this.dragging=!1;this.releaseButton(a)},mousedown:function(a){this.dragging=!0;var c=this.getPositionRelativeToCanvas(a);
this.clientX=c[0];this.clientY=c[1];this.pushButton(a)},mousemove:function(a){if(this.buttonup!==!0){var c,e,f;c=this.getPositionRelativeToCanvas(a);a=c[0];c=c[1];e=this.clientX-a;f=this.clientY-c;this.clientX=a;this.clientY=c;this.update(e,f);this.computeRotation(this.dx,this.dy)}},pushButton:function(){this.dx=this.dy=0;this.buttonup=!1},computeRotation:function(a,c){this.angleVertical+=c*0.01;this.angleHorizontal-=a*0.01;var e=[],f=[],g=[];osg.Matrix.makeRotate(this.angleVertical,1,0,0,e);osg.Matrix.makeRotate(this.angleHorizontal,
0,0,1,f);osg.Matrix.mult(f,e,g);this.direction=osg.Matrix.transformVec3(g,[0,1,0],[]);this.up=osg.Matrix.transformVec3(g,[0,0,1],[])},update:function(a,c){this.dx=a;this.dy=c;if(Math.abs(a)+Math.abs(c)>0)this.time=(new Date).getTime()},releaseButton:function(){this.buttonup=!0},getInverseMatrix:function(){var a=osg.Vec3.add(this.eye,this.direction,[]);return osg.Matrix.makeLookAt(this.eye,a,this.up,[])},moveForward:function(a){a=osg.Vec3.mult(osg.Vec3.normalize(this.direction,[]),a,[]);this.eye=osg.Vec3.add(this.eye,
a,[])},strafe:function(a){var c=osg.Vec3.cross(this.direction,this.up,[]),a=osg.Vec3.mult(osg.Vec3.normalize(c,c),a,[]);this.eye=osg.Vec3.add(this.eye,a,[])},keydown:function(a){if(a.keyCode===32)this.computeHomePosition();else if(a.keyCode==87)return this.moveForward(5),!1;else if(a.keyCode==83)return this.moveForward(-5),!1;else if(a.keyCode==68)return this.strafe(5),!1;else if(a.keyCode==65)return this.strafe(-5),!1}});osgDB.ObjectWrapper.serializers.osg={};
osgDB.ObjectWrapper.serializers.osg.Object=function(a,c){a.Name&&c.setName(a.Name);return!0};
osgDB.ObjectWrapper.serializers.osg.Node=function(a,c){osgDB.ObjectWrapper.serializers.osg.Object(a,c);if(a.UpdateCallbacks)for(var e=0,f=a.UpdateCallbacks.length;e<f;e++){var g=osgDB.ObjectWrapper.readObject(a.UpdateCallbacks[e]);g&&c.addUpdateCallback(g)}a.StateSet&&c.setStateSet(osgDB.ObjectWrapper.readObject(a.StateSet));if(a.Children){e=0;for(f=a.Children.length;e<f;e++)(g=osgDB.ObjectWrapper.readObject(a.Children[e]))&&c.addChild(g)}};
osgDB.ObjectWrapper.serializers.osg.StateSet=function(a,c){osgDB.ObjectWrapper.serializers.osg.Object(a,c);if(a.AttributeList)for(var e=0,f=a.AttributeList.length;e<f;e++){var g=osgDB.ObjectWrapper.readObject(a.AttributeList[e]);c.setAttributeAndMode(g)}if(a.TextureAttributeList){e=a.TextureAttributeList;f=0;for(g=e.length;f<g;f++)for(var h=e[f],i=0,j=h.length;i<j;i++){var k=osgDB.ObjectWrapper.readObject(h[i]);k&&c.setTextureAttributeAndMode(f,k)}}};
osgDB.ObjectWrapper.serializers.osg.Material=function(a,c){a.Diffuse&&a.Emission&&a.Specular&&a.Shininess&&(osgDB.ObjectWrapper.serializers.osg.Object(a,c),c.setAmbient(a.Ambient),c.setDiffuse(a.Diffuse),c.setEmission(a.Emission),c.setSpecular(a.Specular),c.setShininess(a.Shininess))};
osgDB.ObjectWrapper.serializers.osg.BlendFunc=function(a,c){a.SourceRGB&&a.SourceAlpha&&a.DestinationRGB&&a.DestinationAlpha&&(osgDB.ObjectWrapper.serializers.osg.Object(a,c),c.setSourceRGB(a.SourceRGB),c.setSourceAlpha(a.SourceAlpha),c.setDestinationRGB(a.DestinationRGB),c.setDestinationAlpha(a.DestinationAlpha))};
osgDB.ObjectWrapper.serializers.osg.Light=function(a,c){a.LightNum!==void 0&&a.Ambient!==void 0&&a.Diffuse!==void 0&&a.Direction!==void 0&&a.Position!==void 0&&a.Specular!==void 0&&a.SpotCutoff!==void 0&&a.LinearAttenuation!==void 0&&a.ConstantAttenuation!==void 0&&a.QuadraticAttenuation!==void 0&&(osgDB.ObjectWrapper.serializers.osg.Object(a,c),c.setAmbient(a.Ambient),c.setConstantAttenuation(a.ConstantAttenuation),c.setDiffuse(a.Diffuse),c.setDirection(a.Direction),c.setLightNumber(a.LightNum),
c.setLinearAttenuation(a.LinearAttenuation),c.setPosition(a.Position),c.setQuadraticAttenuation(a.QuadraticAttenuation),c.setSpecular(a.Specular),c.setSpotCutoff(a.SpotCutoff),c.setSpotBlend(0.01),a.SpotExponent!==void 0&&c.setSpotBlend(a.SpotExponent/128))};
osgDB.ObjectWrapper.serializers.osg.Texture=function(a,c){osgDB.ObjectWrapper.serializers.osg.Object(a,c);a.MinFilter&&c.setMinFilter(a.MinFilter);a.MagFilter&&c.setMagFilter(a.MagFilter);a.WrapT&&c.setWrapT(a.WrapT);a.WrapS&&c.setWrapS(a.WrapS);if(a.File){var e=osgDB.readImage(a.File);c.setImage(e)}};osgDB.ObjectWrapper.serializers.osg.Projection=function(a,c){a.Matrix&&(osgDB.ObjectWrapper.serializers.osg.Node(a,c),a.Matrix&&c.setMatrix(a.Matrix))};
osgDB.ObjectWrapper.serializers.osg.MatrixTransform=function(a,c){a.Matrix&&(osgDB.ObjectWrapper.serializers.osg.Node(a,c),a.Matrix&&c.setMatrix(a.Matrix))};osgDB.ObjectWrapper.serializers.osg.LightSource=function(a,c){if(a.Light){osgDB.ObjectWrapper.serializers.osg.Node(a,c);var e=osgDB.ObjectWrapper.readObject(a.Light);c.setLight(e)}};
osgDB.ObjectWrapper.serializers.osg.Geometry=function(a,c){if(a.PrimitiveSetList&&a.VertexAttributeList){osgDB.ObjectWrapper.serializers.osg.Node(a,c);for(var e,f,g,h=0,i=a.PrimitiveSetList.length;h<i;h++){var j=a.PrimitiveSetList[h];if(e=j.DrawElementUShort||j.DrawElementUByte||j.DrawElementUInt||j.DrawElementsUShort||j.DrawElementsUByte||j.DrawElementsUInt||void 0)f=e.Indices,e=e.Mode,g=new osg.BufferArray(osg.BufferArray[f.Type],f.Elements,f.ItemSize),e=e?osg.PrimitiveSet[e]:osg.PrimitiveSet.TRIANGLES,
e=new osg.DrawElements(e,g),c.getPrimitiveSetList().push(e);if(g=j.DrawArray||j.DrawArrays)e=g.Mode||g.mode,f=g.First!==void 0?g.First:g.first,g=g.Count!==void 0?g.Count:g.count,e=new osg.DrawArrays(osg.PrimitiveSet[e],f,g),c.getPrimitives().push(e);if(j=j.DrawArrayLengths||void 0)e=j.Mode,f=j.First,g=j.ArrayLengths,j=new osg.DrawArrayLengths(osg.PrimitiveSet[e],f,g),c.getPrimitives().push(j)}for(var k in a.VertexAttributeList)a.VertexAttributeList.hasOwnProperty(k)&&(h=a.VertexAttributeList[k],c.getVertexAttributeList()[k]=
new osg.BufferArray(osg.BufferArray[h.Type],h.Elements,h.ItemSize))}};osgDB.ObjectWrapper.serializers.osgAnimation={};osgDB.ObjectWrapper.serializers.osgAnimation.Animation=function(a,c){var e;a.Name&&a.Channels&&a.Channels.length>0?e=!0:(a.Name||osg.log("animation has field Name, error"),e=!1);if(!e)return!1;if(!osgDB.ObjectWrapper.serializers.osg.Object(a,c))return!1;e=0;for(var f=a.Channels.length;e<f;e++){var g=osgDB.ObjectWrapper.readObject(a.Channels[e]);g&&c.getChannels().push(g)}return!0};
osgDB.ObjectWrapper.serializers.osgAnimation.Vec3LerpChannel=function(a,c){if(!a.KeyFrames||!a.TargetName||!a.Name)return!1;if(!osgDB.ObjectWrapper.serializers.osg.Object(a,c))return!1;c.setTargetName(a.TargetName);for(var e=c.getSampler().getKeyframes(),f=0,g=a.KeyFrames.length;f<g;f++){var h=a.KeyFrames[f],i=h.slice(1);i.t=h[0];e.push(i)}return!0};osgDB.ObjectWrapper.serializers.osgAnimation.QuatLerpChannel=function(a,c){return osgDB.ObjectWrapper.serializers.osgAnimation.Vec3LerpChannel(a,c)};
osgDB.ObjectWrapper.serializers.osgAnimation.QuatSlerpChannel=function(a,c){return osgDB.ObjectWrapper.serializers.osgAnimation.Vec3LerpChannel(a,c)};osgDB.ObjectWrapper.serializers.osgAnimation.FloatLerpChannel=function(a,c){if(!a.KeyFrames||!a.TargetName||!a.Name)return!1;if(!osgDB.ObjectWrapper.serializers.osg.Object(a,c))return!1;c.setTargetName(a.TargetName);for(var e=c.getSampler().getKeyframes(),f=0,g=a.KeyFrames.length;f<g;f++){var h=a.KeyFrames[f],i=h.slice(1);i.t=h[0];e.push(i)}return!0};
osgDB.ObjectWrapper.serializers.osgAnimation.BasicAnimationManager=function(a,c){if(!a.Animations)return!1;for(var e=0,f=a.Animations.length;e<f;e++){var g=osgDB.ObjectWrapper.readObject(a.Animations[e]);g&&c.registerAnimation(g)}return!0};
osgDB.ObjectWrapper.serializers.osgAnimation.UpdateMatrixTransform=function(a,c){if(!a.Name||!a.StackedTransforms)return!1;if(!osgDB.ObjectWrapper.serializers.osg.Object(a,c))return!1;for(var e=0,f=a.StackedTransforms.length;e<f;e++){var g=osgDB.ObjectWrapper.readObject(a.StackedTransforms[e]);g&&c.getStackedTransforms().push(g)}return!0};
osgDB.ObjectWrapper.serializers.osgAnimation.StackedTranslate=function(a,c){if(!a.Name)return!1;if(!osgDB.ObjectWrapper.serializers.osg.Object(a,c))return!1;a.Translate&&c.setTranslate(a.Translate);return!0};osgDB.ObjectWrapper.serializers.osgAnimation.StackedQuaternion=function(a,c){if(!a.Name)return!1;if(!osgDB.ObjectWrapper.serializers.osg.Object(a,c))return!1;a.Quaternion&&c.setQuaternion(a.Quaternion);return!0};
osgDB.ObjectWrapper.serializers.osgAnimation.StackedRotateAxis=function(a,c){if(!a.Axis)return!1;if(!osgDB.ObjectWrapper.serializers.osg.Object(a,c))return!1;a.Angle&&c.setAngle(a.Angle);c.setAxis(a.Axis);return!0};