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