提交 6de11c6e 编写于 作者: A alteredq

Added handling of bump mapping to SceneLoader.

上级 c9224d03
......@@ -195,8 +195,8 @@ J.lights[p]=t}for(n in C.fogs){p=C.fogs[n];p.type==="linear"?M=new THREE.Fog(0,p
"cylinder"){F=new THREE.CylinderGeometry(n.topRad,n.botRad,n.height,n.radSegs,n.heightSegs);J.geometries[j]=F}else if(n.type==="torus"){F=new THREE.TorusGeometry(n.radius,n.tube,n.segmentsR,n.segmentsT);J.geometries[j]=F}else if(n.type==="icosahedron"){F=new THREE.IcosahedronGeometry(n.radius,n.subdivisions);J.geometries[j]=F}else if(n.type==="bin_mesh")c.load(d(n.url,C.urlBaseType),e(j));else if(n.type==="ascii_mesh")E.load(d(n.url,C.urlBaseType),e(j));else if(n.type==="embedded_mesh"){n=C.embeds[n.id];
n.metadata=C.metadata;n&&E.createModel(n,g(j),"")}}for(s in C.textures){j=C.textures[s];if(j.url instanceof Array){N=N+j.url.length;for(n=0;n<j.url.length;n++)i.onLoadStart()}else{N=N+1;i.onLoadStart()}}Y=N;for(s in C.textures){j=C.textures[s];if(j.mapping!==void 0&&THREE[j.mapping]!==void 0)j.mapping=new THREE[j.mapping];if(j.url instanceof Array){n=j.url.length;M=[];for(c=0;c<n;c++)M[c]=d(j.url[c],C.urlBaseType);n=THREE.ImageUtils.loadTextureCube(M,j.mapping,a(n))}else{n=THREE.ImageUtils.loadTexture(d(j.url,
C.urlBaseType),j.mapping,a(1));if(THREE[j.minFilter]!==void 0)n.minFilter=THREE[j.minFilter];if(THREE[j.magFilter]!==void 0)n.magFilter=THREE[j.magFilter];if(j.anisotropy)n.anisotropy=j.anisotropy;if(j.repeat){n.repeat.set(j.repeat[0],j.repeat[1]);if(j.repeat[0]!==1)n.wrapS=THREE.RepeatWrapping;if(j.repeat[1]!==1)n.wrapT=THREE.RepeatWrapping}j.offset&&n.offset.set(j.offset[0],j.offset[1]);if(j.wrap){M={repeat:THREE.RepeatWrapping,mirror:THREE.MirroredRepeatWrapping};if(M[j.wrap[0]]!==void 0)n.wrapS=
M[j.wrap[0]];if(M[j.wrap[1]]!==void 0)n.wrapT=M[j.wrap[1]]}}J.textures[s]=n}for(o in C.materials){u=C.materials[o];for(I in u.parameters)if(I==="envMap"||I==="map"||I==="lightMap")u.parameters[I]=J.textures[u.parameters[I]];else if(I==="shading")u.parameters[I]=u.parameters[I]=="flat"?THREE.FlatShading:THREE.SmoothShading;else if(I==="blending")u.parameters[I]=u.parameters[I]in THREE?THREE[u.parameters[I]]:THREE.NormalBlending;else if(I==="combine")u.parameters[I]=u.parameters[I]=="MixOperation"?
THREE.MixOperation:THREE.MultiplyOperation;else if(I==="vertexColors")if(u.parameters[I]=="face")u.parameters[I]=THREE.FaceColors;else if(u.parameters[I])u.parameters[I]=THREE.VertexColors;if(u.parameters.opacity!==void 0&&u.parameters.opacity<1)u.parameters.transparent=true;if(u.parameters.normalMap){s=THREE.ShaderUtils.lib.normal;a=THREE.UniformsUtils.clone(s.uniforms);j=u.parameters.color;n=u.parameters.specular;M=u.parameters.ambient;c=u.parameters.shininess;a.tNormal.value=J.textures[u.parameters.normalMap];
M[j.wrap[0]];if(M[j.wrap[1]]!==void 0)n.wrapT=M[j.wrap[1]]}}J.textures[s]=n}for(o in C.materials){u=C.materials[o];for(I in u.parameters)if(I==="envMap"||I==="map"||I==="lightMap"||I==="bumpMap")u.parameters[I]=J.textures[u.parameters[I]];else if(I==="shading")u.parameters[I]=u.parameters[I]=="flat"?THREE.FlatShading:THREE.SmoothShading;else if(I==="blending")u.parameters[I]=u.parameters[I]in THREE?THREE[u.parameters[I]]:THREE.NormalBlending;else if(I==="combine")u.parameters[I]=u.parameters[I]==
"MixOperation"?THREE.MixOperation:THREE.MultiplyOperation;else if(I==="vertexColors")if(u.parameters[I]=="face")u.parameters[I]=THREE.FaceColors;else if(u.parameters[I])u.parameters[I]=THREE.VertexColors;if(u.parameters.opacity!==void 0&&u.parameters.opacity<1)u.parameters.transparent=true;if(u.parameters.normalMap){s=THREE.ShaderUtils.lib.normal;a=THREE.UniformsUtils.clone(s.uniforms);j=u.parameters.color;n=u.parameters.specular;M=u.parameters.ambient;c=u.parameters.shininess;a.tNormal.value=J.textures[u.parameters.normalMap];
u.parameters.normalMapFactor&&a.uNormalScale.value.set(u.parameters.normalMapFactor,u.parameters.normalMapFactor);if(u.parameters.map){a.tDiffuse.value=u.parameters.map;a.enableDiffuse.value=true}if(u.parameters.lightMap){a.tAO.value=u.parameters.lightMap;a.enableAO.value=true}if(u.parameters.specularMap){a.tSpecular.value=J.textures[u.parameters.specularMap];a.enableSpecular.value=true}a.uDiffuseColor.value.setHex(j);a.uSpecularColor.value.setHex(n);a.uAmbientColor.value.setHex(M);a.uShininess.value=
c;if(u.parameters.opacity)a.uOpacity.value=u.parameters.opacity;L=new THREE.ShaderMaterial({fragmentShader:s.fragmentShader,vertexShader:s.vertexShader,uniforms:a,lights:true,fog:true})}else L=new THREE[u.type](u.parameters);J.materials[o]=L}f(J.scene,C.objects);i.callbackSync(J);h()};THREE.TextureLoader=function(){THREE.EventTarget.call(this);this.crossOrigin=null};
THREE.TextureLoader.prototype={constructor:THREE.TextureLoader,load:function(a){var b=this,c=new Image;c.addEventListener("load",function(){var a=new THREE.Texture(c);a.needsUpdate=true;b.dispatchEvent({type:"load",content:a})},false);c.addEventListener("error",function(){b.dispatchEvent({type:"error",message:"Couldn't load URL ["+a+"]"})},false);if(b.crossOrigin)c.crossOrigin=b.crossOrigin;c.src=a}};
......
......@@ -11,7 +11,7 @@
"cube1" : {
"geometry" : "cubeNormals",
"materials": [ "lambert_red" ],
"materials": [ "phong_red" ],
"position" : [ 0, 0, 0 ],
"rotation" : [ 0, -0.3, 0 ],
"scale" : [ 1, 1, 1 ],
......@@ -336,9 +336,9 @@
"parameters": { "color": 16777215, "shading": "flat" }
},
"lambert_red": {
"type": "MeshLambertMaterial",
"parameters": { "color": 16711680 }
"phong_red": {
"type": "MeshPhongMaterial",
"parameters": { "color": 16711680, "specular": 16711680, "shininess": 25, "bumpMap": "texture_bump", "bumpScale": -0.75 }
},
"lambert_green": {
......@@ -441,6 +441,11 @@
"anisotropy": 4
},
"texture_bump": {
"url": "textures/water.jpg",
"anisotropy": 4
},
"texture_minecraft": {
"url": "textures/minecraft/grass.png",
"magFilter": "NearestFilter",
......
......@@ -676,7 +676,7 @@ THREE.SceneLoader.prototype.parse = function ( json, callbackFinished, url ) {
for ( pp in m.parameters ) {
if ( pp === "envMap" || pp === "map" || pp === "lightMap" ) {
if ( pp === "envMap" || pp === "map" || pp === "lightMap" || pp === "bumpMap" ) {
m.parameters[ pp ] = result.textures[ m.parameters[ pp ] ];
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册