Bläddra i källkod

VRMLLoader: Add support for WorldInfo node.

Mugen87 5 år sedan
förälder
incheckning
9af3e59acb
2 ändrade filer med 80 tillägg och 2 borttagningar
  1. 40 1
      examples/js/loaders/VRMLLoader.js
  2. 40 1
      examples/jsm/loaders/VRMLLoader.js

+ 40 - 1
examples/js/loaders/VRMLLoader.js

@@ -515,6 +515,8 @@ THREE.VRMLLoader = ( function () {
 
 					if ( object instanceof THREE.Object3D ) scene.add( object );
 
+					if ( node.name === 'WorldInfo' ) scene.userData.worldInfo = object;
+
 				}
 
 				return scene;
@@ -648,6 +650,10 @@ THREE.VRMLLoader = ( function () {
 						build = buildGeometricNode( node );
 						break;
 
+					case 'WorldInfo':
+						build = buildWorldInfoNode( node );
+						break;
+
 					case 'Anchor':
 					case 'Billboard':
 					case 'Collision':
@@ -662,7 +668,6 @@ THREE.VRMLLoader = ( function () {
 					case 'Script':
 					case 'Sound':
 					case 'SpotLight':
-					case 'WorldInfo':
 
 					case 'CylinderSensor':
 					case 'PlaneSensor':
@@ -1439,6 +1444,40 @@ THREE.VRMLLoader = ( function () {
 
 			}
 
+			function buildWorldInfoNode( node ) {
+
+				var worldInfo = {};
+
+				var fields = node.fields;
+
+				for ( var i = 0, l = fields.length; i < l; i ++ ) {
+
+					var field = fields[ i ];
+					var fieldName = field.name;
+					var fieldValues = field.values;
+
+					switch ( fieldName ) {
+
+						case 'title':
+							worldInfo.title = fieldValues[ 0 ];
+							break;
+
+						case 'info':
+							worldInfo.info = fieldValues;
+							break;
+
+						default:
+							console.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );
+							break;
+
+					}
+
+				}
+
+				return worldInfo;
+
+			}
+
 			function buildIndexedFaceSetNode( node ) {
 
 				var color, coord, normal, texCoord;

+ 40 - 1
examples/jsm/loaders/VRMLLoader.js

@@ -551,6 +551,8 @@ var VRMLLoader = ( function () {
 
 					if ( object instanceof Object3D ) scene.add( object );
 
+					if ( node.name === 'WorldInfo' ) scene.userData.worldInfo = object;
+
 				}
 
 				return scene;
@@ -684,6 +686,10 @@ var VRMLLoader = ( function () {
 						build = buildGeometricNode( node );
 						break;
 
+					case 'WorldInfo':
+						build = buildWorldInfoNode( node );
+						break;
+
 					case 'Anchor':
 					case 'Billboard':
 					case 'Collision':
@@ -698,7 +704,6 @@ var VRMLLoader = ( function () {
 					case 'Script':
 					case 'Sound':
 					case 'SpotLight':
-					case 'WorldInfo':
 
 					case 'CylinderSensor':
 					case 'PlaneSensor':
@@ -1475,6 +1480,40 @@ var VRMLLoader = ( function () {
 
 			}
 
+			function buildWorldInfoNode( node ) {
+
+				var worldInfo = {};
+
+				var fields = node.fields;
+
+				for ( var i = 0, l = fields.length; i < l; i ++ ) {
+
+					var field = fields[ i ];
+					var fieldName = field.name;
+					var fieldValues = field.values;
+
+					switch ( fieldName ) {
+
+						case 'title':
+							worldInfo.title = fieldValues[ 0 ];
+							break;
+
+						case 'info':
+							worldInfo.info = fieldValues;
+							break;
+
+						default:
+							console.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );
+							break;
+
+					}
+
+				}
+
+				return worldInfo;
+
+			}
+
 			function buildIndexedFaceSetNode( node ) {
 
 				var color, coord, normal, texCoord;