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