diff --git a/examples/webgl_geometry_subdivison.html b/examples/webgl_geometry_subdivison.html index 97b55b70..cc1d072f 100644 --- a/examples/webgl_geometry_subdivison.html +++ b/examples/webgl_geometry_subdivison.html @@ -25,6 +25,7 @@ + @@ -79,9 +80,17 @@ {type: 'CubeGeometry', args: [ 200, 200, 200, 2, 2, 2, materials ] }, {type: 'TorusGeometry', args: [ 100, 60, 4, 8, Math.PI*2 ] }, - {type: 'SphereGeometry', args: [ 100, 3, 3 ] }, - {type: 'IcosahedronGeometry', args: [ 1 ], scale: 200 }, + {type: 'TorusKnotGeometry', args: [ ], scale:0.25, meshScale:4 }, + {type: 'SphereGeometry', args: [ 100, 3, 3 ], meshScale:2 }, + {type: 'IcosahedronGeometry', args: [ 1 ], scale: 100, meshScale:2 }, {type: 'CylinderGeometry', args: [ 25, 75, 200, 8, 3 ]} , + {type: 'OctahedronGeometry', args: [200, 0], meshScale:2 }, + {type: 'LatheGeometry', args: [ [ + new THREE.Vector3(0,0,0), + new THREE.Vector3(0,50,50), + new THREE.Vector3(0,0,100), + new THREE.Vector3(0,50,150), + new THREE.Vector3(0,0,200) ] ]}, {type: 'TextGeometry', args: ['&', { size: 200, height: 50, @@ -91,17 +100,27 @@ }]}, {type: 'PlaneGeometry', args: [ 200, 200, 4, 4 ] } - ]; if (location.protocol !== "file:") { var loader = new THREE.JSONLoader(); loader.load( 'obj/WaltHeadLo.js', function ( geometry ) { - geometriesParams.push({type: 'WaltHead', args: [ ], scale: 6 }); + geometriesParams.push({type: 'WaltHead', args: [ ], meshScale: 6 }); THREE.WaltHead = function() { - return geometry; + return THREE.GeometryUtils.clone(geometry); + }; + + }); + + var loader2 = new THREE.JSONLoader(); + loader2.load( 'obj/Suzanne.js', function ( geometry ) { + + geometriesParams.push({type: 'Suzanne', args: [ ], scale: 100, meshScale:2 }); + + THREE.Suzanne = function() { + return THREE.GeometryUtils.clone(geometry); }; } ); @@ -155,6 +174,12 @@ var params = geometriesParams[ geometryIndex ]; geometry = createSomething( THREE[ params.type ], params.args ); + + // Scale Geometry + if (params.scale) { + var scaler = new THREE.ScaleModifier( new THREE.Vector3(params.scale,params.scale,params.scale)); + scaler.modify(geometry); + } // Cloning original geometry for debuging @@ -274,11 +299,11 @@ cube = new THREE.Mesh( smooth, meshmaterials ); - var toscale = params.scale ? params.scale : 1; - - cube.scale.x = toscale; - cube.scale.y = toscale; - cube.scale.z = toscale; + var meshScale = params.meshScale ? params.meshScale : 1; + + cube.scale.x = meshScale; + cube.scale.y = meshScale; + cube.scale.z = meshScale; scene.add( cube ); diff --git a/src/extras/modifiers/ScaleModifier.js b/src/extras/modifiers/ScaleModifier.js new file mode 100644 index 00000000..d4af5793 --- /dev/null +++ b/src/extras/modifiers/ScaleModifier.js @@ -0,0 +1,28 @@ +/* + * @author zz85 / http://twitter.com/blurspline + * + * Scales a geometry by vector + */ + +// Scale from 0,0,0 with (x,y,z) +THREE.ScaleModifier = function( scale /*Vector3*/ ) { + this.scale = scale; +}; + +THREE.ScaleModifier.prototype.constructor = THREE.ScaleModifier; + +THREE.ScaleModifier.prototype.modify = function ( geometry ) { + var i,il; + var scale = this.scale, v; + for (i=0,il=geometry.vertices.length;i2) { - + // TODO } F.divideScalar(f); diff --git a/utils/build.py b/utils/build.py index 432906a7..aa53f2a1 100644 --- a/utils/build.py +++ b/utils/build.py @@ -117,6 +117,7 @@ EXTRAS_FILES = [ 'extras/geometries/TorusGeometry.js', 'extras/geometries/TorusKnotGeometry.js', 'extras/modifiers/SubdivisionModifier.js', +'extras/modifiers/ScaleModifier.js', 'extras/loaders/Loader.js', 'extras/loaders/BinaryLoader.js', 'extras/loaders/ColladaLoader.js',