From f89264235114337db5d1a7c54707d2a85a81ef2f Mon Sep 17 00:00:00 2001 From: alteredq Date: Wed, 24 Oct 2012 19:32:33 +0200 Subject: [PATCH] Got rid of exceptions in scene loader example. Because ColladaLoader is weird: load is expecting progress callback as second argument and morph is created as SkinnedMesh object. --- build/three.js | 14 +++++++++++++- build/three.min.js | 32 ++++++++++++++++---------------- examples/webgl_loader_scene.html | 14 +++++++++----- src/loaders/SceneLoader.js | 14 +++++++++++++- 4 files changed, 51 insertions(+), 23 deletions(-) diff --git a/build/three.js b/build/three.js index 0f7e93ba44..e82c52d484 100644 --- a/build/three.js +++ b/build/three.js @@ -9141,7 +9141,19 @@ THREE.SceneLoader.prototype.parse = function ( json, callbackFinished, url ) { } else { - loader.load( get_url( o.url, data.urlBaseType ), create_callback_hierachy( dd, parent, material, o ), loaderParameters ); + // ColladaLoader + + if ( loader.options ) { + + loader.load( get_url( o.url, data.urlBaseType ), create_callback_hierachy( dd, parent, material, o ) ); + + // OBJLoader + + } else { + + loader.load( get_url( o.url, data.urlBaseType ), create_callback_hierachy( dd, parent, material, o ), loaderParameters ); + + } } diff --git a/build/three.min.js b/build/three.min.js index b245c3f82d..a76f8cb485 100644 --- a/build/three.min.js +++ b/build/three.min.js @@ -189,22 +189,22 @@ d.computeFaceNormals();return d}};THREE.SceneLoader=function(){this.onLoadStart= THREE.SceneLoader.prototype.load=function(a,b){var c=this,d=new XMLHttpRequest;d.onreadystatechange=function(){if(4===d.readyState)if(200===d.status||0===d.status){var e=JSON.parse(d.responseText);c.parse(e,b,a)}else console.error("THREE.SceneLoader: Couldn't load ["+a+"] ["+d.status+"]")};d.open("GET",a,!0);d.send(null)};THREE.SceneLoader.prototype.addGeometryHandler=function(a,b){this.geometryHandlerMap[a]={loaderClass:b}}; THREE.SceneLoader.prototype.addHierarchyHandler=function(a,b){this.hierarchyHandlerMap[a]={loaderClass:b}}; THREE.SceneLoader.prototype.parse=function(a,b,c){function d(a,b){return"relativeToHTML"==b?a:n+"/"+a}function e(){f(M.scene,da.objects)}function f(a,b){for(var c in b)if(void 0===M.objects[c]){var e=b[c],g=null;if(e.type&&e.type in m.hierarchyHandlerMap&&void 0===e.loading){var i={},j;for(j in r)"type"!==j&&"url"!==j&&(i[j]=r[j]);J=M.materials[e.materials[0]];e.loading=!0;var l=m.hierarchyHandlerMap[e.type].loaderObject;l.addEventListener?(l.addEventListener("load",h(c,a,J,e)),l.load(d(e.url,da.urlBaseType))): -l.load(d(e.url,da.urlBaseType),h(c,a,J,e),i)}else if(void 0!==e.geometry){if(H=M.geometries[e.geometry])g=!1,J=M.materials[e.materials[0]],(g=J instanceof THREE.ShaderMaterial)&&H.computeTangents(),u=e.position,t=e.rotation,E=e.quaternion,A=e.scale,s=e.matrix,E=0,0===e.materials.length&&(J=new THREE.MeshFaceMaterial),1s.parameters.opacity&&(s.parameters.transparent=!0);s.parameters.normalMap?(q=THREE.ShaderUtils.lib.normal,S=THREE.UniformsUtils.clone(q.uniforms),l= -s.parameters.color,C=s.parameters.specular,K=s.parameters.ambient,o=s.parameters.shininess,S.tNormal.value=M.textures[s.parameters.normalMap],s.parameters.normalScale&&S.uNormalScale.value.set(s.parameters.normalScale[0],s.parameters.normalScale[1]),s.parameters.map&&(S.tDiffuse.value=s.parameters.map,S.enableDiffuse.value=!0),s.parameters.envMap&&(S.tCube.value=s.parameters.envMap,S.enableReflection.value=!0,S.uReflectivity.value=s.parameters.reflectivity),s.parameters.lightMap&&(S.tAO.value=s.parameters.lightMap, +l.options?l.load(d(e.url,da.urlBaseType),h(c,a,J,e)):l.load(d(e.url,da.urlBaseType),h(c,a,J,e),i)}else if(void 0!==e.geometry){if(H=M.geometries[e.geometry])g=!1,J=M.materials[e.materials[0]],(g=J instanceof THREE.ShaderMaterial)&&H.computeTangents(),u=e.position,t=e.rotation,E=e.quaternion,A=e.scale,s=e.matrix,E=0,0===e.materials.length&&(J=new THREE.MeshFaceMaterial),1s.parameters.opacity&&(s.parameters.transparent=!0);s.parameters.normalMap?(q=THREE.ShaderUtils.lib.normal,S=THREE.UniformsUtils.clone(q.uniforms), +l=s.parameters.color,C=s.parameters.specular,K=s.parameters.ambient,o=s.parameters.shininess,S.tNormal.value=M.textures[s.parameters.normalMap],s.parameters.normalScale&&S.uNormalScale.value.set(s.parameters.normalScale[0],s.parameters.normalScale[1]),s.parameters.map&&(S.tDiffuse.value=s.parameters.map,S.enableDiffuse.value=!0),s.parameters.envMap&&(S.tCube.value=s.parameters.envMap,S.enableReflection.value=!0,S.uReflectivity.value=s.parameters.reflectivity),s.parameters.lightMap&&(S.tAO.value=s.parameters.lightMap, S.enableAO.value=!0),s.parameters.specularMap&&(S.tSpecular.value=M.textures[s.parameters.specularMap],S.enableSpecular.value=!0),s.parameters.displacementMap&&(S.tDisplacement.value=M.textures[s.parameters.displacementMap],S.enableDisplacement.value=!0,S.uDisplacementBias.value=s.parameters.displacementBias,S.uDisplacementScale.value=s.parameters.displacementScale),S.uDiffuseColor.value.setHex(l),S.uSpecularColor.value.setHex(C),S.uAmbientColor.value.setHex(K),S.uShininess.value=o,s.parameters.opacity&& (S.uOpacity.value=s.parameters.opacity),J=new THREE.ShaderMaterial({fragmentShader:q.fragmentShader,vertexShader:q.vertexShader,uniforms:S,lights:!0,fog:!0})):J=new THREE[s.type](s.parameters);M.materials[p]=J}e();M.cameras&&da.defaults.camera&&(M.currentCamera=M.cameras[da.defaults.camera]);M.fogs&&da.defaults.fog&&(M.scene.fog=M.fogs[da.defaults.fog]);v=da.defaults.bgcolor;M.bgColor=new THREE.Color;M.bgColor.setRGB(v[0],v[1],v[2]);M.bgColorAlpha=da.defaults.bgalpha;m.callbackSync(M);j()}; 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=!0;b.dispatchEvent({type:"load",content:a})},!1);c.addEventListener("error",function(){b.dispatchEvent({type:"error",message:"Couldn't load URL ["+a+"]"})},!1);b.crossOrigin&&(c.crossOrigin=b.crossOrigin);c.src=a}}; diff --git a/examples/webgl_loader_scene.html b/examples/webgl_loader_scene.html index 465f5ba956..d4f915756d 100644 --- a/examples/webgl_loader_scene.html +++ b/examples/webgl_loader_scene.html @@ -331,13 +331,17 @@ if ( object instanceof THREE.SkinnedMesh ) { - THREE.AnimationHandler.add( object.geometry.animation ); + if ( object.geometry.animation ) { - var animation = new THREE.Animation( object, object.geometry.animation.name ); - animation.JITCompile = false; - animation.interpolationType = THREE.AnimationHandler.LINEAR; + THREE.AnimationHandler.add( object.geometry.animation ); - animation.play(); + var animation = new THREE.Animation( object, object.geometry.animation.name ); + animation.JITCompile = false; + animation.interpolationType = THREE.AnimationHandler.LINEAR; + + animation.play(); + + } } diff --git a/src/loaders/SceneLoader.js b/src/loaders/SceneLoader.js index 9eaba73886..cc6d8677e3 100644 --- a/src/loaders/SceneLoader.js +++ b/src/loaders/SceneLoader.js @@ -204,7 +204,19 @@ THREE.SceneLoader.prototype.parse = function ( json, callbackFinished, url ) { } else { - loader.load( get_url( o.url, data.urlBaseType ), create_callback_hierachy( dd, parent, material, o ), loaderParameters ); + // ColladaLoader + + if ( loader.options ) { + + loader.load( get_url( o.url, data.urlBaseType ), create_callback_hierachy( dd, parent, material, o ) ); + + // OBJLoader + + } else { + + loader.load( get_url( o.url, data.urlBaseType ), create_callback_hierachy( dd, parent, material, o ), loaderParameters ); + + } } -- GitLab