提交 e86c5653 编写于 作者: A alteredq

Fixed handling of doubleSided / flipSided in Loader and GeometryLoader.

上级 67079ebe
此差异已折叠。
此差异已折叠。
......@@ -132,9 +132,9 @@ THREE.Loader.prototype={constructor:THREE.Loader,crossOrigin:"anonymous",addStat
a.total).toFixed(0)+"%"):b+((a.loaded/1E3).toFixed(2)+" KB");this.statusDomElement.innerHTML=b},extractUrlBase:function(a){a=a.split("/");a.pop();return(a.length<1?".":a.join("/"))+"/"},initMaterials:function(a,b,c){a.materials=[];for(var d=0;d<b.length;++d)a.materials[d]=THREE.Loader.prototype.createMaterial(b[d],c)},hasNormals:function(a){var b,c,d=a.materials.length;for(c=0;c<d;c++){b=a.materials[c];if(b instanceof THREE.ShaderMaterial)return true}return false},createMaterial:function(a,b){function c(a){a=
Math.log(a)/Math.LN2;return Math.floor(a)==a}function d(a){a=Math.log(a)/Math.LN2;return Math.pow(2,Math.round(a))}function e(a,b){var f=new Image;f.onload=function(){if(!c(this.width)||!c(this.height)){var b=d(this.width),f=d(this.height);a.image.width=b;a.image.height=f;a.image.getContext("2d").drawImage(this,0,0,b,f)}else a.image=this;a.needsUpdate=true};f.crossOrigin=j.crossOrigin;f.src=b}function f(a,c,d,f,h,j){var i=document.createElement("canvas");a[c]=new THREE.Texture(i);a[c].sourceFile=
d;if(f){a[c].repeat.set(f[0],f[1]);if(f[0]!=1)a[c].wrapS=THREE.RepeatWrapping;if(f[1]!=1)a[c].wrapT=THREE.RepeatWrapping}h&&a[c].offset.set(h[0],h[1]);if(j){f={repeat:THREE.RepeatWrapping,mirror:THREE.MirroredRepeatWrapping};if(f[j[0]]!==void 0)a[c].wrapS=f[j[0]];if(f[j[1]]!==void 0)a[c].wrapT=f[j[1]]}e(a[c],b+"/"+d)}function h(a){return(a[0]*255<<16)+(a[1]*255<<8)+a[2]*255}var j=this,l="MeshLambertMaterial",k={color:15658734,opacity:1,map:null,lightMap:null,normalMap:null,wireframe:false};if(a.shading){var i=
a.shading.toLowerCase();i==="phong"?l="MeshPhongMaterial":i==="basic"&&(l="MeshBasicMaterial")}if(a.blending!==void 0&&THREE[a.blending]!==void 0)k.blending=THREE[a.blending];if(a.transparent!==void 0||a.opacity<1)k.transparent=a.transparent;if(a.depthTest!==void 0)k.depthTest=a.depthTest;if(a.depthWrite!==void 0)k.depthWrite=a.depthWrite;if(a.visible!==void 0)k.visible=a.visible;if(a.doubleSided!==void 0)k.doubleSided=a.doubleSided;if(a.flipSided!==void 0)k.flipSided=a.flipSided;if(a.wireframe!==
void 0)k.wireframe=a.wireframe;if(a.vertexColors!==void 0)if(a.vertexColors=="face")k.vertexColors=THREE.FaceColors;else if(a.vertexColors)k.vertexColors=THREE.VertexColors;if(a.colorDiffuse)k.color=h(a.colorDiffuse);else if(a.DbgColor)k.color=a.DbgColor;if(a.colorSpecular)k.specular=h(a.colorSpecular);if(a.colorAmbient)k.ambient=h(a.colorAmbient);if(a.transparency)k.opacity=a.transparency;if(a.specularCoef)k.shininess=a.specularCoef;a.mapDiffuse&&b&&f(k,"map",a.mapDiffuse,a.mapDiffuseRepeat,a.mapDiffuseOffset,
a.mapDiffuseWrap);a.mapLight&&b&&f(k,"lightMap",a.mapLight,a.mapLightRepeat,a.mapLightOffset,a.mapLightWrap);a.mapNormal&&b&&f(k,"normalMap",a.mapNormal,a.mapNormalRepeat,a.mapNormalOffset,a.mapNormalWrap);a.mapSpecular&&b&&f(k,"specularMap",a.mapSpecular,a.mapSpecularRepeat,a.mapSpecularOffset,a.mapSpecularWrap);if(a.mapNormal){l=THREE.ShaderUtils.lib.normal;i=THREE.UniformsUtils.clone(l.uniforms);i.tNormal.texture=k.normalMap;if(a.mapNormalFactor)i.uNormalScale.value=a.mapNormalFactor;if(k.map){i.tDiffuse.texture=
a.shading.toLowerCase();i==="phong"?l="MeshPhongMaterial":i==="basic"&&(l="MeshBasicMaterial")}if(a.blending!==void 0&&THREE[a.blending]!==void 0)k.blending=THREE[a.blending];if(a.transparent!==void 0||a.opacity<1)k.transparent=a.transparent;if(a.depthTest!==void 0)k.depthTest=a.depthTest;if(a.depthWrite!==void 0)k.depthWrite=a.depthWrite;if(a.visible!==void 0)k.visible=a.visible;if(a.flipSided!==void 0)k.side=THREE.BackSide;if(a.doubleSided!==void 0)k.side=THREE.DoubleSide;if(a.wireframe!==void 0)k.wireframe=
a.wireframe;if(a.vertexColors!==void 0)if(a.vertexColors=="face")k.vertexColors=THREE.FaceColors;else if(a.vertexColors)k.vertexColors=THREE.VertexColors;if(a.colorDiffuse)k.color=h(a.colorDiffuse);else if(a.DbgColor)k.color=a.DbgColor;if(a.colorSpecular)k.specular=h(a.colorSpecular);if(a.colorAmbient)k.ambient=h(a.colorAmbient);if(a.transparency)k.opacity=a.transparency;if(a.specularCoef)k.shininess=a.specularCoef;a.mapDiffuse&&b&&f(k,"map",a.mapDiffuse,a.mapDiffuseRepeat,a.mapDiffuseOffset,a.mapDiffuseWrap);
a.mapLight&&b&&f(k,"lightMap",a.mapLight,a.mapLightRepeat,a.mapLightOffset,a.mapLightWrap);a.mapNormal&&b&&f(k,"normalMap",a.mapNormal,a.mapNormalRepeat,a.mapNormalOffset,a.mapNormalWrap);a.mapSpecular&&b&&f(k,"specularMap",a.mapSpecular,a.mapSpecularRepeat,a.mapSpecularOffset,a.mapSpecularWrap);if(a.mapNormal){l=THREE.ShaderUtils.lib.normal;i=THREE.UniformsUtils.clone(l.uniforms);i.tNormal.texture=k.normalMap;if(a.mapNormalFactor)i.uNormalScale.value=a.mapNormalFactor;if(k.map){i.tDiffuse.texture=
k.map;i.enableDiffuse.value=true}if(k.specularMap){i.tSpecular.texture=k.specularMap;i.enableSpecular.value=true}if(k.lightMap){i.tAO.texture=k.lightMap;i.enableAO.value=true}i.uDiffuseColor.value.setHex(k.color);i.uSpecularColor.value.setHex(k.specular);i.uAmbientColor.value.setHex(k.ambient);i.uShininess.value=k.shininess;if(k.opacity!==void 0)i.uOpacity.value=k.opacity;k=new THREE.ShaderMaterial({fragmentShader:l.fragmentShader,vertexShader:l.vertexShader,uniforms:i,lights:true,fog:true})}else k=
new THREE[l](k);if(a.DbgName!==void 0)k.name=a.DbgName;return k}};THREE.BinaryLoader=function(a){THREE.Loader.call(this,a)};THREE.BinaryLoader.prototype=Object.create(THREE.Loader.prototype);THREE.BinaryLoader.prototype.load=function(a,b,c,d){var c=c?c:this.extractUrlBase(a),d=d?d:this.extractUrlBase(a),e=this.showProgress?THREE.Loader.prototype.updateProgress:null;this.onLoadStart();this.loadAjaxJSON(this,a,b,c,d,e)};
THREE.BinaryLoader.prototype.loadAjaxJSON=function(a,b,c,d,e,f){var h=new XMLHttpRequest;h.onreadystatechange=function(){if(h.readyState==4)if(h.status==200||h.status==0){var j=JSON.parse(h.responseText);a.loadAjaxBuffers(j,c,e,d,f)}else console.error("THREE.BinaryLoader: Couldn't load ["+b+"] ["+h.status+"]")};h.open("GET",b,true);h.overrideMimeType&&h.overrideMimeType("text/plain; charset=x-user-defined");h.setRequestHeader("Content-Type","text/plain");h.send(null)};
......@@ -163,13 +163,13 @@ a,true);d.send(null);var e=new THREE.LoadingMonitor;e.addEventListener("load",fu
f;if(e){a[d].repeat.set(e[0],e[1]);if(e[0]!=1)a[d].wrapS=THREE.RepeatWrapping;if(e[1]!=1)a[d].wrapT=THREE.RepeatWrapping}h&&a[d].offset.set(h[0],h[1]);if(i){e={repeat:THREE.RepeatWrapping,mirror:THREE.MirroredRepeatWrapping};if(e[i[0]]!==void 0)a[d].wrapS=e[i[0]];if(e[i[1]]!==void 0)a[d].wrapT=e[i[1]]}var k=a[d],a=new THREE.ImageLoader;a.addEventListener("load",function(a){a=a.content;if(!j(a.width)||!j(a.height)){var b=l(a.width),c=l(a.height);k.image=document.createElement("canvas");k.image.width=
b;k.image.height=c;k.image.getContext("2d").drawImage(a,0,0,b,c)}else k.image=a;k.needsUpdate=true});a.crossOrigin=c.crossOrigin;a.load(c.path+"/"+f);b&&b.add(a)},i=function(a){return(a[0]*255<<16)+(a[1]*255<<8)+a[2]*255},m="MeshLambertMaterial",n={color:15658734,opacity:1,map:null,lightMap:null,normalMap:null,wireframe:false};if(h.shading){var q=h.shading.toLowerCase();q==="phong"?m="MeshPhongMaterial":q==="basic"&&(m="MeshBasicMaterial")}if(h.blending!==void 0&&THREE[h.blending]!==void 0)n.blending=
THREE[h.blending];if(h.transparent!==void 0||h.opacity<1)n.transparent=h.transparent;if(h.depthTest!==void 0)n.depthTest=h.depthTest;if(h.depthWrite!==void 0)n.depthWrite=h.depthWrite;if(h.vertexColors!==void 0)if(h.vertexColors=="face")n.vertexColors=THREE.FaceColors;else if(h.vertexColors)n.vertexColors=THREE.VertexColors;if(h.colorDiffuse)n.color=i(h.colorDiffuse);else if(h.DbgColor)n.color=h.DbgColor;if(h.colorSpecular)n.specular=i(h.colorSpecular);if(h.colorAmbient)n.ambient=i(h.colorAmbient);
if(h.transparency)n.opacity=h.transparency;if(h.specularCoef)n.shininess=h.specularCoef;if(h.wireframe!==void 0)n.wireframe=h.wireframe;h.mapDiffuse&&k(n,"map",h.mapDiffuse,h.mapDiffuseRepeat,h.mapDiffuseOffset,h.mapDiffuseWrap);h.mapLight&&k(n,"lightMap",h.mapLight,h.mapLightRepeat,h.mapLightOffset,h.mapLightWrap);h.mapNormal&&k(n,"normalMap",h.mapNormal,h.mapNormalRepeat,h.mapNormalOffset,h.mapNormalWrap);h.mapSpecular&&k(n,"specularMap",h.mapSpecular,h.mapSpecularRepeat,h.mapSpecularOffset,h.mapSpecularWrap);
if(h.mapNormal){k=THREE.ShaderUtils.lib.normal;i=THREE.UniformsUtils.clone(k.uniforms);i.tNormal.texture=n.normalMap;if(h.mapNormalFactor)i.uNormalScale.value=h.mapNormalFactor;if(n.map){i.tDiffuse.texture=n.map;i.enableDiffuse.value=true}if(n.specularMap){i.tSpecular.texture=n.specularMap;i.enableSpecular.value=true}if(n.lightMap){i.tAO.texture=n.lightMap;i.enableAO.value=true}i.uDiffuseColor.value.setHex(n.color);i.uSpecularColor.value.setHex(n.specular);i.uAmbientColor.value.setHex(n.ambient);
i.uShininess.value=n.shininess;if(n.opacity!==void 0)i.uOpacity.value=n.opacity;n=new THREE.ShaderMaterial({fragmentShader:k.fragmentShader,vertexShader:k.vertexShader,uniforms:i,lights:true,fog:true})}else n=new THREE[m](n);if(h.DbgName!==void 0)n.name=h.DbgName;d.materials[f]=n}}var h=a.faces,u=a.vertices,n=a.normals,k=a.colors,i=0;if(a.uvs)for(f=0;f<a.uvs.length;f++)a.uvs[f].length&&i++;for(f=0;f<i;f++){d.faceUvs[f]=[];d.faceVertexUvs[f]=[]}m=0;for(q=u.length;m<q;){var o=new THREE.Vector3;o.x=
u[m++]*e;o.y=u[m++]*e;o.z=u[m++]*e;d.vertices.push(o)}m=0;for(q=h.length;m<q;){var r=h[m++],p=r&2,f=r&4,x=r&8,w=r&16,u=r&32,H=r&64,o=r&128;if(r&1){r=new THREE.Face4;r.a=h[m++];r.b=h[m++];r.c=h[m++];r.d=h[m++];var v=4}else{r=new THREE.Face3;r.a=h[m++];r.b=h[m++];r.c=h[m++];v=3}if(p){p=h[m++];r.materialIndex=p}var E=d.faces.length;if(f)for(f=0;f<i;f++){var A=a.uvs[f],p=h[m++],G=A[p*2],p=A[p*2+1];d.faceUvs[f][E]=new THREE.UV(G,p)}if(x)for(f=0;f<i;f++){for(var A=a.uvs[f],x=[],C=0;C<v;C++){p=h[m++];G=
A[p*2];p=A[p*2+1];x[C]=new THREE.UV(G,p)}d.faceVertexUvs[f][E]=x}if(w){w=h[m++]*3;p=new THREE.Vector3;p.x=n[w++];p.y=n[w++];p.z=n[w];r.normal=p}if(u)for(f=0;f<v;f++){w=h[m++]*3;p=new THREE.Vector3;p.x=n[w++];p.y=n[w++];p.z=n[w];r.vertexNormals.push(p)}if(H){u=h[m++];r.color=new THREE.Color(k[u])}if(o)for(f=0;f<v;f++){u=h[m++];r.vertexColors.push(new THREE.Color(k[u]))}d.faces.push(r)}if(a.skinWeights){f=0;for(h=a.skinWeights.length;f<h;f=f+2)d.skinWeights.push(new THREE.Vector4(a.skinWeights[f],a.skinWeights[f+
1],0,0))}if(a.skinIndices){f=0;for(h=a.skinIndices.length;f<h;f=f+2){n=0;d.skinIndices.push(new THREE.Vector4(a.skinIndices[f],a.skinIndices[f+1],n,0))}}d.bones=a.bones;d.animation=a.animation;if(a.morphTargets){f=0;for(h=a.morphTargets.length;f<h;f++){d.morphTargets[f]={};d.morphTargets[f].name=a.morphTargets[f].name;d.morphTargets[f].vertices=[];n=d.morphTargets[f].vertices;k=a.morphTargets[f].vertices;p=0;for(i=k.length;p<i;p=p+3){o=new THREE.Vector3;o.x=k[p]*e;o.y=k[p+1]*e;o.z=k[p+2]*e;n.push(o)}}}if(a.morphColors){f=
0;for(h=a.morphColors.length;f<h;f++){d.morphColors[f]={};d.morphColors[f].name=a.morphColors[f].name;d.morphColors[f].colors=[];e=d.morphColors[f].colors;k=a.morphColors[f].colors;n=0;for(i=k.length;n<i;n=n+3){m=new THREE.Color(16755200);m.setRGB(k[n],k[n+1],k[n+2]);e.push(m)}}}d.computeCentroids();d.computeFaceNormals();return d}};
if(h.transparency)n.opacity=h.transparency;if(h.specularCoef)n.shininess=h.specularCoef;if(h.visible!==void 0)n.visible=h.visible;if(h.flipSided!==void 0)n.side=THREE.BackSide;if(h.doubleSided!==void 0)n.side=THREE.DoubleSide;if(h.wireframe!==void 0)n.wireframe=h.wireframe;h.mapDiffuse&&k(n,"map",h.mapDiffuse,h.mapDiffuseRepeat,h.mapDiffuseOffset,h.mapDiffuseWrap);h.mapLight&&k(n,"lightMap",h.mapLight,h.mapLightRepeat,h.mapLightOffset,h.mapLightWrap);h.mapNormal&&k(n,"normalMap",h.mapNormal,h.mapNormalRepeat,
h.mapNormalOffset,h.mapNormalWrap);h.mapSpecular&&k(n,"specularMap",h.mapSpecular,h.mapSpecularRepeat,h.mapSpecularOffset,h.mapSpecularWrap);if(h.mapNormal){k=THREE.ShaderUtils.lib.normal;i=THREE.UniformsUtils.clone(k.uniforms);i.tNormal.texture=n.normalMap;if(h.mapNormalFactor)i.uNormalScale.value=h.mapNormalFactor;if(n.map){i.tDiffuse.texture=n.map;i.enableDiffuse.value=true}if(n.specularMap){i.tSpecular.texture=n.specularMap;i.enableSpecular.value=true}if(n.lightMap){i.tAO.texture=n.lightMap;i.enableAO.value=
true}i.uDiffuseColor.value.setHex(n.color);i.uSpecularColor.value.setHex(n.specular);i.uAmbientColor.value.setHex(n.ambient);i.uShininess.value=n.shininess;if(n.opacity!==void 0)i.uOpacity.value=n.opacity;n=new THREE.ShaderMaterial({fragmentShader:k.fragmentShader,vertexShader:k.vertexShader,uniforms:i,lights:true,fog:true})}else n=new THREE[m](n);if(h.DbgName!==void 0)n.name=h.DbgName;d.materials[f]=n}}var h=a.faces,u=a.vertices,n=a.normals,k=a.colors,i=0;if(a.uvs)for(f=0;f<a.uvs.length;f++)a.uvs[f].length&&
i++;for(f=0;f<i;f++){d.faceUvs[f]=[];d.faceVertexUvs[f]=[]}m=0;for(q=u.length;m<q;){var o=new THREE.Vector3;o.x=u[m++]*e;o.y=u[m++]*e;o.z=u[m++]*e;d.vertices.push(o)}m=0;for(q=h.length;m<q;){var r=h[m++],p=r&2,f=r&4,x=r&8,w=r&16,u=r&32,H=r&64,o=r&128;if(r&1){r=new THREE.Face4;r.a=h[m++];r.b=h[m++];r.c=h[m++];r.d=h[m++];var v=4}else{r=new THREE.Face3;r.a=h[m++];r.b=h[m++];r.c=h[m++];v=3}if(p){p=h[m++];r.materialIndex=p}var E=d.faces.length;if(f)for(f=0;f<i;f++){var A=a.uvs[f],p=h[m++],G=A[p*2],p=A[p*
2+1];d.faceUvs[f][E]=new THREE.UV(G,p)}if(x)for(f=0;f<i;f++){for(var A=a.uvs[f],x=[],C=0;C<v;C++){p=h[m++];G=A[p*2];p=A[p*2+1];x[C]=new THREE.UV(G,p)}d.faceVertexUvs[f][E]=x}if(w){w=h[m++]*3;p=new THREE.Vector3;p.x=n[w++];p.y=n[w++];p.z=n[w];r.normal=p}if(u)for(f=0;f<v;f++){w=h[m++]*3;p=new THREE.Vector3;p.x=n[w++];p.y=n[w++];p.z=n[w];r.vertexNormals.push(p)}if(H){u=h[m++];r.color=new THREE.Color(k[u])}if(o)for(f=0;f<v;f++){u=h[m++];r.vertexColors.push(new THREE.Color(k[u]))}d.faces.push(r)}if(a.skinWeights){f=
0;for(h=a.skinWeights.length;f<h;f=f+2)d.skinWeights.push(new THREE.Vector4(a.skinWeights[f],a.skinWeights[f+1],0,0))}if(a.skinIndices){f=0;for(h=a.skinIndices.length;f<h;f=f+2){n=0;d.skinIndices.push(new THREE.Vector4(a.skinIndices[f],a.skinIndices[f+1],n,0))}}d.bones=a.bones;d.animation=a.animation;if(a.morphTargets){f=0;for(h=a.morphTargets.length;f<h;f++){d.morphTargets[f]={};d.morphTargets[f].name=a.morphTargets[f].name;d.morphTargets[f].vertices=[];n=d.morphTargets[f].vertices;k=a.morphTargets[f].vertices;
p=0;for(i=k.length;p<i;p=p+3){o=new THREE.Vector3;o.x=k[p]*e;o.y=k[p+1]*e;o.z=k[p+2]*e;n.push(o)}}}if(a.morphColors){f=0;for(h=a.morphColors.length;f<h;f++){d.morphColors[f]={};d.morphColors[f].name=a.morphColors[f].name;d.morphColors[f].colors=[];e=d.morphColors[f].colors;k=a.morphColors[f].colors;n=0;for(i=k.length;n<i;n=n+3){m=new THREE.Color(16755200);m.setRGB(k[n],k[n+1],k[n+2]);e.push(m)}}}d.computeCentroids();d.computeFaceNormals();return d}};
THREE.SceneLoader=function(){this.onLoadStart=function(){};this.onLoadProgress=function(){};this.onLoadComplete=function(){};this.callbackSync=function(){};this.callbackProgress=function(){}};THREE.SceneLoader.prototype.constructor=THREE.SceneLoader;
THREE.SceneLoader.prototype.load=function(a,b){var c=this,d=new XMLHttpRequest;d.onreadystatechange=function(){if(d.readyState===4)if(d.status===200||d.status===0){var e=JSON.parse(d.responseText);c.createScene(e,b,a)}else console.error("THREE.SceneLoader: Couldn't load ["+a+"] ["+d.status+"]")};d.open("GET",a,true);d.overrideMimeType&&d.overrideMimeType("text/plain; charset=x-user-defined");d.setRequestHeader("Content-Type","text/plain");d.send(null)};
THREE.SceneLoader.prototype.createScene=function(a,b,c){function d(a,b){return b=="relativeToHTML"?a:k+"/"+a}function e(a,b){var c;for(n in b)if(N.objects[n]===void 0){p=b[n];if(p.geometry!==void 0){if(I=N.geometries[p.geometry]){c=false;U=N.materials[p.materials[0]];(c=U instanceof THREE.ShaderMaterial)&&I.computeTangents();v=p.position;E=p.rotation;A=p.quaternion;G=p.scale;x=p.matrix;A=0;p.materials.length==0&&(U=new THREE.MeshFaceMaterial);p.materials.length>1&&(U=new THREE.MeshFaceMaterial);c=
......
......@@ -268,6 +268,24 @@ THREE.GeometryLoader.prototype = {
}
if ( m.visible !== undefined ) {
mpars.visible = m.visible;
}
if ( m.flipSided !== undefined ) {
mpars.side = THREE.BackSide;
}
if ( m.doubleSided !== undefined ) {
mpars.side = THREE.DoubleSide;
}
if ( m.wireframe !== undefined ) {
mpars.wireframe = m.wireframe;
......
......@@ -231,15 +231,15 @@ THREE.Loader.prototype = {
}
if ( m.doubleSided !== undefined ) {
if ( m.flipSided !== undefined ) {
mpars.doubleSided = m.doubleSided;
mpars.side = THREE.BackSide;
}
if ( m.flipSided !== undefined ) {
if ( m.doubleSided !== undefined ) {
mpars.flipSided = m.flipSided;
mpars.side = THREE.DoubleSide;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册