Browse Source

Added handling of UTF8 models to SceneLoader, extended scene example.

alteredq 12 years ago
parent
commit
30cdcbea82
5 changed files with 44 additions and 26 deletions
  1. 10 1
      build/three.js
  2. 1 1
      build/three.min.js
  3. 20 23
      examples/scenes/test_scene.js
  4. 3 0
      examples/webgl_loader_scene.html
  5. 10 1
      src/loaders/SceneLoader.js

+ 10 - 1
build/three.js

@@ -9134,6 +9134,8 @@ THREE.SceneLoader.prototype.parse = function ( json, callbackFinished, url ) {
 
 					var loader = scope.hierarchyHandlerMap[ o.type ][ "loaderObject" ];
 
+					// OBJLoader
+
 					if ( loader.addEventListener ) {
 
 						loader.addEventListener( 'load', create_callback_hierachy( dd, parent, material, o ) );
@@ -9147,7 +9149,7 @@ THREE.SceneLoader.prototype.parse = function ( json, callbackFinished, url ) {
 
 							loader.load( get_url( o.url, data.urlBaseType ), create_callback_hierachy( dd, parent, material, o ) );
 
-						// OBJLoader
+						// UTF8Loader
 
 						} else {
 
@@ -9491,6 +9493,13 @@ THREE.SceneLoader.prototype.parse = function ( json, callbackFinished, url ) {
 
 				result = event.scene;
 
+
+			// UTF8Loader
+
+			} else {
+
+				result = event;
+
 			}
 
 			handle_hierarchy( result, id, parent, material, obj );

+ 1 - 1
build/three.min.js

@@ -194,7 +194,7 @@ void 0!==e.duration&&(g.duration=e.duration),void 0!==e.time&&(g.time=e.time),vo
 g.castShadow=e.castShadow,g.receiveShadow=e.receiveShadow,a.add(g),M.objects[c]=g}else"DirectionalLight"===e.type||"PointLight"===e.type||"AmbientLight"===e.type?(R=void 0!==e.color?e.color:16777215,P=void 0!==e.intensity?e.intensity:1,"DirectionalLight"===e.type?(u=e.direction,G=new THREE.DirectionalLight(R,P),G.position.set(u[0],u[1],u[2]),G.position.normalize()):"PointLight"===e.type?(u=e.position,z=e.distance,G=new THREE.PointLight(R,P,z),G.position.set(u[0],u[1],u[2])):"AmbientLight"===e.type&&
 (G=new THREE.AmbientLight(R)),a.add(G),G.name=c,M.lights[c]=G,M.objects[c]=G):"PerspectiveCamera"===e.type||"OrthographicCamera"===e.type?("PerspectiveCamera"===e.type?I=new THREE.PerspectiveCamera(e.fov,e.aspect,e.near,e.far):"OrthographicCamera"===e.type&&(I=new THREE.OrthographicCamera(v.left,v.right,v.top,v.bottom,v.near,v.far)),u=e.position,x=e.target,F=e.up,I.position.set(u[0],u[1],u[2]),I.target=new THREE.Vector3(x[0],x[1],x[2]),F&&I.up.set(F[0],F[1],F[2]),a.add(I),I.name=c,M.cameras[c]=I,
 M.objects[c]=I):(u=e.position,t=e.rotation,E=e.quaternion,A=e.scale,E=0,g=new THREE.Object3D,g.name=c,g.position.set(u[0],u[1],u[2]),E?(g.quaternion.set(E[0],E[1],E[2],E[3]),g.useQuaternion=!0):g.rotation.set(t[0],t[1],t[2]),g.scale.set(A[0],A[1],A[2]),g.visible=void 0!==e.visible?e.visible:!1,a.add(g),M.objects[c]=g,M.empties[c]=g);if(g){if(void 0!==e.properties)for(var n in e.properties)g.properties[n]=e.properties[n];void 0!==e.children&&f(g,e.children)}}}function g(a){return function(b){M.geometries[a]=
-b;e();Q-=1;m.onLoadComplete();j()}}function h(a,b,c,d){return function(f){var g;f.content?g=f.content:f.dae&&(g=f.scene);f=g;g=d.position;var h=d.rotation,i=d.quaternion,l=d.scale;f.position.set(g[0],g[1],g[2]);i?(f.quaternion.set(i[0],i[1],i[2],i[3]),f.useQuaternion=!0):f.rotation.set(h[0],h[1],h[2]);f.scale.set(l[0],l[1],l[2]);c&&f.traverse(function(a){a.material=c});b.add(f);M.objects[a]=f;e();Q-=1;m.onLoadComplete();j()}}function i(a){return function(b){M.geometries[a]=b}}function j(){m.callbackProgress({totalModels:oa,
+b;e();Q-=1;m.onLoadComplete();j()}}function h(a,b,c,d){return function(f){var f=f.content?f.content:f.dae?f.scene:f,g=d.position,h=d.rotation,i=d.quaternion,l=d.scale;f.position.set(g[0],g[1],g[2]);i?(f.quaternion.set(i[0],i[1],i[2],i[3]),f.useQuaternion=!0):f.rotation.set(h[0],h[1],h[2]);f.scale.set(l[0],l[1],l[2]);c&&f.traverse(function(a){a.material=c});b.add(f);M.objects[a]=f;e();Q-=1;m.onLoadComplete();j()}}function i(a){return function(b){M.geometries[a]=b}}function j(){m.callbackProgress({totalModels:oa,
 totalTextures:N,loadedModels:oa-Q,loadedTextures:N-Y},M);m.onLoadProgress();0===Q&&0===Y&&b(M)}var m=this,n=THREE.Loader.prototype.extractUrlBase(c),l,p,o,q,r,s,z,u,t,E,A,v,x,B,F,H,J,I,L,C,G,R,P,Q,Y,oa,N,M,da=a,S;for(S in this.geometryHandlerMap)a=this.geometryHandlerMap[S].loaderClass,this.geometryHandlerMap[S].loaderObject=new a;for(S in this.hierarchyHandlerMap)a=this.hierarchyHandlerMap[S].loaderClass,this.hierarchyHandlerMap[S].loaderObject=new a;Y=Q=0;M={scene:new THREE.Scene,geometries:{},
 materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},empties:{}};if(da.transform&&(S=da.transform.position,a=da.transform.rotation,c=da.transform.scale,S&&M.scene.position.set(S[0],S[1],S[2]),a&&M.scene.rotation.set(a[0],a[1],a[2]),c&&M.scene.scale.set(c[0],c[1],c[2]),S||a||c))M.scene.updateMatrix(),M.scene.updateMatrixWorld();S=function(a){return function(){Y-=a;j();m.onLoadComplete()}};for(o in da.fogs)a=da.fogs[o],"linear"===a.type?L=new THREE.Fog(0,a.near,a.far):"exp2"===a.type&&(L=
 new THREE.FogExp2(0,a.density)),v=a.color,L.color.setRGB(v[0],v[1],v[2]),M.fogs[o]=L;for(l in da.geometries)r=da.geometries[l],r.type in this.geometryHandlerMap&&(Q+=1,m.onLoadStart());for(var K in da.objects)o=da.objects[K],o.type&&o.type in this.hierarchyHandlerMap&&(Q+=1,m.onLoadStart());oa=Q;for(l in da.geometries)if(r=da.geometries[l],"cube"===r.type)H=new THREE.CubeGeometry(r.width,r.height,r.depth,r.widthSegments,r.heightSegments,r.depthSegments,null,r.flipped,r.sides),M.geometries[l]=H;else if("plane"===

+ 20 - 23
examples/scenes/test_scene.js

@@ -170,19 +170,6 @@
 			"visible"  : true
 		},
 
-		"hand" : {
-			"geometry" : "hand",
-			"materials": [ "phong_hand" ],
-			"position" : [ -28, -1, 29 ],
-			"rotation" : [ 0, 0.5, 0 ],
-			"scale"	   : [ 12, 12, 12 ],
-			"visible"  : true,
-			"properties" : {
-				"rotating" : true,
-				"rotateY"  : true
-			}
-		},
-
 		"ninja" : {
 			"geometry" : "NinjaLo",
 			"materials": [ "phong_normal" ],
@@ -217,7 +204,7 @@
 		"man" : {
 			"type": "obj",
 			"url" : "obj/male02/male02.obj",
-			"materials": [ "phong_hand" ],
+			"materials": [ "phong_man" ],
 			"position" : [ -10, -10, -25 ],
 			"rotation" : [ 0, 0, 0 ],
 			"scale"	   : [ 0.2, 0.2, 0.2 ],
@@ -234,6 +221,20 @@
 			"visible"  : true
 		},
 
+		"hand" : {
+			"type" : "utf8",
+			"url"  : "models/utf8/hand.js",
+			"materials": [ "phong_hand" ],
+			"position" : [ -28, -1, 29 ],
+			"rotation" : [ 0, 0.5, 0 ],
+			"scale"	   : [ 12, 12, 12 ],
+			"visible"  : true,
+			"properties" : {
+				"rotating" : true,
+				"rotateY"  : true
+			}
+		},
+
 		"bunny" : {
 			"geometry": "bunny",
 			"materials": [ "phong_bunny" ],
@@ -468,15 +469,6 @@
 			"url" : "models/stl/slotted_disk.stl"
 		},
 
-		"hand": {
-			"type": "utf8",
-			"url" : "models/utf8/hand.utf8",
-			"scale"   : 0.815141,
-			"offsetX" : -0.371823,
-			"offsetY" : -0.011920,
-			"offsetZ" : -0.416061
-		},
-
 		"colorcube": {
 			"type": "embedded",
 			"id"  : "cube_fvc"
@@ -549,6 +541,11 @@
 			"parameters": { "color": 1118481, "ambient": 1118481, "specular": 5601245, "shininess": 12, "bumpMap": "texture_bump_repeat", "bumpScale": 0.125 }
 		},
 
+		"phong_man": {
+			"type": "MeshPhongMaterial",
+			"parameters": { "color": 16737894, "ambient": 16737894, "specular": 2236962, "shininess": 40, "wrapAround": true, "wrapRGB": [ 0.15, 0.02, 0.01 ] }
+		},
+
 		"phong_hand": {
 			"type": "MeshPhongMaterial",
 			"parameters": { "color": 14531481, "ambient": 14531481, "specular": 2236962, "shininess": 40, "wrapAround": true, "wrapRGB": [ 0.15, 0.02, 0.01 ] }

+ 3 - 0
examples/webgl_loader_scene.html

@@ -157,6 +157,8 @@
 		<script src="js/loaders/VTKLoader.js"></script>
 		<script src="js/loaders/STLLoader.js"></script>
 		<script src="js/loaders/ColladaLoader.js"></script>
+		<script src="js/loaders/UTF8Loader.js"></script>
+		<script src="js/loaders/MTLLoader.js"></script>
 
 		<script src="js/Detector.js"></script>
 		<script src="js/libs/stats.min.js"></script>
@@ -359,6 +361,7 @@
 
 				loader.addHierarchyHandler( "obj", THREE.OBJLoader );
 				loader.addHierarchyHandler( "dae", THREE.ColladaLoader );
+				loader.addHierarchyHandler( "utf8", THREE.UTF8Loader );
 
 				loader.callbackSync = callbackSync;
 				loader.callbackProgress = callbackProgress;

+ 10 - 1
src/loaders/SceneLoader.js

@@ -197,6 +197,8 @@ THREE.SceneLoader.prototype.parse = function ( json, callbackFinished, url ) {
 
 					var loader = scope.hierarchyHandlerMap[ o.type ][ "loaderObject" ];
 
+					// OBJLoader
+
 					if ( loader.addEventListener ) {
 
 						loader.addEventListener( 'load', create_callback_hierachy( dd, parent, material, o ) );
@@ -210,7 +212,7 @@ THREE.SceneLoader.prototype.parse = function ( json, callbackFinished, url ) {
 
 							loader.load( get_url( o.url, data.urlBaseType ), create_callback_hierachy( dd, parent, material, o ) );
 
-						// OBJLoader
+						// UTF8Loader
 
 						} else {
 
@@ -554,6 +556,13 @@ THREE.SceneLoader.prototype.parse = function ( json, callbackFinished, url ) {
 
 				result = event.scene;
 
+
+			// UTF8Loader
+
+			} else {
+
+				result = event;
+
 			}
 
 			handle_hierarchy( result, id, parent, material, obj );