//>>built define("dojox/gfx3d/lighting",["dojo/_base/lang","dojo/_base/Color","dojo/_base/declare","dojox/gfx/_base","./_base"],function(_1,_2,_3,_4,_5){ var _6=_5.lighting={black:function(){ return {r:0,g:0,b:0,a:1}; },white:function(){ return {r:1,g:1,b:1,a:1}; },toStdColor:function(c){ c=_4.normalizeColor(c); return {r:c.r/255,g:c.g/255,b:c.b/255,a:c.a}; },fromStdColor:function(c){ return new _2([Math.round(255*c.r),Math.round(255*c.g),Math.round(255*c.b),c.a]); },scaleColor:function(s,c){ return {r:s*c.r,g:s*c.g,b:s*c.b,a:s*c.a}; },addColor:function(a,b){ return {r:a.r+b.r,g:a.g+b.g,b:a.b+b.b,a:a.a+b.a}; },multiplyColor:function(a,b){ return {r:a.r*b.r,g:a.g*b.g,b:a.b*b.b,a:a.a*b.a}; },saturateColor:function(c){ return {r:c.r<0?0:c.r>1?1:c.r,g:c.g<0?0:c.g>1?1:c.g,b:c.b<0?0:c.b>1?1:c.b,a:c.a<0?0:c.a>1?1:c.a}; },mixColor:function(c1,c2,s){ return _6.addColor(_6.scaleColor(s,c1),_6.scaleColor(1-s,c2)); },diff2Color:function(c1,c2){ var r=c1.r-c2.r; var g=c1.g-c2.g; var b=c1.b-c2.b; var a=c1.a-c2.a; return r*r+g*g+b*b+a*a; },length2Color:function(c){ return c.r*c.r+c.g*c.g+c.b*c.b+c.a*c.a; },dot:function(a,b){ return a.x*b.x+a.y*b.y+a.z*b.z; },scale:function(s,v){ return {x:s*v.x,y:s*v.y,z:s*v.z}; },add:function(a,b){ return {x:a.x+b.x,y:a.y+b.y,z:a.z+b.z}; },saturate:function(v){ return Math.min(Math.max(v,0),1); },length:function(v){ return Math.sqrt(_5.lighting.dot(v,v)); },normalize:function(v){ return _6.scale(1/_6.length(v),v); },faceforward:function(n,i){ var p=_5.lighting; var s=p.dot(i,n)<0?1:-1; return p.scale(s,n); },reflect:function(i,n){ var p=_5.lighting; return p.add(i,p.scale(-2*p.dot(i,n),n)); },diffuse:function(_7,_8){ var c=_6.black(); for(var i=0;i<_8.length;++i){ var l=_8[i],d=_6.dot(_6.normalize(l.direction),_7); c=_6.addColor(c,_6.scaleColor(d,l.color)); } return _6.saturateColor(c); },specular:function(_9,v,_a,_b){ var c=_6.black(); for(var i=0;i<_b.length;++i){ var l=_b[i],h=_6.normalize(_6.add(_6.normalize(l.direction),v)),s=Math.pow(Math.max(0,_6.dot(_9,h)),1/_a); c=_6.addColor(c,_6.scaleColor(s,l.color)); } return _6.saturateColor(c); },phong:function(_c,v,_d,_e){ _c=_6.normalize(_c); var c=_6.black(); for(var i=0;i<_e.length;++i){ var l=_e[i],r=_6.reflect(_6.scale(-1,_6.normalize(v)),_c),s=Math.pow(Math.max(0,_6.dot(r,_6.normalize(l.direction))),_d); c=_6.addColor(c,_6.scaleColor(s,l.color)); } return _6.saturateColor(c); }}; _3("dojox.gfx3d.lighting.Model",null,{constructor:function(_f,_10,_11,_12){ this.incident=_6.normalize(_f); this.lights=[]; for(var i=0;i<_10.length;++i){ var l=_10[i]; this.lights.push({direction:_6.normalize(l.direction),color:_6.toStdColor(l.color)}); } this.ambient=_6.toStdColor(_11.color?_11.color:"white"); this.ambient=_6.scaleColor(_11.intensity,this.ambient); this.ambient=_6.scaleColor(this.ambient.a,this.ambient); this.ambient.a=1; this.specular=_6.toStdColor(_12?_12:"white"); this.specular=_6.scaleColor(this.specular.a,this.specular); this.specular.a=1; this.npr_cool={r:0,g:0,b:0.4,a:1}; this.npr_warm={r:0.4,g:0.4,b:0.2,a:1}; this.npr_alpha=0.2; this.npr_beta=0.6; this.npr_scale=0.6; },constant:function(_13,_14,_15){ _15=_6.toStdColor(_15); var _16=_15.a,_17=_6.scaleColor(_16,_15); _17.a=_16; return _6.fromStdColor(_6.saturateColor(_17)); },matte:function(_18,_19,_1a){ if(typeof _19=="string"){ _19=_6.finish[_19]; } _1a=_6.toStdColor(_1a); _18=_6.faceforward(_6.normalize(_18),this.incident); var _1b=_6.scaleColor(_19.Ka,this.ambient),_1c=_6.saturate(-4*_6.dot(_18,this.incident)),_1d=_6.scaleColor(_1c*_19.Kd,_6.diffuse(_18,this.lights)),_1e=_6.scaleColor(_1a.a,_6.multiplyColor(_1a,_6.addColor(_1b,_1d))); _1e.a=_1a.a; return _6.fromStdColor(_6.saturateColor(_1e)); },metal:function(_1f,_20,_21){ if(typeof _20=="string"){ _20=_6.finish[_20]; } _21=_6.toStdColor(_21); _1f=_6.faceforward(_6.normalize(_1f),this.incident); var v=_6.scale(-1,this.incident),_22,_23,_24=_6.scaleColor(_20.Ka,this.ambient),_25=_6.saturate(-4*_6.dot(_1f,this.incident)); if("phong" in _20){ _22=_6.scaleColor(_25*_20.Ks*_20.phong,_6.phong(_1f,v,_20.phong_size,this.lights)); }else{ _22=_6.scaleColor(_25*_20.Ks,_6.specular(_1f,v,_20.roughness,this.lights)); } _23=_6.scaleColor(_21.a,_6.addColor(_6.multiplyColor(_21,_24),_6.multiplyColor(this.specular,_22))); _23.a=_21.a; return _6.fromStdColor(_6.saturateColor(_23)); },plastic:function(_26,_27,_28){ if(typeof _27=="string"){ _27=_6.finish[_27]; } _28=_6.toStdColor(_28); _26=_6.faceforward(_6.normalize(_26),this.incident); var v=_6.scale(-1,this.incident),_29,_2a,_2b=_6.scaleColor(_27.Ka,this.ambient),_2c=_6.saturate(-4*_6.dot(_26,this.incident)),_2d=_6.scaleColor(_2c*_27.Kd,_6.diffuse(_26,this.lights)); if("phong" in _27){ _29=_6.scaleColor(_2c*_27.Ks*_27.phong,_6.phong(_26,v,_27.phong_size,this.lights)); }else{ _29=_6.scaleColor(_2c*_27.Ks,_6.specular(_26,v,_27.roughness,this.lights)); } _2a=_6.scaleColor(_28.a,_6.addColor(_6.multiplyColor(_28,_6.addColor(_2b,_2d)),_6.multiplyColor(this.specular,_29))); _2a.a=_28.a; return _6.fromStdColor(_6.saturateColor(_2a)); },npr:function(_2e,_2f,_30){ if(typeof _2f=="string"){ _2f=_6.finish[_2f]; } _30=_6.toStdColor(_30); _2e=_6.faceforward(_6.normalize(_2e),this.incident); var _31=_6.scaleColor(_2f.Ka,this.ambient),_32=_6.saturate(-4*_6.dot(_2e,this.incident)),_33=_6.scaleColor(_32*_2f.Kd,_6.diffuse(_2e,this.lights)),_34=_6.scaleColor(_30.a,_6.multiplyColor(_30,_6.addColor(_31,_33))),_35=_6.addColor(this.npr_cool,_6.scaleColor(this.npr_alpha,_34)),_36=_6.addColor(this.npr_warm,_6.scaleColor(this.npr_beta,_34)),d=(1+_6.dot(this.incident,_2e))/2,_34=_6.scaleColor(this.npr_scale,_6.addColor(_34,_6.mixColor(_35,_36,d))); _34.a=_30.a; return _6.fromStdColor(_6.saturateColor(_34)); }}); _5.lighting.finish={defaults:{Ka:0.1,Kd:0.6,Ks:0,roughness:0.05},dull:{Ka:0.1,Kd:0.6,Ks:0.5,roughness:0.15},shiny:{Ka:0.1,Kd:0.6,Ks:1,roughness:0.001},glossy:{Ka:0.1,Kd:0.6,Ks:1,roughness:0.0001},phong_dull:{Ka:0.1,Kd:0.6,Ks:0.5,phong:0.5,phong_size:1},phong_shiny:{Ka:0.1,Kd:0.6,Ks:1,phong:1,phong_size:200},phong_glossy:{Ka:0.1,Kd:0.6,Ks:1,phong:1,phong_size:300},luminous:{Ka:1,Kd:0,Ks:0,roughness:0.05},metalA:{Ka:0.35,Kd:0.3,Ks:0.8,roughness:1/20},metalB:{Ka:0.3,Kd:0.4,Ks:0.7,roughness:1/60},metalC:{Ka:0.25,Kd:0.5,Ks:0.8,roughness:1/80},metalD:{Ka:0.15,Kd:0.6,Ks:0.8,roughness:1/100},metalE:{Ka:0.1,Kd:0.7,Ks:0.8,roughness:1/120}}; return _6; });