ソースを参照

Moved scene loader from SceneUtils into SceneLoader.

alteredq 14 年 前
コミット
693a36f509

ファイルの差分が大きいため隠しています
+ 5 - 14
build/Three.js


ファイルの差分が大きいため隠しています
+ 5 - 14
build/custom/ThreeExtras.js


+ 3 - 1
examples/webgl_scene_test.html

@@ -304,7 +304,9 @@
 				}
 				}
 
 
 				$( "progress" ).style.display = "block";
 				$( "progress" ).style.display = "block";
-				SceneUtils.loadScene( "scenes/test_scene.js", callback_sync, callback_async, callback_progress );
+
+				var loader = new THREE.SceneLoader();
+				loader.load( "scenes/test_scene.js", callback_sync, callback_async, callback_progress );
 
 
 				$( "plus_exp" ).addEventListener( 'click', createToggle( "exp" ), false );
 				$( "plus_exp" ).addEventListener( 'click', createToggle( "exp" ), false );
 
 

+ 4 - 89
examples/webgl_scene_test_blender.html

@@ -148,95 +148,8 @@
 		</div>
 		</div>
 
 
 		<pre id="log"></pre>
 		<pre id="log"></pre>
-<!--
+
 		<script type="text/javascript" src="../build/Three.js"></script>
 		<script type="text/javascript" src="../build/Three.js"></script>
--->
-
-		<script type="text/javascript" src="../src/Three.js"></script>
-		<script type="text/javascript" src="../src/core/Color.js"></script>
-		<script type="text/javascript" src="../src/core/Vector2.js"></script>
-		<script type="text/javascript" src="../src/core/Vector3.js"></script>
-		<script type="text/javascript" src="../src/core/Vector4.js"></script>
-		<script type="text/javascript" src="../src/core/Ray.js"></script>
-		<script type="text/javascript" src="../src/core/Rectangle.js"></script>
-		<script type="text/javascript" src="../src/core/Matrix3.js"></script>
-		<script type="text/javascript" src="../src/core/Matrix4.js"></script>
-		<script type="text/javascript" src="../src/core/Object3D.js"></script>
-		<script type="text/javascript" src="../src/core/Quaternion.js"></script>
-		<script type="text/javascript" src="../src/core/Vertex.js"></script>
-		<script type="text/javascript" src="../src/core/Face3.js"></script>
-		<script type="text/javascript" src="../src/core/Face4.js"></script>
-		<script type="text/javascript" src="../src/core/UV.js"></script>
-		<script type="text/javascript" src="../src/core/Geometry.js"></script>
-		<script type="text/javascript" src="../src/core/Spline.js"></script>
-		<script type="text/javascript" src="../src/animation/AnimationHandler.js"></script>
-		<script type="text/javascript" src="../src/animation/Animation.js"></script>
-		<script type="text/javascript" src="../src/cameras/Camera.js"></script>
-		<script type="text/javascript" src="../src/lights/Light.js"></script>
-		<script type="text/javascript" src="../src/lights/AmbientLight.js"></script>
-		<script type="text/javascript" src="../src/lights/DirectionalLight.js"></script>
-		<script type="text/javascript" src="../src/lights/PointLight.js"></script>
-		<script type="text/javascript" src="../src/materials/Material.js"></script>
-		<script type="text/javascript" src="../src/materials/Mappings.js"></script>
-		<script type="text/javascript" src="../src/materials/LineBasicMaterial.js"></script>
-		<script type="text/javascript" src="../src/materials/MeshBasicMaterial.js"></script>
-		<script type="text/javascript" src="../src/materials/MeshLambertMaterial.js"></script>
-		<script type="text/javascript" src="../src/materials/MeshPhongMaterial.js"></script>
-		<script type="text/javascript" src="../src/materials/MeshDepthMaterial.js"></script>
-		<script type="text/javascript" src="../src/materials/MeshNormalMaterial.js"></script>
-		<script type="text/javascript" src="../src/materials/MeshFaceMaterial.js"></script>
-		<script type="text/javascript" src="../src/materials/MeshShaderMaterial.js"></script>
-		<script type="text/javascript" src="../src/materials/ShadowVolumeDynamicMaterial.js"></script>
-		<script type="text/javascript" src="../src/materials/ParticleBasicMaterial.js"></script>
-		<script type="text/javascript" src="../src/materials/ParticleCanvasMaterial.js"></script>
-		<script type="text/javascript" src="../src/materials/ParticleDOMMaterial.js"></script>
-		<script type="text/javascript" src="../src/materials/Texture.js"></script>
-		<script type="text/javascript" src="../src/materials/RenderTarget.js"></script>
-		<script type="text/javascript" src="../src/materials/Uniforms.js"></script>
-		<script type="text/javascript" src="../src/objects/Particle.js"></script>
-		<script type="text/javascript" src="../src/objects/ParticleSystem.js"></script>
-		<script type="text/javascript" src="../src/objects/Line.js"></script>
-		<script type="text/javascript" src="../src/objects/Mesh.js"></script>
-		<script type="text/javascript" src="../src/objects/Bone.js"></script>
-		<script type="text/javascript" src="../src/objects/SkinnedMesh.js"></script>
-		<script type="text/javascript" src="../src/objects/Ribbon.js"></script>
-		<script type="text/javascript" src="../src/objects/Sound.js"></script>
-		<script type="text/javascript" src="../src/objects/LOD.js"></script>
-		<script type="text/javascript" src="../src/objects/ShadowVolume.js"></script>
-		<script type="text/javascript" src="../src/scenes/Scene.js"></script>
-		<script type="text/javascript" src="../src/scenes/Fog.js"></script>
-		<script type="text/javascript" src="../src/scenes/FogExp2.js"></script>
-		<script type="text/javascript" src="../src/renderers/Projector.js"></script>
-		<script type="text/javascript" src="../src/renderers/DOMRenderer.js"></script>
-		<script type="text/javascript" src="../src/renderers/CanvasRenderer.js"></script>
-		<script type="text/javascript" src="../src/renderers/SVGRenderer.js"></script>
-		<script type="text/javascript" src="../src/renderers/WebGLShaders.js"></script>
-		<script type="text/javascript" src="../src/renderers/WebGLRenderer.js"></script>
-		<script type="text/javascript" src="../src/renderers/SoundRenderer.js"></script>
-		<script type="text/javascript" src="../src/renderers/renderables/RenderableVertex.js"></script>
-		<script type="text/javascript" src="../src/renderers/renderables/RenderableFace3.js"></script>
-		<script type="text/javascript" src="../src/renderers/renderables/RenderableFace4.js"></script>
-		<script type="text/javascript" src="../src/renderers/renderables/RenderableObject.js"></script>
-		<script type="text/javascript" src="../src/renderers/renderables/RenderableParticle.js"></script>
-		<script type="text/javascript" src="../src/renderers/renderables/RenderableLine.js"></script>
-		<script type="text/javascript" src="../src/extras/GeometryUtils.js"></script>
-		<script type="text/javascript" src="../src/extras/ImageUtils.js"></script>
-		<script type="text/javascript" src="../src/extras/SceneUtils.js"></script>
-		<script type="text/javascript" src="../src/extras/ShaderUtils.js"></script>
-		<script type="text/javascript" src="../src/extras/cameras/QuakeCamera.js"></script>
-		<script type="text/javascript" src="../src/extras/cameras/PathCamera.js"></script>
-		<script type="text/javascript" src="../src/extras/geometries/Cube.js"></script>
-		<script type="text/javascript" src="../src/extras/geometries/Cylinder.js"></script>
-		<script type="text/javascript" src="../src/extras/geometries/Icosahedron.js"></script>
-		<script type="text/javascript" src="../src/extras/geometries/Lathe.js"></script>
-		<script type="text/javascript" src="../src/extras/geometries/Plane.js"></script>
-		<script type="text/javascript" src="../src/extras/geometries/Sphere.js"></script>
-		<script type="text/javascript" src="../src/extras/geometries/Torus.js"></script>
-		<script type="text/javascript" src="../src/extras/geometries/TorusKnot.js"></script>
-		<script type="text/javascript" src="../src/extras/io/Loader.js"></script>
-		<script type="text/javascript" src="../src/extras/io/JSONLoader.js"></script>
-		<script type="text/javascript" src="../src/extras/io/BinaryLoader.js"></script>
-		<script type="text/javascript" src="../src/extras/objects/MarchingCubes.js"></script>
 		
 		
 		<script type="text/javascript" src="js/Detector.js"></script>
 		<script type="text/javascript" src="js/Detector.js"></script>
 		<script type="text/javascript" src="js/RequestAnimationFrame.js"></script>
 		<script type="text/javascript" src="js/RequestAnimationFrame.js"></script>
@@ -380,7 +293,9 @@
 				}
 				}
 
 
 				$( "progress" ).style.display = "block";
 				$( "progress" ).style.display = "block";
-				SceneUtils.loadScene( "obj/blenderscene/scene.js", callback_sync, callback_async, callback_progress );
+
+				var loader = new THREE.SceneLoader();
+				loader.load( "obj/blenderscene/scene.js", callback_sync, callback_async, callback_progress );
 
 
 				$( "plus_exp" ).addEventListener( 'click', createToggle( "exp" ), false );
 				$( "plus_exp" ).addEventListener( 'click', createToggle( "exp" ), false );
 
 

+ 0 - 445
src/extras/SceneUtils.js

@@ -4,451 +4,6 @@
 
 
 var SceneUtils = {
 var SceneUtils = {
 
 
-	loadScene : function( url, callback_sync, callback_async, callback_progress ) {
-
-		var worker = new Worker( url );
-		worker.postMessage( 0 );
-
-		var urlBase = THREE.Loader.prototype.extractUrlbase( url );
-		
-		worker.onmessage = function( event ) {
-
-			var dg, dm, dd, dl, dc, df, dt,
-				g, o, m, l, p, c, t, f, tt, pp,
-				geometry, material, camera, fog,
-				texture, images,
-				materials,
-				data, binLoader, jsonLoader,
-				counter_models, counter_textures,
-				total_models, total_textures,
-				result;
-
-			data = event.data;
-			binLoader = new THREE.BinaryLoader();
-			jsonLoader = new THREE.JSONLoader();
-
-			counter_models = 0;
-			counter_textures = 0;
-
-			result = {
-
-				scene: new THREE.Scene(),
-				geometries: {},
-				materials: {},
-				textures: {},
-				objects: {},
-				cameras: {},
-				lights: {},
-				fogs: {}
-
-			};
-
-			function get_url( source_url, url_type ) {
-				
-				if ( url_type == "relativeToHTML" ) {
-					
-					return source_url;
-					
-				} else {
-					
-					return urlBase + "/" + source_url;
-
-				}
-
-			};
-			
-			function handle_objects() {
-
-				for( dd in data.objects ) {
-
-					if ( !result.objects[ dd ] ) {
-
-						o = data.objects[ dd ];
-
-						geometry = result.geometries[ o.geometry ];
-
-						if ( geometry ) {
-
-							materials = [];
-							for( i = 0; i < o.materials.length; i++ ) {
-
-								materials[ i ] = result.materials[ o.materials[i] ];
-
-							}
-
-							p = o.position;
-							r = o.rotation;
-							q = o.quaternion;
-							s = o.scale;
-							
-							// turn off quaternions, for the moment
-							
-							q = 0;
-
-							if ( materials.length == 0 ) {
-								
-								materials[ 0 ] = new THREE.MeshFaceMaterial();
-								
-							}
-							
-							object = new THREE.Mesh( geometry, materials );
-							object.position.set( p[0], p[1], p[2] );
-							
-							if ( q ) {
-								
-								object.quaternion.set( q[0], q[1], q[2], q[3] );
-								object.useQuaternion = true;
-								
-							} else {
-
-								object.rotation.set( r[0], r[1], r[2] );
-								
-							}
-							
-							object.scale.set( s[0], s[1], s[2] );
-							object.visible = o.visible;
-
-							result.scene.addObject( object );
-
-							result.objects[ dd ] = object;
-
-						}
-
-					}
-
-				}
-
-			};
-
-			function handle_mesh( geo, id ) {
-
-				result.geometries[ id ] = geo;
-				handle_objects();
-
-			};
-
-			function create_callback( id ) {
-
-				return function( geo ) {
-
-					handle_mesh( geo, id );
-
-					counter_models -= 1;
-
-					async_callback_gate();
-
-				}
-
-			};
-
-			function async_callback_gate() {
-
-				var progress = {
-
-					total_models: total_models,
-					total_textures: total_textures,
-					loaded_models: total_models - counter_models,
-					loaded_textures: total_textures - counter_textures
-
-				};
-
-				callback_progress( progress, result );
-
-				if( counter_models == 0 && counter_textures == 0 ) {
-
-					callback_async( result );
-
-				}
-
-			};
-
-			var callback_texture = function( images ) {
-
-				counter_textures -= 1;
-				async_callback_gate();
-
-			};
-
-			// first go synchronous elements
-
-			// cameras
-
-			for( dc in data.cameras ) {
-
-				c = data.cameras[ dc ];
-
-				if ( c.type == "perspective" ) {
-
-					camera = new THREE.Camera( c.fov, c.aspect, c.near, c.far );
-
-				} else if ( c.type == "ortho" ) {
-
-					camera = new THREE.Camera();
-					camera.projectionMatrix = THREE.Matrix4.makeOrtho( c.left, c.right, c.top, c.bottom, c.near, c.far );
-
-				}
-
-				p = c.position;
-				t = c.target;
-				camera.position.set( p[0], p[1], p[2] );
-				camera.target.position.set( t[0], t[1], t[2] );
-
-				result.cameras[ dc ] = camera;
-
-			}
-
-			// lights
-
-			var hex, intensity;
-			
-			for( dl in data.lights ) {
-
-				l = data.lights[ dl ];
-
-				hex = ( l.color !== undefined ) ? l.color : 0xffffff;
-				intensity = ( l.intensity !== undefined ) ? l.intensity : 1;
-				
-				if ( l.type == "directional" ) {
-
-					p = l.direction;
-
-					light = new THREE.DirectionalLight( hex, intensity );
-					light.position.set( p[0], p[1], p[2] );
-					light.position.normalize();
-
-				} else if ( l.type == "point" ) {
-
-					p = l.position;
-
-					light = new THREE.PointLight( hex, intensity );
-					light.position.set( p[0], p[1], p[2] );
-
-				}
-
-				result.scene.addLight( light );
-
-				result.lights[ dl ] = light;
-
-			}
-
-			// fogs
-
-			for( df in data.fogs ) {
-
-				f = data.fogs[ df ];
-
-				if ( f.type == "linear" ) {
-
-					fog = new THREE.Fog( 0x000000, f.near, f.far );
-
-				} else if ( f.type == "exp2" ) {
-
-					fog = new THREE.FogExp2( 0x000000, f.density );
-
-				}
-
-				c = f.color;
-				fog.color.setRGB( c[0], c[1], c[2] );
-
-				result.fogs[ df ] = fog;
-
-			}
-
-			// defaults
-
-			if ( result.cameras && data.defaults.camera ) {
-
-				result.currentCamera = result.cameras[ data.defaults.camera ];
-
-			}
-
-			if ( result.fogs && data.defaults.fog ) {
-
-				result.scene.fog = result.fogs[ data.defaults.fog ];
-
-			}
-
-			c = data.defaults.bgcolor;
-			result.bgColor = new THREE.Color();
-			result.bgColor.setRGB( c[0], c[1], c[2] );
-
-			result.bgColorAlpha = data.defaults.bgalpha;
-
-			// now come potentially asynchronous elements
-
-			// geometries
-
-			// count how many models will be loaded asynchronously
-
-			for( dg in data.geometries ) {
-
-				g = data.geometries[ dg ];
-
-				if ( g.type == "bin_mesh" || g.type == "ascii_mesh" ) {
-
-					counter_models += 1;
-
-				}
-
-			}
-
-			total_models = counter_models;
-			
-			for( dg in data.geometries ) {
-
-				g = data.geometries[ dg ];
-
-				if ( g.type == "cube" ) {
-
-					geometry = new Cube( g.width, g.height, g.depth, g.segmentsWidth, g.segmentsHeight, g.segmentsDepth, null, g.flipped, g.sides );
-					result.geometries[ dg ] = geometry;
-
-				} else if ( g.type == "plane" ) {
-
-					geometry = new Plane( g.width, g.height, g.segmentsWidth, g.segmentsHeight );
-					result.geometries[ dg ] = geometry;
-
-				} else if ( g.type == "sphere" ) {
-
-					geometry = new Sphere( g.radius, g.segmentsWidth, g.segmentsHeight );
-					result.geometries[ dg ] = geometry;
-
-				} else if ( g.type == "cylinder" ) {
-
-					geometry = new Cylinder( g.numSegs, g.topRad, g.botRad, g.height, g.topOffset, g.botOffset );
-					result.geometries[ dg ] = geometry;
-
-				} else if ( g.type == "torus" ) {
-
-					geometry = new Torus( g.radius, g.tube, g.segmentsR, g.segmentsT );
-					result.geometries[ dg ] = geometry;
-
-				} else if ( g.type == "icosahedron" ) {
-
-					geometry = new Icosahedron( g.subdivisions );
-					result.geometries[ dg ] = geometry;
-
-				} else if ( g.type == "bin_mesh" ) {
-
-					binLoader.load( { model: get_url( g.url, data.urlBaseType ),
-									  callback: create_callback( dg )
-									} );
-
-				} else if ( g.type == "ascii_mesh" ) {
-
-					jsonLoader.load( { model: get_url( g.url, data.urlBaseType ),
-									   callback: create_callback( dg )
-									} );
-
-				}
-
-			}
-
-			// textures
-
-			// count how many textures will be loaded asynchronously
-
-			for( dt in data.textures ) {
-
-				tt = data.textures[ dt ];
-
-				if( tt.url instanceof Array ) {
-
-					counter_textures += tt.url.length;
-
-				} else {
-
-					counter_textures += 1;
-
-				}
-
-			}
-
-			total_textures = counter_textures;
-
-			for( dt in data.textures ) {
-
-				tt = data.textures[ dt ];
-
-				if ( tt.mapping != undefined && THREE[ tt.mapping ] != undefined  ) {
-
-					tt.mapping = new THREE[ tt.mapping ]();
-
-				}
-				
-				if( tt.url instanceof Array ) {
-				
-					var url_array = [];
-					
-					for( var i = 0; i < tt.url.length; i ++ ) {
-					
-						url_array[ i ] = get_url( tt.url[ i ], data.urlBaseType );
-						
-					}
-					
-					texture = ImageUtils.loadTextureCube( url_array, tt.mapping, callback_texture );
-
-				} else {
-					
-					texture = ImageUtils.loadTexture( get_url( tt.url, data.urlBaseType ), tt.mapping, callback_texture );
-
-					if ( THREE[ tt.minFilter ] != undefined )
-						texture.minFilter = THREE[ tt.minFilter ];
-
-					if ( THREE[ tt.magFilter ] != undefined )
-						texture.magFilter = THREE[ tt.magFilter ];
-
-				}
-
-				result.textures[ dt ] = texture;
-
-			}
-
-			// materials
-
-			for( dm in data.materials ) {
-
-				m = data.materials[ dm ];
-
-				for( pp in m.parameters ) {
-
-					if ( pp == "envMap" || pp == "map" || pp == "lightMap" ) {
-
-						m.parameters[ pp ] = result.textures[ m.parameters[ pp ] ];
-
-					} else if ( pp == "shading" ) {
-
-						m.parameters[ pp ] = ( m.parameters[ pp ] == "flat" ) ? THREE.FlatShading : THREE.SmoothShading;
-
-					} else if ( pp == "blending" ) {
-
-						m.parameters[ pp ] = THREE[ m.parameters[ pp ] ] ? THREE[ m.parameters[ pp ] ] : THREE.NormalBlending;
-
-					} else if ( pp == "combine" ) {
-
-						m.parameters[ pp ] = ( m.parameters[ pp ] == "MixOperation" ) ? THREE.MixOperation : THREE.MultiplyOperation;
-
-					}
-
-				}
-
-				material = new THREE[ m.type ]( m.parameters );
-				result.materials[ dm ] = material;
-
-			}
-
-			// objects ( synchronous init of procedural primitives )
-
-			handle_objects();
-
-			// synchronous callback
-
-			callback_sync( result );
-
-		};
-
-	},
-
 	addMesh : function ( scene, geometry, scale, x, y, z, rx, ry, rz, material ) {
 	addMesh : function ( scene, geometry, scale, x, y, z, rx, ry, rz, material ) {
 
 
 		var mesh = new THREE.Mesh( geometry, material );
 		var mesh = new THREE.Mesh( geometry, material );

+ 455 - 0
src/extras/io/SceneLoader.js

@@ -0,0 +1,455 @@
+/**
+ * @author alteredq / http://alteredqualia.com/
+ */
+
+THREE.SceneLoader = function ( ) {
+};
+
+THREE.SceneLoader.prototype = {
+
+	load : function( url, callback_sync, callback_async, callback_progress ) {
+
+		var worker = new Worker( url );
+		worker.postMessage( 0 );
+
+		var urlBase = THREE.Loader.prototype.extractUrlbase( url );
+		
+		worker.onmessage = function( event ) {
+
+			var dg, dm, dd, dl, dc, df, dt,
+				g, o, m, l, p, c, t, f, tt, pp,
+				geometry, material, camera, fog,
+				texture, images,
+				materials,
+				data, binLoader, jsonLoader,
+				counter_models, counter_textures,
+				total_models, total_textures,
+				result;
+
+			data = event.data;
+			binLoader = new THREE.BinaryLoader();
+			jsonLoader = new THREE.JSONLoader();
+
+			counter_models = 0;
+			counter_textures = 0;
+
+			result = {
+
+				scene: new THREE.Scene(),
+				geometries: {},
+				materials: {},
+				textures: {},
+				objects: {},
+				cameras: {},
+				lights: {},
+				fogs: {}
+
+			};
+
+			function get_url( source_url, url_type ) {
+				
+				if ( url_type == "relativeToHTML" ) {
+					
+					return source_url;
+					
+				} else {
+					
+					return urlBase + "/" + source_url;
+
+				}
+
+			};
+			
+			function handle_objects() {
+
+				for( dd in data.objects ) {
+
+					if ( !result.objects[ dd ] ) {
+
+						o = data.objects[ dd ];
+
+						geometry = result.geometries[ o.geometry ];
+
+						if ( geometry ) {
+
+							materials = [];
+							for( i = 0; i < o.materials.length; i++ ) {
+
+								materials[ i ] = result.materials[ o.materials[i] ];
+
+							}
+
+							p = o.position;
+							r = o.rotation;
+							q = o.quaternion;
+							s = o.scale;
+							
+							// turn off quaternions, for the moment
+							
+							q = 0;
+
+							if ( materials.length == 0 ) {
+								
+								materials[ 0 ] = new THREE.MeshFaceMaterial();
+								
+							}
+							
+							object = new THREE.Mesh( geometry, materials );
+							object.position.set( p[0], p[1], p[2] );
+							
+							if ( q ) {
+								
+								object.quaternion.set( q[0], q[1], q[2], q[3] );
+								object.useQuaternion = true;
+								
+							} else {
+
+								object.rotation.set( r[0], r[1], r[2] );
+								
+							}
+							
+							object.scale.set( s[0], s[1], s[2] );
+							object.visible = o.visible;
+
+							result.scene.addObject( object );
+
+							result.objects[ dd ] = object;
+
+						}
+
+					}
+
+				}
+
+			};
+
+			function handle_mesh( geo, id ) {
+
+				result.geometries[ id ] = geo;
+				handle_objects();
+
+			};
+
+			function create_callback( id ) {
+
+				return function( geo ) {
+
+					handle_mesh( geo, id );
+
+					counter_models -= 1;
+
+					async_callback_gate();
+
+				}
+
+			};
+
+			function async_callback_gate() {
+
+				var progress = {
+
+					total_models: total_models,
+					total_textures: total_textures,
+					loaded_models: total_models - counter_models,
+					loaded_textures: total_textures - counter_textures
+
+				};
+
+				callback_progress( progress, result );
+
+				if( counter_models == 0 && counter_textures == 0 ) {
+
+					callback_async( result );
+
+				}
+
+			};
+
+			var callback_texture = function( images ) {
+
+				counter_textures -= 1;
+				async_callback_gate();
+
+			};
+
+			// first go synchronous elements
+
+			// cameras
+
+			for( dc in data.cameras ) {
+
+				c = data.cameras[ dc ];
+
+				if ( c.type == "perspective" ) {
+
+					camera = new THREE.Camera( c.fov, c.aspect, c.near, c.far );
+
+				} else if ( c.type == "ortho" ) {
+
+					camera = new THREE.Camera();
+					camera.projectionMatrix = THREE.Matrix4.makeOrtho( c.left, c.right, c.top, c.bottom, c.near, c.far );
+
+				}
+
+				p = c.position;
+				t = c.target;
+				camera.position.set( p[0], p[1], p[2] );
+				camera.target.position.set( t[0], t[1], t[2] );
+
+				result.cameras[ dc ] = camera;
+
+			}
+
+			// lights
+
+			var hex, intensity;
+			
+			for( dl in data.lights ) {
+
+				l = data.lights[ dl ];
+
+				hex = ( l.color !== undefined ) ? l.color : 0xffffff;
+				intensity = ( l.intensity !== undefined ) ? l.intensity : 1;
+				
+				if ( l.type == "directional" ) {
+
+					p = l.direction;
+
+					light = new THREE.DirectionalLight( hex, intensity );
+					light.position.set( p[0], p[1], p[2] );
+					light.position.normalize();
+
+				} else if ( l.type == "point" ) {
+
+					p = l.position;
+
+					light = new THREE.PointLight( hex, intensity );
+					light.position.set( p[0], p[1], p[2] );
+
+				}
+
+				result.scene.addLight( light );
+
+				result.lights[ dl ] = light;
+
+			}
+
+			// fogs
+
+			for( df in data.fogs ) {
+
+				f = data.fogs[ df ];
+
+				if ( f.type == "linear" ) {
+
+					fog = new THREE.Fog( 0x000000, f.near, f.far );
+
+				} else if ( f.type == "exp2" ) {
+
+					fog = new THREE.FogExp2( 0x000000, f.density );
+
+				}
+
+				c = f.color;
+				fog.color.setRGB( c[0], c[1], c[2] );
+
+				result.fogs[ df ] = fog;
+
+			}
+
+			// defaults
+
+			if ( result.cameras && data.defaults.camera ) {
+
+				result.currentCamera = result.cameras[ data.defaults.camera ];
+
+			}
+
+			if ( result.fogs && data.defaults.fog ) {
+
+				result.scene.fog = result.fogs[ data.defaults.fog ];
+
+			}
+
+			c = data.defaults.bgcolor;
+			result.bgColor = new THREE.Color();
+			result.bgColor.setRGB( c[0], c[1], c[2] );
+
+			result.bgColorAlpha = data.defaults.bgalpha;
+
+			// now come potentially asynchronous elements
+
+			// geometries
+
+			// count how many models will be loaded asynchronously
+
+			for( dg in data.geometries ) {
+
+				g = data.geometries[ dg ];
+
+				if ( g.type == "bin_mesh" || g.type == "ascii_mesh" ) {
+
+					counter_models += 1;
+
+				}
+
+			}
+
+			total_models = counter_models;
+			
+			for( dg in data.geometries ) {
+
+				g = data.geometries[ dg ];
+
+				if ( g.type == "cube" ) {
+
+					geometry = new Cube( g.width, g.height, g.depth, g.segmentsWidth, g.segmentsHeight, g.segmentsDepth, null, g.flipped, g.sides );
+					result.geometries[ dg ] = geometry;
+
+				} else if ( g.type == "plane" ) {
+
+					geometry = new Plane( g.width, g.height, g.segmentsWidth, g.segmentsHeight );
+					result.geometries[ dg ] = geometry;
+
+				} else if ( g.type == "sphere" ) {
+
+					geometry = new Sphere( g.radius, g.segmentsWidth, g.segmentsHeight );
+					result.geometries[ dg ] = geometry;
+
+				} else if ( g.type == "cylinder" ) {
+
+					geometry = new Cylinder( g.numSegs, g.topRad, g.botRad, g.height, g.topOffset, g.botOffset );
+					result.geometries[ dg ] = geometry;
+
+				} else if ( g.type == "torus" ) {
+
+					geometry = new Torus( g.radius, g.tube, g.segmentsR, g.segmentsT );
+					result.geometries[ dg ] = geometry;
+
+				} else if ( g.type == "icosahedron" ) {
+
+					geometry = new Icosahedron( g.subdivisions );
+					result.geometries[ dg ] = geometry;
+
+				} else if ( g.type == "bin_mesh" ) {
+
+					binLoader.load( { model: get_url( g.url, data.urlBaseType ),
+									  callback: create_callback( dg )
+									} );
+
+				} else if ( g.type == "ascii_mesh" ) {
+
+					jsonLoader.load( { model: get_url( g.url, data.urlBaseType ),
+									   callback: create_callback( dg )
+									} );
+
+				}
+
+			}
+
+			// textures
+
+			// count how many textures will be loaded asynchronously
+
+			for( dt in data.textures ) {
+
+				tt = data.textures[ dt ];
+
+				if( tt.url instanceof Array ) {
+
+					counter_textures += tt.url.length;
+
+				} else {
+
+					counter_textures += 1;
+
+				}
+
+			}
+
+			total_textures = counter_textures;
+
+			for( dt in data.textures ) {
+
+				tt = data.textures[ dt ];
+
+				if ( tt.mapping != undefined && THREE[ tt.mapping ] != undefined  ) {
+
+					tt.mapping = new THREE[ tt.mapping ]();
+
+				}
+				
+				if( tt.url instanceof Array ) {
+				
+					var url_array = [];
+					
+					for( var i = 0; i < tt.url.length; i ++ ) {
+					
+						url_array[ i ] = get_url( tt.url[ i ], data.urlBaseType );
+						
+					}
+					
+					texture = ImageUtils.loadTextureCube( url_array, tt.mapping, callback_texture );
+
+				} else {
+					
+					texture = ImageUtils.loadTexture( get_url( tt.url, data.urlBaseType ), tt.mapping, callback_texture );
+
+					if ( THREE[ tt.minFilter ] != undefined )
+						texture.minFilter = THREE[ tt.minFilter ];
+
+					if ( THREE[ tt.magFilter ] != undefined )
+						texture.magFilter = THREE[ tt.magFilter ];
+
+				}
+
+				result.textures[ dt ] = texture;
+
+			}
+
+			// materials
+
+			for( dm in data.materials ) {
+
+				m = data.materials[ dm ];
+
+				for( pp in m.parameters ) {
+
+					if ( pp == "envMap" || pp == "map" || pp == "lightMap" ) {
+
+						m.parameters[ pp ] = result.textures[ m.parameters[ pp ] ];
+
+					} else if ( pp == "shading" ) {
+
+						m.parameters[ pp ] = ( m.parameters[ pp ] == "flat" ) ? THREE.FlatShading : THREE.SmoothShading;
+
+					} else if ( pp == "blending" ) {
+
+						m.parameters[ pp ] = THREE[ m.parameters[ pp ] ] ? THREE[ m.parameters[ pp ] ] : THREE.NormalBlending;
+
+					} else if ( pp == "combine" ) {
+
+						m.parameters[ pp ] = ( m.parameters[ pp ] == "MixOperation" ) ? THREE.MixOperation : THREE.MultiplyOperation;
+
+					}
+
+				}
+
+				material = new THREE[ m.type ]( m.parameters );
+				result.materials[ dm ] = material;
+
+			}
+
+			// objects ( synchronous init of procedural primitives )
+
+			handle_objects();
+
+			// synchronous callback
+
+			callback_sync( result );
+
+		};
+
+	}
+
+};

+ 1 - 0
utils/build.py

@@ -101,6 +101,7 @@ EXTRAS_FILES = [
 'extras/io/Loader.js',
 'extras/io/Loader.js',
 'extras/io/JSONLoader.js',
 'extras/io/JSONLoader.js',
 'extras/io/BinaryLoader.js',
 'extras/io/BinaryLoader.js',
+'extras/io/SceneLoader.js',
 'extras/objects/MarchingCubes.js'
 'extras/objects/MarchingCubes.js'
 ]
 ]
 
 

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません