From 2e27bdd087a9dded3f7dfe80a478ce519f107fe1 Mon Sep 17 00:00:00 2001 From: ZHANG Bei Date: Thu, 26 Apr 2012 15:09:06 -0700 Subject: [PATCH] Fix for demos --- build/PhiloGL.cls.js | 128 +++++++++++++++++++++---------------------- build/PhiloGL.js | 44 +++++++++------ src/io.js | 2 +- src/program.js | 42 ++++++++------ 4 files changed, 118 insertions(+), 98 deletions(-) diff --git a/build/PhiloGL.cls.js b/build/PhiloGL.cls.js index 7be75e9a..65267f9e 100644 --- a/build/PhiloGL.cls.js +++ b/build/PhiloGL.cls.js @@ -21,13 +21,13 @@ THE SOFTWARE. */ -(function(){function u(x){return document.getElementById(x)}this.PhiloGL=null;(function(){PhiloGL=function(x,z){function s(q,w,t){var A=q.canvas,a=new PhiloGL.Camera(j.fov,A.width/A.height,j.near,j.far,j);a.update();var b=new PhiloGL.Scene(w,a,c);M=new PhiloGL.WebGL.Application({gl:q,canvas:A,program:w,scene:b,camera:a});w.$$family=="program"&&w.use();f&&PhiloGL.Events.create(M,u.extend(f,{bind:M}));if(d.src.length)new PhiloGL.IO.Textures(u.extend(d,{onComplete:function(){t(M)}}));else t(M)}z=u.merge({context:{}, -camera:{fov:45,near:0.1,far:500},program:{from:"defaults",vs:"Default",fs:"Default"},scene:{},textures:{src:[]},events:{},onLoad:u.empty,onError:u.empty},z||{});var k=z.context,j=z.camera,f=z.events,d=z.textures,i=u.splat(z.program),c=z.scene;o=PhiloGL.WebGL.getContext(x,k);if(!o){z.onError("The WebGL context couldn't been initialized");return null}var h={defaults:"fromDefaultShaders",ids:"fromShaderIds",sources:"fromShaderSources",uris:"fromShaderURIs"},l=i.length,m=function(){var q=l,w={},t=false; -return{onSuccess:function(A,a){w[a.id||l-q]=A;q--;if(q===0&&!t)s(o,l==1?A:w,function(b){z.onLoad(b)})},onError:function(A){q--;z.onError(A);t=true}}}();i.forEach(function(q){var w=q.from,t,A;for(A in h)if(w==A){try{t=PhiloGL.Program[h[A]](u.extend(m,q))}catch(a){m.onError(a)}break}if(t)m.onSuccess(t,q)})}})();PhiloGL.unpack=function(x){x=x||aa;["Vec3","Mat4","Quat","Camera","Program","WebGL","O3D","Scene","Shaders","IO","Events","WorkerGroup","Fx","Media"].forEach(function(z){x[z]=PhiloGL[z]});x.gl= -o;x.Utils=u};PhiloGL.version="1.4.3";var o,M,aa=this;u.empty=function(){};u.time=Date.now;u.uid=function(){var x=u.time();return function(){return x++}}();u.extend=function(x,z){for(var s in z)x[s]=z[s];return x};u.type=function(){var x=Object.prototype.toString;return function(z){var s;s=x.call(z);s=s.substr(8,s.length-9).toLowerCase();if(s!="object")return s;if(z.$$family)return z.$$family;return z&&z.nodeName&&z.nodeType==1?"element":s}}();(function(){function x(z){var s=u.type(z);if(s=="object"){s= -{};for(var k in z)s[k]=x(z[k]);return s}else if(s=="array"){s=[];k=0;for(var j=z.length;k0)return l.scale(a,1/b);return l.clone(a)},$unit:function(a){var b=l.norm(a);if(b>0)return l.$scale(a, -1/b);return a},cross:function(a,b){var g=a[0],n=a[1],p=a[2],r=b[0],v=b[1],y=b[2];return new l(n*y-p*v,p*r-g*y,g*v-n*r)},$cross:function(a,b){var g=a[0],n=a[1],p=a[2],r=b[0],v=b[1],y=b[2];a[0]=n*y-p*v;a[1]=p*r-g*y;a[2]=g*v-n*r;return a},distTo:function(a,b){var g=a[0]-b[0],n=a[1]-b[1],p=a[2]-b[2];return z(g*g+n*n+p*p)},distToSq:function(a,b){var g=a[0]-b[0],n=a[1]-b[1],p=a[2]-b[2];return g*g+n*n+p*p},norm:function(a){var b=a[0],g=a[1];a=a[2];return z(b*b+g*g+a*a)},normSq:function(a){var b=a[0],g=a[1]; -a=a[2];return b*b+g*g+a*a},dot:function(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]},clone:function(a){return a.$$family?new l(a[0],a[1],a[2]):l.setVec3(new i(3),a)},toFloat32Array:function(a){var b=a.typedContainer;if(!b)return a;b[0]=a[0];b[1]=a[1];b[2]=a[2];return b}},q=l.prototype,w;for(w in m){l[w]=m[w];q[w]=function(a){return function(){var b=d.call(arguments);b.unshift(this);return l[a].apply(l,b)}}(w)}var t=function(a,b,g,n,p,r,v,y,B,C,D,E,G,I,J,H){c.call(this,16);this.length=16;typeof a=="number"? -this.set(a,b,g,n,p,r,v,y,B,C,D,E,G,I,J,H):this.id();this.typedContainer=new i(16)};t.create=function(){return new i(16)};t.prototype=Object.create(c.prototype,{$$family:{value:"Mat4"},n11:x(0),n12:x(4),n13:x(8),n14:x(12),n21:x(1),n22:x(5),n23:x(9),n24:x(13),n31:x(2),n32:x(6),n33:x(10),n34:x(14),n41:x(3),n42:x(7),n43:x(11),n44:x(15)});m={id:function(a){a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},clone:function(a){return a.$$family? -new t(a[0],a[4],a[8],a[12],a[1],a[5],a[9],a[13],a[2],a[6],a[10],a[14],a[3],a[7],a[11],a[15]):new i(a)},set:function(a,b,g,n,p,r,v,y,B,C,D,E,G,I,J,H,F){a[0]=b;a[4]=g;a[8]=n;a[12]=p;a[1]=r;a[5]=v;a[9]=y;a[13]=B;a[2]=C;a[6]=D;a[10]=E;a[14]=G;a[3]=I;a[7]=J;a[11]=H;a[15]=F;return a},mulVec3:function(a,b){var g=l.clone(b);return t.$mulVec3(a,g)},$mulVec3:function(a,b){var g=b[0],n=b[1],p=b[2],r=1/(a[3]*g+a[7]*n+a[11]*p+a[15]);b[0]=(a[0]*g+a[4]*n+a[8]*p+a[12])*r;b[1]=(a[1]*g+a[5]*n+a[9]*p+a[13])*r;b[2]= -(a[2]*g+a[6]*n+a[10]*p+a[14])*r;return b},mulMat42:function(a,b,g){var n=b[0],p=b[1],r=b[2],v=b[3],y=b[4],B=b[5],C=b[6],D=b[7],E=b[8],G=b[9],I=b[10],J=b[11],H=b[12],F=b[13],N=b[14];b=b[15];var K=g[0],L=g[1],P=g[2],Q=g[3],R=g[4],U=g[5],V=g[6],W=g[7],S=g[8],T=g[9],X=g[10],O=g[11],Y=g[12],Z=g[13],$=g[14];g=g[15];a[0]=K*n+L*y+P*E+Q*H;a[1]=K*p+L*B+P*G+Q*F;a[2]=K*r+L*C+P*I+Q*N;a[3]=K*v+L*D+P*J+Q*b;a[4]=R*n+U*y+V*E+W*H;a[5]=R*p+U*B+V*G+W*F;a[6]=R*r+U*C+V*I+W*N;a[7]=R*v+U*D+V*J+W*b;a[8]=S*n+T*y+X*E+O*H;a[9]= -S*p+T*B+X*G+O*F;a[10]=S*r+T*C+X*I+O*N;a[11]=S*v+T*D+X*J+O*b;a[12]=Y*n+Z*y+$*E+g*H;a[13]=Y*p+Z*B+$*G+g*F;a[14]=Y*r+Z*C+$*I+g*N;a[15]=Y*v+Z*D+$*J+g*b;return a},mulMat4:function(a,b){var g=t.clone(a);return t.mulMat42(g,a,b)},$mulMat4:function(a,b){return t.mulMat42(a,a,b)},add:function(a,b){var g=t.clone(a);return t.$add(g,b)},$add:function(a,b){a[0]+=b[0];a[1]+=b[1];a[2]+=b[2];a[3]+=b[3];a[4]+=b[4];a[5]+=b[5];a[6]+=b[6];a[7]+=b[7];a[8]+=b[8];a[9]+=b[9];a[10]+=b[10];a[11]+=b[11];a[12]+=b[12];a[13]+= -b[13];a[14]+=b[14];a[15]+=b[15];return a},transpose:function(a){a=t.clone(a);return t.$transpose(a)},$transpose:function(a){var b=a[8],g=a[12],n=a[1],p=a[9],r=a[13],v=a[2],y=a[6],B=a[14],C=a[3],D=a[7],E=a[11];a[1]=a[4];a[2]=b;a[3]=g;a[4]=n;a[6]=p;a[7]=r;a[8]=v;a[9]=y;a[11]=B;a[12]=C;a[13]=D;a[14]=E;return a},rotateAxis:function(a,b,g){a=t.clone(a);return t.$rotateAxis(a,b,g)},$rotateAxis:function(a,b,g){var n=s(b),p=k(b),r=1-p,v=g[0],y=g[1],B=g[2];g=v*v*r+p;b=v*y*r+B*n;var C=v*B*r-y*n,D=y*v*r-B*n, -E=y*y*r+p,G=y*B*r+v*n,I=v*B*r+y*n;n=y*B*r-v*n;p=B*B*r+p;r=a[0];v=a[1];y=a[2];B=a[3];var J=a[4],H=a[5],F=a[6],N=a[7],K=a[8],L=a[9],P=a[10],Q=a[11];a[0]=r*g+J*b+K*C;a[1]=v*g+H*b+L*C;a[2]=y*g+F*b+P*C;a[3]=B*g+N*b+Q*C;a[4]=r*D+J*E+K*G;a[5]=v*D+H*E+L*G;a[6]=y*D+F*E+P*G;a[7]=B*D+N*E+Q*G;a[8]=r*I+J*n+K*p;a[9]=v*I+H*n+L*p;a[10]=y*I+F*n+P*p;a[11]=B*I+N*n+Q*p;return a},rotateXYZ:function(a,b,g,n){a=t.clone(a);return t.$rotateXYZ(a,b,g,n)},$rotateXYZ:function(a,b,g,n){var p=a[0],r=a[1],v=a[2],y=a[3],B=a[4], -C=a[5],D=a[6],E=a[7],G=a[8],I=a[9],J=a[10],H=a[11],F=k(b),N=k(g),K=k(n);b=s(b);var L=s(g),P=s(n);n=N*K;g=-F*P+b*L*K;var Q=b*P+F*L*K,R=N*P,U=F*K+b*L*P;K=-b*K+F*L*P;L=-L;b*=N;F*=N;a[0]=p*n+B*R+G*L;a[1]=r*n+C*R+I*L;a[2]=v*n+D*R+J*L;a[3]=y*n+E*R+H*L;a[4]=p*g+B*U+G*b;a[5]=r*g+C*U+I*b;a[6]=v*g+D*U+J*b;a[7]=y*g+E*U+H*b;a[8]=p*Q+B*K+G*F;a[9]=r*Q+C*K+I*F;a[10]=v*Q+D*K+J*F;a[11]=y*Q+E*K+H*F;return a},translate:function(a,b,g,n){a=t.clone(a);return t.$translate(a,b,g,n)},$translate:function(a,b,g,n){a[12]=a[0]* -b+a[4]*g+a[8]*n+a[12];a[13]=a[1]*b+a[5]*g+a[9]*n+a[13];a[14]=a[2]*b+a[6]*g+a[10]*n+a[14];a[15]=a[3]*b+a[7]*g+a[11]*n+a[15];return a},scale:function(a,b,g,n){a=t.clone(a);return t.$scale(a,b,g,n)},$scale:function(a,b,g,n){a[0]*=b;a[1]*=b;a[2]*=b;a[3]*=b;a[4]*=g;a[5]*=g;a[6]*=g;a[7]*=g;a[8]*=n;a[9]*=n;a[10]*=n;a[11]*=n;return a},invert:function(a){a=t.clone(a);return t.$invert(a)},$invert:function(a){var b=a[0],g=a[1],n=a[2],p=a[3],r=a[4],v=a[5],y=a[6],B=a[7],C=a[8],D=a[9],E=a[10],G=a[11],I=a[12],J= -a[13],H=a[14],F=a[15],N=b*v-g*r,K=b*y-n*r,L=b*B-p*r,P=g*y-n*v,Q=g*B-p*v,R=n*B-p*y,U=C*J-D*I,V=C*H-E*I,W=C*F-G*I,S=D*H-E*J,T=D*F-G*J,X=E*F-G*H,O=1/(N*X-K*T+L*S+P*W-Q*V+R*U);a[0]=(+v*X-y*T+B*S)*O;a[1]=(-g*X+n*T-p*S)*O;a[2]=(+J*R-H*Q+F*P)*O;a[3]=(-D*R+E*Q-G*P)*O;a[4]=(-r*X+y*W-B*V)*O;a[5]=(+b*X-n*W+p*V)*O;a[6]=(-I*R+H*L-F*K)*O;a[7]=(+C*R-E*L+G*K)*O;a[8]=(+r*T-v*W+B*U)*O;a[9]=(-b*T+g*W-p*U)*O;a[10]=(+I*Q-J*L+F*N)*O;a[11]=(-C*Q+D*L-G*N)*O;a[12]=(-r*S+v*V-y*U)*O;a[13]=(+b*S-g*V+n*U)*O;a[14]=(-I*P+J*K-H* -N)*O;a[15]=(+C*P-D*K+E*N)*O;return a},lookAt:function(a,b,g,n){g=l.sub(b,g);g.$unit();n=l.cross(n,g);n.$unit();var p=l.cross(g,n);p.$unit();return t.set(a,n[0],n[1],n[2],-n.dot(b),p[0],p[1],p[2],-p.dot(b),g[0],g[1],g[2],-g.dot(b),0,0,0,1)},frustum:function(a,b,g,n,p,r,v){var y=g-b,B=p-n,C=v-r;a[0]=r*2/y;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=r*2/B;a[6]=0;a[7]=0;a[8]=(g+b)/y;a[9]=(p+n)/B;a[10]=-(v+r)/C;a[11]=-1;a[12]=0;a[13]=0;a[14]=-(v*r*2)/C;a[15]=0;return a},perspective:function(a,b,g,n,p){b=n*j(b*f/ -360);var r=-b;return t.frustum(a,r*g,b*g,r,b,n,p)},ortho:function(a,b,g,n,p,r,v){var y=g-b,B=p-n,C=v-r;a[0]=2/y;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=2/B;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=-2/C;a[11]=0;a[12]=-(b+g)/y;a[13]=-(p+n)/B;a[14]=-(v+r)/C;a[15]=1;return a},toFloat32Array:function(a){var b=a.typedContainer;if(!b)return a;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b}}; +1/b);return a},cross:function(a,b){var g=a[0],n=a[1],p=a[2],r=b[0],v=b[1],x=b[2];return new l(n*x-p*v,p*r-g*x,g*v-n*r)},$cross:function(a,b){var g=a[0],n=a[1],p=a[2],r=b[0],v=b[1],x=b[2];a[0]=n*x-p*v;a[1]=p*r-g*x;a[2]=g*v-n*r;return a},distTo:function(a,b){var g=a[0]-b[0],n=a[1]-b[1],p=a[2]-b[2];return z(g*g+n*n+p*p)},distToSq:function(a,b){var g=a[0]-b[0],n=a[1]-b[1],p=a[2]-b[2];return g*g+n*n+p*p},norm:function(a){var b=a[0],g=a[1];a=a[2];return z(b*b+g*g+a*a)},normSq:function(a){var b=a[0],g=a[1]; +a=a[2];return b*b+g*g+a*a},dot:function(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]},clone:function(a){return a.$$family?new l(a[0],a[1],a[2]):l.setVec3(new i(3),a)},toFloat32Array:function(a){var b=a.typedContainer;if(!b)return a;b[0]=a[0];b[1]=a[1];b[2]=a[2];return b}},q=l.prototype,w;for(w in m){l[w]=m[w];q[w]=function(a){return function(){var b=d.call(arguments);b.unshift(this);return l[a].apply(l,b)}}(w)}var t=function(a,b,g,n,p,r,v,x,B,C,D,E,G,I,J,H){c.call(this,16);this.length=16;typeof a=="number"? +this.set(a,b,g,n,p,r,v,x,B,C,D,E,G,I,J,H):this.id();this.typedContainer=new i(16)};t.create=function(){return new i(16)};t.prototype=Object.create(c.prototype,{$$family:{value:"Mat4"},n11:y(0),n12:y(4),n13:y(8),n14:y(12),n21:y(1),n22:y(5),n23:y(9),n24:y(13),n31:y(2),n32:y(6),n33:y(10),n34:y(14),n41:y(3),n42:y(7),n43:y(11),n44:y(15)});m={id:function(a){a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},clone:function(a){return a.$$family? +new t(a[0],a[4],a[8],a[12],a[1],a[5],a[9],a[13],a[2],a[6],a[10],a[14],a[3],a[7],a[11],a[15]):new i(a)},set:function(a,b,g,n,p,r,v,x,B,C,D,E,G,I,J,H,F){a[0]=b;a[4]=g;a[8]=n;a[12]=p;a[1]=r;a[5]=v;a[9]=x;a[13]=B;a[2]=C;a[6]=D;a[10]=E;a[14]=G;a[3]=I;a[7]=J;a[11]=H;a[15]=F;return a},mulVec3:function(a,b){var g=l.clone(b);return t.$mulVec3(a,g)},$mulVec3:function(a,b){var g=b[0],n=b[1],p=b[2],r=1/(a[3]*g+a[7]*n+a[11]*p+a[15]);b[0]=(a[0]*g+a[4]*n+a[8]*p+a[12])*r;b[1]=(a[1]*g+a[5]*n+a[9]*p+a[13])*r;b[2]= +(a[2]*g+a[6]*n+a[10]*p+a[14])*r;return b},mulMat42:function(a,b,g){var n=b[0],p=b[1],r=b[2],v=b[3],x=b[4],B=b[5],C=b[6],D=b[7],E=b[8],G=b[9],I=b[10],J=b[11],H=b[12],F=b[13],N=b[14];b=b[15];var K=g[0],L=g[1],P=g[2],Q=g[3],R=g[4],U=g[5],V=g[6],W=g[7],S=g[8],T=g[9],X=g[10],O=g[11],Y=g[12],Z=g[13],$=g[14];g=g[15];a[0]=K*n+L*x+P*E+Q*H;a[1]=K*p+L*B+P*G+Q*F;a[2]=K*r+L*C+P*I+Q*N;a[3]=K*v+L*D+P*J+Q*b;a[4]=R*n+U*x+V*E+W*H;a[5]=R*p+U*B+V*G+W*F;a[6]=R*r+U*C+V*I+W*N;a[7]=R*v+U*D+V*J+W*b;a[8]=S*n+T*x+X*E+O*H;a[9]= +S*p+T*B+X*G+O*F;a[10]=S*r+T*C+X*I+O*N;a[11]=S*v+T*D+X*J+O*b;a[12]=Y*n+Z*x+$*E+g*H;a[13]=Y*p+Z*B+$*G+g*F;a[14]=Y*r+Z*C+$*I+g*N;a[15]=Y*v+Z*D+$*J+g*b;return a},mulMat4:function(a,b){var g=t.clone(a);return t.mulMat42(g,a,b)},$mulMat4:function(a,b){return t.mulMat42(a,a,b)},add:function(a,b){var g=t.clone(a);return t.$add(g,b)},$add:function(a,b){a[0]+=b[0];a[1]+=b[1];a[2]+=b[2];a[3]+=b[3];a[4]+=b[4];a[5]+=b[5];a[6]+=b[6];a[7]+=b[7];a[8]+=b[8];a[9]+=b[9];a[10]+=b[10];a[11]+=b[11];a[12]+=b[12];a[13]+= +b[13];a[14]+=b[14];a[15]+=b[15];return a},transpose:function(a){a=t.clone(a);return t.$transpose(a)},$transpose:function(a){var b=a[8],g=a[12],n=a[1],p=a[9],r=a[13],v=a[2],x=a[6],B=a[14],C=a[3],D=a[7],E=a[11];a[1]=a[4];a[2]=b;a[3]=g;a[4]=n;a[6]=p;a[7]=r;a[8]=v;a[9]=x;a[11]=B;a[12]=C;a[13]=D;a[14]=E;return a},rotateAxis:function(a,b,g){a=t.clone(a);return t.$rotateAxis(a,b,g)},$rotateAxis:function(a,b,g){var n=s(b),p=k(b),r=1-p,v=g[0],x=g[1],B=g[2];g=v*v*r+p;b=v*x*r+B*n;var C=v*B*r-x*n,D=x*v*r-B*n, +E=x*x*r+p,G=x*B*r+v*n,I=v*B*r+x*n;n=x*B*r-v*n;p=B*B*r+p;r=a[0];v=a[1];x=a[2];B=a[3];var J=a[4],H=a[5],F=a[6],N=a[7],K=a[8],L=a[9],P=a[10],Q=a[11];a[0]=r*g+J*b+K*C;a[1]=v*g+H*b+L*C;a[2]=x*g+F*b+P*C;a[3]=B*g+N*b+Q*C;a[4]=r*D+J*E+K*G;a[5]=v*D+H*E+L*G;a[6]=x*D+F*E+P*G;a[7]=B*D+N*E+Q*G;a[8]=r*I+J*n+K*p;a[9]=v*I+H*n+L*p;a[10]=x*I+F*n+P*p;a[11]=B*I+N*n+Q*p;return a},rotateXYZ:function(a,b,g,n){a=t.clone(a);return t.$rotateXYZ(a,b,g,n)},$rotateXYZ:function(a,b,g,n){var p=a[0],r=a[1],v=a[2],x=a[3],B=a[4], +C=a[5],D=a[6],E=a[7],G=a[8],I=a[9],J=a[10],H=a[11],F=k(b),N=k(g),K=k(n);b=s(b);var L=s(g),P=s(n);n=N*K;g=-F*P+b*L*K;var Q=b*P+F*L*K,R=N*P,U=F*K+b*L*P;K=-b*K+F*L*P;L=-L;b*=N;F*=N;a[0]=p*n+B*R+G*L;a[1]=r*n+C*R+I*L;a[2]=v*n+D*R+J*L;a[3]=x*n+E*R+H*L;a[4]=p*g+B*U+G*b;a[5]=r*g+C*U+I*b;a[6]=v*g+D*U+J*b;a[7]=x*g+E*U+H*b;a[8]=p*Q+B*K+G*F;a[9]=r*Q+C*K+I*F;a[10]=v*Q+D*K+J*F;a[11]=x*Q+E*K+H*F;return a},translate:function(a,b,g,n){a=t.clone(a);return t.$translate(a,b,g,n)},$translate:function(a,b,g,n){a[12]=a[0]* +b+a[4]*g+a[8]*n+a[12];a[13]=a[1]*b+a[5]*g+a[9]*n+a[13];a[14]=a[2]*b+a[6]*g+a[10]*n+a[14];a[15]=a[3]*b+a[7]*g+a[11]*n+a[15];return a},scale:function(a,b,g,n){a=t.clone(a);return t.$scale(a,b,g,n)},$scale:function(a,b,g,n){a[0]*=b;a[1]*=b;a[2]*=b;a[3]*=b;a[4]*=g;a[5]*=g;a[6]*=g;a[7]*=g;a[8]*=n;a[9]*=n;a[10]*=n;a[11]*=n;return a},invert:function(a){a=t.clone(a);return t.$invert(a)},$invert:function(a){var b=a[0],g=a[1],n=a[2],p=a[3],r=a[4],v=a[5],x=a[6],B=a[7],C=a[8],D=a[9],E=a[10],G=a[11],I=a[12],J= +a[13],H=a[14],F=a[15],N=b*v-g*r,K=b*x-n*r,L=b*B-p*r,P=g*x-n*v,Q=g*B-p*v,R=n*B-p*x,U=C*J-D*I,V=C*H-E*I,W=C*F-G*I,S=D*H-E*J,T=D*F-G*J,X=E*F-G*H,O=1/(N*X-K*T+L*S+P*W-Q*V+R*U);a[0]=(+v*X-x*T+B*S)*O;a[1]=(-g*X+n*T-p*S)*O;a[2]=(+J*R-H*Q+F*P)*O;a[3]=(-D*R+E*Q-G*P)*O;a[4]=(-r*X+x*W-B*V)*O;a[5]=(+b*X-n*W+p*V)*O;a[6]=(-I*R+H*L-F*K)*O;a[7]=(+C*R-E*L+G*K)*O;a[8]=(+r*T-v*W+B*U)*O;a[9]=(-b*T+g*W-p*U)*O;a[10]=(+I*Q-J*L+F*N)*O;a[11]=(-C*Q+D*L-G*N)*O;a[12]=(-r*S+v*V-x*U)*O;a[13]=(+b*S-g*V+n*U)*O;a[14]=(-I*P+J*K-H* +N)*O;a[15]=(+C*P-D*K+E*N)*O;return a},lookAt:function(a,b,g,n){g=l.sub(b,g);g.$unit();n=l.cross(n,g);n.$unit();var p=l.cross(g,n);p.$unit();return t.set(a,n[0],n[1],n[2],-n.dot(b),p[0],p[1],p[2],-p.dot(b),g[0],g[1],g[2],-g.dot(b),0,0,0,1)},frustum:function(a,b,g,n,p,r,v){var x=g-b,B=p-n,C=v-r;a[0]=r*2/x;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=r*2/B;a[6]=0;a[7]=0;a[8]=(g+b)/x;a[9]=(p+n)/B;a[10]=-(v+r)/C;a[11]=-1;a[12]=0;a[13]=0;a[14]=-(v*r*2)/C;a[15]=0;return a},perspective:function(a,b,g,n,p){b=n*j(b*f/ +360);var r=-b;return t.frustum(a,r*g,b*g,r,b,n,p)},ortho:function(a,b,g,n,p,r,v){var x=g-b,B=p-n,C=v-r;a[0]=2/x;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=2/B;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=-2/C;a[11]=0;a[12]=-(b+g)/x;a[13]=-(p+n)/B;a[14]=-(v+r)/C;a[15]=1;return a},toFloat32Array:function(a){var b=a.typedContainer;if(!b)return a;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b}}; q=t.prototype;for(w in m){t[w]=m[w];q[w]=function(a){return function(){var b=d.call(arguments);b.unshift(this);return t[a].apply(t,b)}}(w)}var A=function(a,b,g,n){c.call(this,4);this[0]=a||0;this[1]=b||0;this[2]=g||0;this[3]=n||0;this.typedContainer=new i(4)};A.create=function(){return new i(4)};m={setQuat:function(a,b){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];return a},set:function(a,b,g,n,p){a[0]=b||0;a[1]=g||0;a[2]=n||0;a[3]=p||0;return a},clone:function(a){return a.$$family?new A(a[0],a[1],a[2], a[3]):A.setQuat(new i(4),a)},neg:function(a){return new A(-a[0],-a[1],-a[2],-a[3])},$neg:function(a){a[0]=-a[0];a[1]=-a[1];a[2]=-a[2];a[3]=-a[3];return a},add:function(a,b){return new A(a[0]+b[0],a[1]+b[1],a[2]+b[2],a[3]+b[3])},$add:function(a,b){a[0]+=b[0];a[1]+=b[1];a[2]+=b[2];a[3]+=b[3];return a},sub:function(a,b){return new A(a[0]-b[0],a[1]-b[1],a[2]-b[2],a[3]-b[3])},$sub:function(a,b){a[0]-=b[0];a[1]-=b[1];a[2]-=b[2];a[3]-=b[3];return a},scale:function(a,b){return new A(a[0]*b,a[1]*b,a[2]*b, -a[3]*b)},$scale:function(a,b){a[0]*=b;a[1]*=b;a[2]*=b;a[3]*=b;return a},mulQuat:function(a,b){var g=a[0],n=a[1],p=a[2],r=a[3],v=b[0],y=b[1],B=b[2],C=b[3];return new A(r*v+g*C+n*B-p*y,r*y+n*C+p*v-g*B,r*B+p*C+g*y-n*v,r*C-g*v-n*y-p*B)},$mulQuat:function(a,b){var g=a[0],n=a[1],p=a[2],r=a[3],v=b[0],y=b[1],B=b[2],C=b[3];a[0]=r*v+g*C+n*B-p*y;a[1]=r*y+n*C+p*v-g*B;a[2]=r*B+p*C+g*y-n*v;a[3]=r*C-g*v-n*y-p*B;return a},divQuat:function(a,b){var g=a[0],n=a[1],p=a[2],r=a[3],v=b[0],y=b[1],B=b[2],C=b[3],D=1/(C*C+ -v*v+y*y+B*B);return new A((g*C-r*v-n*B+p*y)*D,(g*B-r*y+n*C-p*v)*D,(n*v+p*C-r*B-g*y)*D,(r*C+g*v+n*y+p*B)*D)},$divQuat:function(a,b){var g=a[0],n=a[1],p=a[2],r=a[3],v=b[0],y=b[1],B=b[2],C=b[3],D=1/(C*C+v*v+y*y+B*B);a[0]=(g*C-r*v-n*B+p*y)*D;a[1]=(g*B-r*y+n*C-p*v)*D;a[2]=(n*v+p*C-r*B-g*y)*D;a[3]=(r*C+g*v+n*y+p*B)*D;return a},invert:function(a){var b=a[0],g=a[1],n=a[2];a=a[3];var p=1/(b*b+g*g+n*n+a*a);return new A(-b*p,-g*p,-n*p,a*p)},$invert:function(a){var b=a[0],g=a[1],n=a[2],p=a[3],r=1/(b*b+g*g+n* +a[3]*b)},$scale:function(a,b){a[0]*=b;a[1]*=b;a[2]*=b;a[3]*=b;return a},mulQuat:function(a,b){var g=a[0],n=a[1],p=a[2],r=a[3],v=b[0],x=b[1],B=b[2],C=b[3];return new A(r*v+g*C+n*B-p*x,r*x+n*C+p*v-g*B,r*B+p*C+g*x-n*v,r*C-g*v-n*x-p*B)},$mulQuat:function(a,b){var g=a[0],n=a[1],p=a[2],r=a[3],v=b[0],x=b[1],B=b[2],C=b[3];a[0]=r*v+g*C+n*B-p*x;a[1]=r*x+n*C+p*v-g*B;a[2]=r*B+p*C+g*x-n*v;a[3]=r*C-g*v-n*x-p*B;return a},divQuat:function(a,b){var g=a[0],n=a[1],p=a[2],r=a[3],v=b[0],x=b[1],B=b[2],C=b[3],D=1/(C*C+ +v*v+x*x+B*B);return new A((g*C-r*v-n*B+p*x)*D,(g*B-r*x+n*C-p*v)*D,(n*v+p*C-r*B-g*x)*D,(r*C+g*v+n*x+p*B)*D)},$divQuat:function(a,b){var g=a[0],n=a[1],p=a[2],r=a[3],v=b[0],x=b[1],B=b[2],C=b[3],D=1/(C*C+v*v+x*x+B*B);a[0]=(g*C-r*v-n*B+p*x)*D;a[1]=(g*B-r*x+n*C-p*v)*D;a[2]=(n*v+p*C-r*B-g*x)*D;a[3]=(r*C+g*v+n*x+p*B)*D;return a},invert:function(a){var b=a[0],g=a[1],n=a[2];a=a[3];var p=1/(b*b+g*g+n*n+a*a);return new A(-b*p,-g*p,-n*p,a*p)},$invert:function(a){var b=a[0],g=a[1],n=a[2],p=a[3],r=1/(b*b+g*g+n* n+p*p);a[0]=-b*r;a[1]=-g*r;a[2]=-n*r;a[3]=p*r;return a},norm:function(a){var b=a[0],g=a[1],n=a[2];a=a[3];return z(b*b+g*g+n*n+a*a)},normSq:function(a){var b=a[0],g=a[1],n=a[2];a=a[3];return b*b+g*g+n*n+a*a},unit:function(a){return A.scale(a,1/A.norm(a))},$unit:function(a){return A.$scale(a,1/A.norm(a))},conjugate:function(a){return new A(-a[0],-a[1],-a[2],a[3])},$conjugate:function(a){a[0]=-a[0];a[1]=-a[1];a[2]=-a[2];return a}};q=A.prototype={};for(w in m){A[w]=m[w];q[w]=function(a){return function(){var b= d.call(arguments);b.unshift(this);return A[a].apply(A,b)}}(w)}l.fromQuat=function(a){return new l(a[0],a[1],a[2])};A.fromVec3=function(a,b){return new A(a[0],a[1],a[2],b||0)};A.fromMat4=function(a){var b,g,n;if(a[0]>a[5]&&a[0]>a[10]){b=0;g=1;n=2}else if(a[5]>a[0]&&a[5]>a[10]){b=1;g=2;n=0}else{b=2;g=0;n=1}var p=z(1+a[b*5]-a[g*5]-a[n*5]),r=new A;r[b]=0.5*p;r[g]=0.5*(a["n"+g+""+b]+a["n"+b+""+g])/p;r[n]=0.5*(a["n"+b+""+n]+a["n"+n+""+b])/p;r[3]=0.5*(a["n"+g+""+n]-a["n"+n+""+g])/p;return r};A.fromXRotation= -function(a){return new A(s(a/2),0,0,k(a/2))};A.fromYRotation=function(a){return new A(0,s(a/2),0,k(a/2))};A.fromZRotation=function(a){return new A(0,0,s(a/2),k(a/2))};A.fromAxisRotation=function(a,b){var g=a[0],n=a[1],p=a[2],r=1/z(g*g+n*n+p*p),v=s(b/2),y=k(b/2);return new A(v*g*r,v*n*r,v*p*r,y)};t.fromQuat=function(a){var b=a[3],g=a[0],n=a[1];a=a[2];return new t(b*b+g*g-n*n-a*a,2*g*n-2*b*a,2*g*a+2*b*n,0,2*g*n+2*b*a,b*b-g*g+n*n-a*a,2*n*a-2*b*g,0,2*g*a-2*b*n,2*n*a+2*b*g,b*b-g*g-n*n+a*a,0,0,0,0,1)}; -PhiloGL.Vec3=l;PhiloGL.Mat4=t;PhiloGL.Quat=A})();(function(){function x(f){return f!==true?f:false}var z=function(f){f=f.getBoundingClientRect();return{x:f.left,y:f.top,bbox:f}},s={get:function(f,d){return f||(d||window).event},getWheel:function(f){return f.wheelDelta?f.wheelDelta/120:-(f.detail||0)/3},getKey:function(f){var d=f.which||f.keyCode,i;a:{i=j.Keys;for(var c in i)if(i[c]==d){i=c;break a}i=void 0}c=d-111;if(c>0&&c<13)i="f"+c;i=i||String.fromCharCode(d).toLowerCase();return{code:d,key:i, +function(a){return new A(s(a/2),0,0,k(a/2))};A.fromYRotation=function(a){return new A(0,s(a/2),0,k(a/2))};A.fromZRotation=function(a){return new A(0,0,s(a/2),k(a/2))};A.fromAxisRotation=function(a,b){var g=a[0],n=a[1],p=a[2],r=1/z(g*g+n*n+p*p),v=s(b/2),x=k(b/2);return new A(v*g*r,v*n*r,v*p*r,x)};t.fromQuat=function(a){var b=a[3],g=a[0],n=a[1];a=a[2];return new t(b*b+g*g-n*n-a*a,2*g*n-2*b*a,2*g*a+2*b*n,0,2*g*n+2*b*a,b*b-g*g+n*n-a*a,2*n*a-2*b*g,0,2*g*a-2*b*n,2*n*a+2*b*g,b*b-g*g-n*n+a*a,0,0,0,0,1)}; +PhiloGL.Vec3=l;PhiloGL.Mat4=t;PhiloGL.Quat=A})();(function(){function y(f){return f!==true?f:false}var z=function(f){f=f.getBoundingClientRect();return{x:f.left,y:f.top,bbox:f}},s={get:function(f,d){return f||(d||window).event},getWheel:function(f){return f.wheelDelta?f.wheelDelta/120:-(f.detail||0)/3},getKey:function(f){var d=f.which||f.keyCode,i;a:{i=j.Keys;for(var c in i)if(i[c]==d){i=c;break a}i=void 0}c=d-111;if(c>0&&c<13)i="f"+c;i=i||String.fromCharCode(d).toLowerCase();return{code:d,key:i, shift:f.shiftKey,control:f.ctrlKey,alt:f.altKey,meta:f.metaKey}},isRightClick:function(f){return f.which==3||f.button==2},getPos:function(f,d){d=d||window;f=f||d.event;var i=d.document;i=i.documentElement||i.body;if(f.touches&&f.touches.length)f=f.touches[0];return{x:f.pageX||f.clientX+i.scrollLeft,y:f.pageY||f.clientY+i.scrollTop}},stop:function(f){f.stopPropagation&&f.stopPropagation();f.cancelBubble=true;if(f.preventDefault)f.preventDefault();else f.returnValue=false}},k=function(f,d){var i=f.canvas; this.scene=f.scene;this.domElem=i;this.pos=z(i);this.opt=this.callbacks=d;this.size={width:i.width||i.offsetWidth,height:i.height||i.offsetHeight};this.attachEvents()};k.prototype={hovered:false,pressed:false,touched:false,touchMoved:false,moved:false,attachEvents:function(){var f=this.domElem,d=this;if(this.opt.disableContextMenu)f.oncontextmenu=function(){return false};["mouseup","mousedown","mousemove","mouseover","mouseout","touchstart","touchmove","touchend"].forEach(function(c){f.addEventListener(c, function(h,l){d[c](d.eventInfo(c,h,l))},false)});["keydown","keyup"].forEach(function(c){document.addEventListener(c,function(h,l){d[c](d.eventInfo(c,h,l))},false)});var i="";i=!document.getBoxObjectFor&&window.mozInnerScreenX==null?"mousewheel":"DOMMouseScroll";f.addEventListener(i,function(c,h){d.mousewheel(d.eventInfo("mousewheel",c,h))},false)},eventInfo:function(f,d,i){var c=this.domElem,h=this.scene,l=this.opt,m=this.getSize(),q=l.relative,w=l.centerOrigin,t=l.cachePosition&&this.pos||z(c), A=s.get(d,i),a=s.getPos(d,i);d={};i=a.x;c=a.y;if(q){i-=t.x;c-=t.y;if(w){i-=m.width/2;c-=m.height/2;c*=-1}}switch(f){case "mousewheel":d.wheel=s.getWheel(A);break;case "keydown":case "keyup":u.extend(d,s.getKey(A));break;case "mouseup":d.isRightClick=s.isRightClick(A)}var b;u.extend(d,{x:i,y:c,cache:false,stop:function(){s.stop(A)},getTarget:function(){if(b)return b;return b=!l.picking||h.pick(a.x-t.x,a.y-t.y,l.lazyPicking)||true}});d.event=A;return d},getSize:function(){if(this.cacheSize)return this.size; -var f=this.domElem;return{width:f.width||f.offsetWidth,height:f.height||f.offsetHeight}},mouseup:function(f){if(!this.moved)if(f.isRightClick)this.callbacks.onRightClick(f,this.hovered);else this.callbacks.onClick(f,x(this.pressed));if(this.pressed){if(this.moved)this.callbacks.onDragEnd(f,x(this.pressed));else this.callbacks.onDragCancel(f,x(this.pressed));this.pressed=this.moved=false}},mouseout:function(f){for(var d=f.relatedTarget,i=this.domElem;d&&d.parentNode;){if(i==d.parentNode)return;d=d.parentNode}if(this.hovered){this.callbacks.onMouseLeave(f, -this.hovered);this.hovered=false}if(this.pressed&&this.moved){this.callbacks.onDragEnd(f);this.pressed=this.moved=false}},mouseover:function(){},mousemove:function(f){if(this.pressed){this.moved=true;this.callbacks.onDragMove(f,x(this.pressed))}else{if(this.hovered){var d=x(f.getTarget());if(!d||d.hash!=this.hash){this.callbacks.onMouseLeave(f,this.hovered);if(this.hash=this.hovered=d){this.hash=d.hash;this.callbacks.onMouseEnter(f,this.hovered)}}else this.callbacks.onMouseMove(f,this.hovered)}else if(this.hash= -this.hovered=x(f.getTarget())){this.hash=this.hovered.hash;this.callbacks.onMouseEnter(f,this.hovered)}if(!this.opt.picking)this.callbacks.onMouseMove(f)}},mousewheel:function(f){this.callbacks.onMouseWheel(f)},mousedown:function(f){this.pressed=f.getTarget();this.callbacks.onDragStart(f,x(this.pressed))},touchstart:function(f){this.touched=f.getTarget();this.callbacks.onTouchStart(f,x(this.touched))},touchmove:function(f){if(this.touched){this.touchMoved=true;this.callbacks.onTouchMove(f,x(this.touched))}}, -touchend:function(f){if(this.touched){if(this.touchMoved)this.callbacks.onTouchEnd(f,x(this.touched));else this.callbacks.onTouchCancel(f,x(this.touched));this.touched=this.touchMoved=false}},keydown:function(f){this.callbacks.onKeyDown(f)},keyup:function(f){this.callbacks.onKeyUp(f)}};var j={};j.create=function(f,d){d=u.extend({cachePosition:true,cacheSize:true,relative:true,centerOrigin:true,disableContextMenu:true,bind:false,picking:false,lazyPicking:false,onClick:u.empty,onRightClick:u.empty, +var f=this.domElem;return{width:f.width||f.offsetWidth,height:f.height||f.offsetHeight}},mouseup:function(f){if(!this.moved)if(f.isRightClick)this.callbacks.onRightClick(f,this.hovered);else this.callbacks.onClick(f,y(this.pressed));if(this.pressed){if(this.moved)this.callbacks.onDragEnd(f,y(this.pressed));else this.callbacks.onDragCancel(f,y(this.pressed));this.pressed=this.moved=false}},mouseout:function(f){for(var d=f.relatedTarget,i=this.domElem;d&&d.parentNode;){if(i==d.parentNode)return;d=d.parentNode}if(this.hovered){this.callbacks.onMouseLeave(f, +this.hovered);this.hovered=false}if(this.pressed&&this.moved){this.callbacks.onDragEnd(f);this.pressed=this.moved=false}},mouseover:function(){},mousemove:function(f){if(this.pressed){this.moved=true;this.callbacks.onDragMove(f,y(this.pressed))}else{if(this.hovered){var d=y(f.getTarget());if(!d||d.hash!=this.hash){this.callbacks.onMouseLeave(f,this.hovered);if(this.hash=this.hovered=d){this.hash=d.hash;this.callbacks.onMouseEnter(f,this.hovered)}}else this.callbacks.onMouseMove(f,this.hovered)}else if(this.hash= +this.hovered=y(f.getTarget())){this.hash=this.hovered.hash;this.callbacks.onMouseEnter(f,this.hovered)}if(!this.opt.picking)this.callbacks.onMouseMove(f)}},mousewheel:function(f){this.callbacks.onMouseWheel(f)},mousedown:function(f){this.pressed=f.getTarget();this.callbacks.onDragStart(f,y(this.pressed))},touchstart:function(f){this.touched=f.getTarget();this.callbacks.onTouchStart(f,y(this.touched))},touchmove:function(f){if(this.touched){this.touchMoved=true;this.callbacks.onTouchMove(f,y(this.touched))}}, +touchend:function(f){if(this.touched){if(this.touchMoved)this.callbacks.onTouchEnd(f,y(this.touched));else this.callbacks.onTouchCancel(f,y(this.touched));this.touched=this.touchMoved=false}},keydown:function(f){this.callbacks.onKeyDown(f)},keyup:function(f){this.callbacks.onKeyUp(f)}};var j={};j.create=function(f,d){d=u.extend({cachePosition:true,cacheSize:true,relative:true,centerOrigin:true,disableContextMenu:true,bind:false,picking:false,lazyPicking:false,onClick:u.empty,onRightClick:u.empty, onDragStart:u.empty,onDragMove:u.empty,onDragEnd:u.empty,onDragCancel:u.empty,onTouchStart:u.empty,onTouchMove:u.empty,onTouchEnd:u.empty,onTouchCancel:u.empty,onMouseMove:u.empty,onMouseEnter:u.empty,onMouseLeave:u.empty,onMouseWheel:u.empty,onKeyDown:u.empty,onKeyUp:u.empty},d||{});var i=d.bind;if(i)for(var c in d)c.match(/^on[a-zA-Z0-9]+$/)&&function(h,l){d[h]=function(){return l.apply(i,Array.prototype.slice.call(arguments))}}(c,d[c]);new k(f,d);f.events=d};j.Keys={enter:13,up:38,down:40,left:37, -right:39,esc:27,space:32,backspace:8,tab:9,"delete":46};PhiloGL.Events=j})();(function(){function x(d,i){return u.merge(i||{},d.length==2?{vs:d[0],fs:d[1]}:d[0]||{})}var z=function(d,i,c){var h=d.createShader(c);if(h==null)throw"Error creating the shader with shader type: "+c;d.shaderSource(h,i);d.compileShader(h);if(!d.getShaderParameter(h,d.COMPILE_STATUS)){i=d.getShaderInfoLog(h);d.deleteShader(h);throw"Error while compiling the shader "+i;}return h},s=function(d){var i=d.lastIndexOf("/");return i== -"/"?"./":d.substr(0,i+1)},k=function(d,i,c,h,l){l=l||{};var m;if(m=i.match(/^\s*#include "(.*?)"\s*$/)){var q=PhiloGL.IO.XHR,w=s(d)+m[1];l[w]&&h("Recursive include");(new q({url:w,noCache:true,onError:function(t){h("Load included file `"+w+"` failed: Code "+t)},onSuccess:function(t){l[w]=true;return k(w,t,function(A){delete l[w];i=i.replace(/^\s*#include ".*?"\s*$/,A);i=i.replace(/\sHAS_EXTENSION\s*\(\s*([A-Za-z_\-0-9]+)\s*\)/g,function(a,b){return o.getExtension(b)?" 1 ":" 0 "});return k(w,i,c,h, -l)},h,l)}})).send();return null}else return c(i)},j=function(d,i,c){var h=o.getUniformLocation(d,i.name);d=i.type;var l=false,m=true,q,w;if(i.size>1&&c)switch(d){case o.FLOAT:q=o.uniform1fv;w=Float32Array;m=false;break;case o.INT:case o.BOOL:case o.SAMPLER_2D:case o.SAMPLER_CUBE:q=o.uniform1iv;w=Uint16Array;m=false}if(m)switch(d){case o.FLOAT:q=o.uniform1f;break;case o.FLOAT_VEC2:q=o.uniform2fv;w=c?Float32Array:new Float32Array(2);break;case o.FLOAT_VEC3:q=o.uniform3fv;w=c?Float32Array:new Float32Array(3); -break;case o.FLOAT_VEC4:q=o.uniform4fv;w=c?Float32Array:new Float32Array(4);break;case o.INT:case o.BOOL:case o.SAMPLER_2D:case o.SAMPLER_CUBE:q=o.uniform1i;break;case o.INT_VEC2:case o.BOOL_VEC2:q=o.uniform2iv;w=c?Uint16Array:new Uint16Array(2);break;case o.INT_VEC3:case o.BOOL_VEC3:q=o.uniform3iv;w=c?Uint16Array:new Uint16Array(3);break;case o.INT_VEC4:case o.BOOL_VEC4:q=o.uniform4iv;w=c?Uint16Array:new Uint16Array(4);break;case o.FLOAT_MAT2:l=true;q=o.uniformMatrix2fv;break;case o.FLOAT_MAT3:l= -true;q=o.uniformMatrix3fv;break;case o.FLOAT_MAT4:l=true;q=o.uniformMatrix4fv}if(q.bind)q=q.bind(o);else{var t=q;q=function(){t.apply(o,arguments)}}return c&&w?function(A){q(h,new w(A))}:l?function(A){q(h,false,A.toFloat32Array())}:w?function(A){w.set(A.toFloat32Array?A.toFloat32Array():A);q(h,w)}:function(A){q(h,A)};throw"Unknown type: "+d;},f=function(d,i){var c=o,h=c.createProgram();c.attachShader(h,z(c,d,c.VERTEX_SHADER));c.attachShader(h,z(c,i,c.FRAGMENT_SHADER));c.linkProgram(h);if(!c.getProgramParameter(h, -c.LINK_STATUS))throw"Error linking the shader: "+c.getProgramInfoLog(h);if(!h)return false;c={};for(var l={},m,q,w=o.getProgramParameter(h,o.ACTIVE_ATTRIBUTES),t=0;t=0?"&":"?")+u.uid();f.open(d.method,d.url,i);if(d.responseType)f.responseType=d.responseType;if(i)f.onreadystatechange=function(){if(f.readyState==z.State.COMPLETED)if(f.status==200)d.onSuccess(f.responseType?f.response:f.responseText);else d.onError(f.status)};d.sendAsBinary?f.sendAsBinary(j||d.body||null):f.send(j||d.body||null); -if(!i)if(f.status==200)d.onSuccess(f.responseType?f.response:f.responseText);else d.onError(f.status)},setRequestHeader:function(j,f){this.req.setRequestHeader(j,f);return this},handleProgress:function(j){if(j.lengthComputable)this.opt.onProgress(j,Math.round(j.loaded/j.total*100));else this.opt.onProgress(j,-1)},handleError:function(j){this.opt.onError(j)},handleAbort:function(){this.opt.onAbort(e)},handleLoad:function(j){this.opt.onComplete(j)}};z.Group=function(j){function f(l){return function(m){--c; +right:39,esc:27,space:32,backspace:8,tab:9,"delete":46};PhiloGL.Events=j})();(function(){function y(d,i){return u.merge(i||{},d.length==2?{vs:d[0],fs:d[1]}:d[0]||{})}var z=function(d,i,c){var h=d.createShader(c);if(h==null)throw"Error creating the shader with shader type: "+c;d.shaderSource(h,i);d.compileShader(h);if(!d.getShaderParameter(h,d.COMPILE_STATUS)){i=d.getShaderInfoLog(h);d.deleteShader(h);throw"Error while compiling the shader "+i;}return h},s=function(d){var i=d.lastIndexOf("/");return i== +"/"?"./":d.substr(0,i+1)},k=function(d,i,c,h,l){l=l||{};var m;if(m=i.match(/#include "(.*?)"/)){var q=PhiloGL.IO.XHR,w=s(d)+m[1];l[w]&&h("Recursive include");(new q({url:w,noCache:true,onError:function(t){h("Load included file `"+w+"` failed: Code "+t)},onSuccess:function(t){l[w]=true;return k(w,t,function(A){delete l[w];i=i.replace(/#include ".*?"/,A);i=i.replace(/\sHAS_EXTENSION\s*\(\s*([A-Za-z_\-0-9]+)\s*\)/g,function(a,b){return o.getExtension(b)?" 1 ":" 0 "});return k(w,i,c,h,l)},h,l)}})).send(); +return null}else return c(i)},j=function(d,i,c){var h=o.getUniformLocation(d,i.name);d=i.type;var l=false,m=true,q,w;if(i.size>1&&c)switch(d){case o.FLOAT:q=o.uniform1fv;w=Float32Array;m=false;break;case o.INT:case o.BOOL:case o.SAMPLER_2D:case o.SAMPLER_CUBE:q=o.uniform1iv;w=Uint16Array;m=false}if(m)switch(d){case o.FLOAT:q=o.uniform1f;break;case o.FLOAT_VEC2:q=o.uniform2fv;w=c?Float32Array:new Float32Array(2);break;case o.FLOAT_VEC3:q=o.uniform3fv;w=c?Float32Array:new Float32Array(3);break;case o.FLOAT_VEC4:q= +o.uniform4fv;w=c?Float32Array:new Float32Array(4);break;case o.INT:case o.BOOL:case o.SAMPLER_2D:case o.SAMPLER_CUBE:q=o.uniform1i;break;case o.INT_VEC2:case o.BOOL_VEC2:q=o.uniform2iv;w=c?Uint16Array:new Uint16Array(2);break;case o.INT_VEC3:case o.BOOL_VEC3:q=o.uniform3iv;w=c?Uint16Array:new Uint16Array(3);break;case o.INT_VEC4:case o.BOOL_VEC4:q=o.uniform4iv;w=c?Uint16Array:new Uint16Array(4);break;case o.FLOAT_MAT2:l=true;q=o.uniformMatrix2fv;break;case o.FLOAT_MAT3:l=true;q=o.uniformMatrix3fv; +break;case o.FLOAT_MAT4:l=true;q=o.uniformMatrix4fv}if(q.bind)q=q.bind(o);else{var t=q;q=function(){t.apply(o,arguments)}}return c&&w?function(A){q(h,new w(A))}:l?function(A){q(h,false,A.toFloat32Array())}:w?function(A){w.set(A.toFloat32Array?A.toFloat32Array():A);q(h,w)}:function(A){q(h,A)};throw"Unknown type: "+d;},f=function(d,i){var c=o,h=c.createProgram();c.attachShader(h,z(c,d,c.VERTEX_SHADER));c.attachShader(h,z(c,i,c.FRAGMENT_SHADER));c.linkProgram(h);if(!c.getProgramParameter(h,c.LINK_STATUS))throw"Error linking the shader: "+ +c.getProgramInfoLog(h);if(!h)return false;c={};for(var l={},m,q,w=o.getProgramParameter(h,o.ACTIVE_ATTRIBUTES),t=0;t=0?"&":"?")+u.uid();f.open(d.method,d.url,i);if(d.responseType)f.responseType=d.responseType;if(i)f.onreadystatechange=function(){if(f.readyState==z.State.COMPLETED)if(f.status==200)d.onSuccess(f.responseType?f.response:f.responseText);else d.onError(f.status)};d.sendAsBinary?f.sendAsBinary(j||d.body||null): +f.send(j||d.body||null);if(!i)if(f.status==200)d.onSuccess(f.responseType?f.response:f.responseText);else d.onError(f.status)},setRequestHeader:function(j,f){this.req.setRequestHeader(j,f);return this},handleProgress:function(j){if(j.lengthComputable)this.opt.onProgress(j,Math.round(j.loaded/j.total*100));else this.opt.onProgress(j,-1)},handleError:function(j){this.opt.onError(j)},handleAbort:function(){this.opt.onAbort(e)},handleLoad:function(j){this.opt.onComplete(j)}};z.Group=function(j){function f(l){return function(m){--c; j.onError(m,l);if(!c)j.onComplete(h)}}function d(l){return function(m){--c;h[l]=m;j.onSuccess(m,l);if(!c)j.onComplete(h)}}j=u.merge({urls:[],onError:u.empty,onSuccess:u.empty,onComplete:u.empty,method:"GET",async:true,noCache:false,sendAsBinary:false,responseType:false},j||{});var i=u.splat(j.urls),c=i.length,h=Array(c);this.reqs=i.map(function(l,m){return new z({url:l,method:j.method,async:j.async,noCache:j.noCache,sendAsBinary:j.sendAsBinary,responseType:j.responseType,body:j.body,onError:f(m), onSuccess:d(m)})})};z.Group.prototype={send:function(){for(var j=0,f=this.reqs,d=f.length;j=0?"&":"?")+u.uid();d=j.url+(j.url.indexOf("?")>-1?"&":"?")+j.callbackKey+"=PhiloGL.IO.JSONP.requests.request_"+f+(d.length>0?"&"+d:"");var c=document.createElement("script"); c.type="text/javascript";c.src=d;s.requests["request_"+f]=function(h){j.onComplete(h);c.parentNode&&c.parentNode.removeChild(c);c.clearAttributes&&c.clearAttributes()};document.getElementsByTagName("head")[0].appendChild(c)};s.counter=0;s.requests={};var k=function(j){j=u.merge({src:[],noCache:false,onProgress:u.empty,onComplete:u.empty},j||{});var f=0,d=j.src.length,i=function(){j.onProgress(Math.round(++f/d*100));if(f==d)j.onComplete(m)},c=function(){if(++f==d)j.onComplete(m)},h=j.noCache,l=u.uid(), -m=j.src.map(function(q,w){var t=new Image;t.index=w;t.onload=i;t.onerror=c;t.src=q+(h?(q.indexOf("?")>=0?"&":"?")+l:"");return t});return m};x.XHR=z;x.JSONP=s;x.Images=k;x.Textures=function(j){j=u.merge({src:[],noCache:false,onComplete:u.empty},j||{});k({src:j.src,noCache:j.noCache,onComplete:function(f){var d={};f.forEach(function(i,c){d[j.id[c]||j.src[c]]=u.merge({data:{value:i}},j)});M.setTextures(d);j.onComplete()}})};PhiloGL.IO=x})();(function(){var x=PhiloGL.Vec3,z=PhiloGL.Mat4,s=function(k, -j,f,d,i){i=i||{};var c=i.position,h=i.target,l=i.up;this.type=i.type?i.type:"perspective";this.fov=k;this.near=f;this.far=d;this.aspect=j;this.position=c&&new x(c.x,c.y,c.z)||new x;this.target=h&&new x(h.x,h.y,h.z)||new x;this.up=l&&new x(l.x,l.y,l.z)||new x(0,1,0);if(this.type=="perspective")this.projection=(new z).perspective(k,j,f,d);else{k=f*Math.tan(k*Math.PI/360);i=-k;this.projection=(new z).ortho(i*j,k*j,i,k,f,d)}this.view=new z};s.prototype={update:function(){if(this.type=="perspective")this.projection= -(new z).perspective(this.fov,this.aspect,this.near,this.far);else{var k=this.near*Math.tan(this.fov*Math.PI/360),j=-k,f=j*this.aspect,d=k*this.aspect;this.projection=(new z).ortho(f,d,j,k,this.near,this.far)}this.view.lookAt(this.position,this.target,this.up)}};PhiloGL.Camera=s})();(function(){function x(c,h){if(c&&c.length=0?"&":"?")+l:"");return t});return m};y.XHR=z;y.JSONP=s;y.Images=k;y.Textures=function(j){j=u.merge({src:[],noCache:false,onComplete:u.empty},j||{});k({src:j.src,noCache:j.noCache,onComplete:function(f){var d={};f.forEach(function(i,c){d[j.id&&j.id[c]||j.src&&j.src[c]]=u.merge({data:{value:i}},j)});M.setTextures(d);j.onComplete()}})};PhiloGL.IO=y})();(function(){var y=PhiloGL.Vec3,z=PhiloGL.Mat4, +s=function(k,j,f,d,i){i=i||{};var c=i.position,h=i.target,l=i.up;this.type=i.type?i.type:"perspective";this.fov=k;this.near=f;this.far=d;this.aspect=j;this.position=c&&new y(c.x,c.y,c.z)||new y;this.target=h&&new y(h.x,h.y,h.z)||new y;this.up=l&&new y(l.x,l.y,l.z)||new y(0,1,0);if(this.type=="perspective")this.projection=(new z).perspective(k,j,f,d);else{k=f*Math.tan(k*Math.PI/360);i=-k;this.projection=(new z).ortho(i*j,k*j,i,k,f,d)}this.view=new z};s.prototype={update:function(){if(this.type=="perspective")this.projection= +(new z).perspective(this.fov,this.aspect,this.near,this.far);else{var k=this.near*Math.tan(this.fov*Math.PI/360),j=-k,f=j*this.aspect,d=k*this.aspect;this.projection=(new z).ortho(f,d,j,k,this.near,this.far)}this.view.lookAt(this.position,this.target,this.up)}};PhiloGL.Camera=s})();(function(){function y(c,h){if(c&&c.length1.0E-6&&z.unit(m);h.push([m.x,m.y,m.z])});this.normals=h}});u.extend(i.Model.prototype,{setUniforms:function(c){c.setUniforms(this.uniforms)}, @@ -101,20 +101,20 @@ value:this.$colors,size:4}):c.setBuffer("color-"+this.id)},setTexCoords:function l+"-"+h)}else c.setBuffer("texCoord-"+h)}},setTextures:function(c){this.textures=this.textures?u.splat(this.textures):[];for(var h=0,l=this.textures,m=l.length,q=PhiloGL.Scene.MAX_TEXTURES;hT?S:T);if(X in W)return W[X];var O=(l[S]+l[T])/2,Y=(l[S+1]+l[T+1])/2,Z=(l[S+2]+l[T+2])/2,$=q(O*O+Y*Y+Z*Z);O/=$;Y/=$;Z/=$; -l.push(O,Y,Z);return W[X]=l.length/3-1}}();for(b=0;bw){J=m;I=1;H=l}else H=h+(l-h)*(t/w);if(t==-2||t==w+2)I=H=0;J-=m/2;for(var F=0;Fw?0:N*D;n[E+1]=t<0? --1:t>w?1:y;n[E+2]=t<0||t>w?0:K*D;b[G+0]=F/q;b[G+1]=I;G+=2;E+=3}}for(t=0;tw){J=m;I=1;H=l}else H=h+(l-h)*(t/w);if(t==-2||t==w+2)I=H=0;J-=m/2;for(var F=0;Fw?0:N*D;n[E+1]=t<0? +-1:t>w?1:x;n[E+2]=t<0||t>w?0:K*D;b[G+0]=F/q;b[G+1]=I;G+=2;E+=3}}for(t=0;t-1&&j.splice(k,1)},getProgram:function(k){var j=this.program;if(j.$$family!="program"&&k&&k.program){j=j[k.program];j.use()}return j},defineBuffers:function(k){var j=this.getProgram(k),f=k.dynamic;k.dynamic=true;k.setState(j);k.dynamic=f;k.unsetState(j)},beforeRender:function(k){this.setupLighting(k);this.setupEffects(k);var j=this.camera,f=j.position,d=j.view;j=j.projection;var i=d.mulMat4(j),c=i.invert(); -k.setUniforms({cameraPosition:[f.x,f.y,f.z],projectionMatrix:j,viewMatrix:d,viewProjectionMatrix:i,viewInverseMatrix:d.invert(),viewProjectionInverseMatrix:c})},setupLighting:function(k){var j=this.config.lights,f=j.ambient,d=j.directional,i=d.color,c=d.direction,h=j.enable;j=j.points&&u.splat(j.points)||[];d=j.length;var l=[],m=[],q=[],w=[];c=(new x(c.x,c.y,c.z)).$unit().$scale(-1);k.setUniform("enableLights",h);if(h){k.setUniform("ambientColor",[f.r,f.g,f.b]);k.setUniform("directionalColor",[i.r, +k.setUniforms({cameraPosition:[f.x,f.y,f.z],projectionMatrix:j,viewMatrix:d,viewProjectionMatrix:i,viewInverseMatrix:d.invert(),viewProjectionInverseMatrix:c})},setupLighting:function(k){var j=this.config.lights,f=j.ambient,d=j.directional,i=d.color,c=d.direction,h=j.enable;j=j.points&&u.splat(j.points)||[];d=j.length;var l=[],m=[],q=[],w=[];c=(new y(c.x,c.y,c.z)).$unit().$scale(-1);k.setUniform("enableLights",h);if(h){k.setUniform("ambientColor",[f.r,f.g,f.b]);k.setUniform("directionalColor",[i.r, i.g,i.b]);k.setUniform("lightingDirection",[c.x,c.y,c.z]);k.setUniform("numberPoints",d);for(f=0;f>0)%256;c[2]=(q/65536>>0)%256;j.setUniform("pickColor",[c[0]/255,c[1]/255,c[2]/255]);f[c.join()]=l}}})}},resetPicking:u.empty};s.MAX_TEXTURES=10;s.MAX_POINT_LIGHTS=50;s.PICKING_RES=4;PhiloGL.Scene=s})();(function(){function x(z,s){for(var k=this.workers=[];s--;)k.push(new Worker(z))}x.prototype={map:function(z){var s=this.workers,k=this.configs=[],j=0;for(s=s.length;j>0)%256;c[2]=(q/65536>>0)%256;j.setUniform("pickColor",[c[0]/255,c[1]/255,c[2]/255]);f[c.join()]=l}}})}},resetPicking:u.empty};s.MAX_TEXTURES=10;s.MAX_POINT_LIGHTS=50;s.PICKING_RES=4;PhiloGL.Scene=s})();(function(){function y(z,s){for(var k=this.workers=[];s--;)k.push(new Worker(z))}y.prototype={map:function(z){var s=this.workers,k=this.configs=[],j=0;for(s=s.length;j=(7-4*m)/11){l=q*q-Math.pow((11-6*m-11*h)/ -4,2);break}return l},Elastic:function(h,l){return Math.pow(2,10*--h)*Math.cos(20*h*Math.PI*(l[0]||1)/3)}},c;for(c in i)s[c]=d(i[c]);["Quad","Cubic","Quart","Quint"].forEach(function(h,l){s[h]=d(function(m){return Math.pow(m,[l+2])})})})();var k=self||window,j=function(){var d=[];if(z.length){for(var i=0,c=z.length,h;i