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