1 |
- var BABYLON;!(function(e){var t=(function(){function t(){this.materials=[]}return t.prototype.parseMTL=function(r,s,a){for(var n,i,o=s.split("\n"),l=0;l<o.length;l++){var u=o[l].trim();if(0!==u.length&&"#"!==u.charAt(0)){var p=u.indexOf(" "),h=p>=0?u.substring(0,p):u;h=h.toLowerCase();var m=p>=0?u.substring(p+1).trim():"";"newmtl"===h?(i&&this.materials.push(i),i=new e.StandardMaterial(m,r)):"kd"===h?(n=m.split(/\s+/,3).map(parseFloat),i.diffuseColor=e.Color3.FromArray(n)):"ka"===h?(n=m.split(/\s+/,3).map(parseFloat),i.ambientColor=e.Color3.FromArray(n)):"ks"===h?(n=m.split(/\s+/,3).map(parseFloat),i.specularColor=e.Color3.FromArray(n)):"ke"===h?(n=m.split(/\s+/,3).map(parseFloat),i.emissiveColor=e.Color3.FromArray(n)):"ns"===h?i.specularPower=parseFloat(m):"d"===h?i.alpha=parseFloat(m):"map_ka"===h?i.ambientTexture=t._getTexture(a,m,r):"map_kd"===h?i.diffuseTexture=t._getTexture(a,m,r):"map_ks"===h?i.specularTexture=t._getTexture(a,m,r):"map_ns"===h||("map_bump"===h?i.bumpTexture=t._getTexture(a,m,r):"map_d"===h&&(i.opacityTexture=t._getTexture(a,m,r)))}}this.materials.push(i)},t._getTexture=function(t,r,s){if(!r)return null;var a=t;if("file:"===t){var n=r.lastIndexOf("\\");n===-1&&(n=r.lastIndexOf("/")),a+=n>-1?r.substr(n+1):r}else a+=r;return new e.Texture(a,s)},t})();e.MTLFileLoader=t;var r=(function(){function r(){this.name="obj",this.extensions=".obj",this.obj=/^o/,this.group=/^g/,this.mtllib=/^mtllib /,this.usemtl=/^usemtl /,this.smooth=/^s /,this.vertexPattern=/v( +[\d|\.|\+|\-|e|E]+)( +[\d|\.|\+|\-|e|E]+)( +[\d|\.|\+|\-|e|E]+)/,this.normalPattern=/vn( +[\d|\.|\+|\-|e|E]+)( +[\d|\.|\+|\-|e|E]+)( +[\d|\.|\+|\-|e|E]+)/,this.uvPattern=/vt( +[\d|\.|\+|\-|e|E]+)( +[\d|\.|\+|\-|e|E]+)/,this.facePattern1=/f\s+(([\d]{1,}[\s]?){3,})+/,this.facePattern2=/f\s+((([\d]{1,}\/[\d]{1,}[\s]?){3,})+)/,this.facePattern3=/f\s+((([\d]{1,}\/[\d]{1,}\/[\d]{1,}[\s]?){3,})+)/,this.facePattern4=/f\s+((([\d]{1,}\/\/[\d]{1,}[\s]?){3,})+)/}return r.prototype._loadMTL=function(t,r,s){var a=e.Tools.BaseUrl+r+t;e.Tools.LoadFile(a,s,null,null,!1,(function(){console.warn("Error - Unable to load "+a)}))},r.prototype.importMesh=function(e,t,r,s,a,n,i){var o=this._parseSolid(e,t,r,s);return a&&o.forEach((function(e){a.push(e)})),!0},r.prototype.load=function(e,t,r){return this.importMesh(null,e,t,r,null,null,null)},r.prototype._parseSolid=function(s,a,n,i){for(var o,l=[],u=[],p=[],h=[],m=[],f=[],c=[],d=[],v=[],x=0,g=!1,T=[],_=[],F=[],I=[],P="",b="",y=new t,w=1,L=!0,O=function(e,t){e[t[0]]||(e[t[0]]={normals:[],idx:[]});var r=e[t[0]].normals.indexOf(t[1]);return r===-1?-1:e[t[0]].idx[r]},E=function(e,t){e[t[0]]||(e[t[0]]={normals:[],idx:[],uv:[]});var r=e[t[0]].normals.indexOf(t[1]);return 1!=r&&t[2]==e[t[0]].uv[r]?e[t[0]].idx[r]:-1},M=function(e,t,s,a,n,i){var o;o=r.OPTIMIZE_WITH_UV?E(v,[e,s,t]):O(v,[e,s]),o==-1?(m.push(f.length),f.push(a),c.push(n),d.push(i),v[e].normals.push(s),v[e].idx.push(x++),r.OPTIMIZE_WITH_UV&&v[e].uv.push(t)):m.push(o)},A=function(){for(var e=0;e<f.length;e++)T.push(f[e].x,f[e].y,f[e].z),_.push(d[e].x,d[e].y,d[e].z),F.push(c[e].x,c[e].y);f=[],d=[],c=[],v=[],x=0},V=function(e,t){t+1<e.length&&(I.push(e[0],e[t],e[t+1]),t+=1,V(e,t))},C=function(){h.length>0&&(o=h[h.length-1],A(),m.reverse(),o.indices=m.slice(),o.positions=T.slice(),o.normals=_.slice(),o.uvs=F.slice(),m=[],T=[],_=[],F=[])},B=n.split("\n"),N=0;N<B.length;N++){var U,k=B[N].trim();if(0!==k.length&&"#"!==k.charAt(0))if(null!==(U=this.vertexPattern.exec(k)))l.push(new e.Vector3(parseFloat(U[1]),parseFloat(U[2]),parseFloat(U[3])));else if(null!==(U=this.normalPattern.exec(k)))u.push(new e.Vector3(parseFloat(U[1]),parseFloat(U[2]),parseFloat(U[3])));else if(null!==(U=this.uvPattern.exec(k)))p.push(new e.Vector2(parseFloat(U[1]),parseFloat(U[2])));else if(null!==(U=this.facePattern3.exec(k)))!(function(e,t){V(e,t);for(var r=0;r<I.length;r++){var s=I[r].split("/"),a=parseInt(s[0])-1,n=parseInt(s[1])-1,i=parseInt(s[2])-1;M(a,n,i,l[a],p[n],u[i])}I=[]})(U[1].trim().split(" "),1);else if(null!==(U=this.facePattern4.exec(k)))!(function(t,r){V(t,r);for(var s=0;s<I.length;s++){var a=I[s].split("//"),n=parseInt(a[0])-1,i=parseInt(a[1])-1;M(n,1,i,l[n],e.Vector2.Zero(),u[i])}I=[]})(U[1].trim().split(" "),1);else if(null!==(U=this.facePattern2.exec(k)))!(function(t,r){V(t,r);for(var s=0;s<I.length;s++){var a=I[s].split("/"),n=parseInt(a[0])-1,i=parseInt(a[1])-1;M(n,i,0,l[n],p[i],e.Vector3.Up())}I=[]})(U[1].trim().split(" "),1);else if(null!==(U=this.facePattern1.exec(k)))!(function(t,r){V(t,r);for(var s=0;s<I.length;s++){var a=parseInt(I[s])-1;M(a,0,0,l[a],e.Vector2.Zero(),e.Vector3.Up())}I=[]})(U[1].trim().split(" "),1);else if(this.group.test(k)||this.obj.test(k)){var S={name:k.substring(2).trim(),indices:void 0,positions:void 0,normals:void 0,uvs:void 0,materialName:""};C(),h.push(S),g=!0,L=!0,w=1}else if(this.usemtl.test(k)){if(P=k.substring(7).trim(),!L){C();var S={name:"_mm"+w.toString(),indices:void 0,positions:void 0,normals:void 0,uvs:void 0,materialName:P};w++,h.push(S)}g&&L&&(h[h.length-1].materialName=P,L=!1)}else this.mtllib.test(k)?b=k.substring(7).trim():this.smooth.test(k)||console.log("Unhandled expression at line : "+k)}g&&(o=h[h.length-1],m.reverse(),A(),o.indices=m,o.positions=T,o.normals=_,o.uvs=F),g||(m.reverse(),A(),h.push({name:e.Geometry.RandomId(),indices:m,positions:T,normals:_,uvs:F,materialName:P}));for(var Z=[],j=new Array,H=0;H<h.length;H++){if(s&&h[H].name)if(s instanceof Array){if(s.indexOf(h[H].name)==-1)continue}else if(h[H].name!==s)continue;o=h[H];var W=new e.Mesh(h[H].name,a);j.push(h[H].materialName);var Y=new e.VertexData;Y.positions=o.positions,Y.normals=o.normals,Y.uvs=o.uvs,Y.indices=o.indices,Y.applyToMesh(W),Z.push(W)}return""!==b&&this._loadMTL(b,i,(function(e){y.parseMTL(a,e,i);for(var t=0;t<y.materials.length;t++){for(var r,s=0,n=[];(r=j.indexOf(y.materials[t].name,s))>-1;)n.push(r),s=r+1;if(r==-1&&0==n.length)y.materials[t].dispose();else for(var o=0;o<n.length;o++)Z[n[o]].material=y.materials[t]}})),Z},r.OPTIMIZE_WITH_UV=!1,r})();e.OBJFileLoader=r,e.SceneLoader&&e.SceneLoader.RegisterPlugin(new r)})(BABYLON||(BABYLON={}));
|