From fe8e1b881fb2a538610b97365a72f2257c435369 Mon Sep 17 00:00:00 2001 From: Erik Kitson Date: Thu, 24 Nov 2011 10:21:12 -0800 Subject: [PATCH 1/2] Added option to ColladaLoader to recenter all Geometry so that they are centered around the local origin of their containing Mesh. --- src/extras/GeometryUtils.js | 2 ++ src/extras/loaders/ColladaLoader.js | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/extras/GeometryUtils.js b/src/extras/GeometryUtils.js index 1512139e..d2a31e89 100644 --- a/src/extras/GeometryUtils.js +++ b/src/extras/GeometryUtils.js @@ -488,6 +488,8 @@ THREE.GeometryUtils = { geometry.computeBoundingBox(); + return new THREE.Vector3( dx, dy, dz ); + } diff --git a/src/extras/loaders/ColladaLoader.js b/src/extras/loaders/ColladaLoader.js index a0d28fdb..52c156b4 100644 --- a/src/extras/loaders/ColladaLoader.js +++ b/src/extras/loaders/ColladaLoader.js @@ -28,6 +28,10 @@ THREE.ColladaLoader = function () { var preferredShading = THREE.SmoothShading; var options = { + // Force Geometry to always be centered at the local origin of the + // containing Mesh. + centerGeometry: false, + // Axis conversion is done for geometries, animations, and controllers. // If we ever pull cameras or lights out of the COLLADA file, they'll // need extra work. @@ -795,6 +799,14 @@ THREE.ColladaLoader = function () { obj.useQuaternion = true; obj.scale = props[ 2 ]; + if ( options.centerGeometry && obj.geometry ) { + + var delta = THREE.GeometryUtils.center( obj.geometry ); + obj.quaternion.multiplyVector3( delta.multiplySelf( obj.scale ) ); + obj.position.subSelf( delta ); + + } + for ( i = 0; i < node.nodes.length; i ++ ) { obj.add( createSceneGraph( node.nodes[i], node ) ); From 298afecf8049c9a1870d35069d468812cc2cacc0 Mon Sep 17 00:00:00 2001 From: Erik Kitson Date: Thu, 24 Nov 2011 10:22:39 -0800 Subject: [PATCH 2/2] Added progress callback to ColladaLoader. --- src/extras/loaders/ColladaLoader.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/extras/loaders/ColladaLoader.js b/src/extras/loaders/ColladaLoader.js index 52c156b4..da0baf5a 100644 --- a/src/extras/loaders/ColladaLoader.js +++ b/src/extras/loaders/ColladaLoader.js @@ -49,7 +49,9 @@ THREE.ColladaLoader = function () { var TO_RADIANS = Math.PI / 180; - function load ( url, readyCallback ) { + function load ( url, readyCallback, progressCallback ) { + + var length = 0; if ( document.implementation && document.implementation.createDocument ) { @@ -83,6 +85,20 @@ THREE.ColladaLoader = function () { } + } else if ( req.readyState == 3 ) { + + if ( progressCallback ) { + + if ( length == 0 ) { + + length = req.getResponseHeader( "Content-Length" ); + + } + + progressCallback( { total: length, loaded: req.responseText.length } ); + + } + } }