Browse Source

Merge pull request #19283 from Mugen87/dev49

VRMLLoader: Add support for WorldInfo node.
Mr.doob 5 years ago
parent
commit
8ae5224471
2 changed files with 80 additions and 2 deletions
  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 ( object instanceof THREE.Object3D ) scene.add( object );
 
 
+					if ( node.name === 'WorldInfo' ) scene.userData.worldInfo = object;
+
 				}
 				}
 
 
 				return scene;
 				return scene;
@@ -652,6 +654,10 @@ THREE.VRMLLoader = ( function () {
 						build = buildGeometricNode( node );
 						build = buildGeometricNode( node );
 						break;
 						break;
 
 
+					case 'WorldInfo':
+						build = buildWorldInfoNode( node );
+						break;
+
 					case 'Anchor':
 					case 'Anchor':
 					case 'Billboard':
 					case 'Billboard':
 					case 'Collision':
 					case 'Collision':
@@ -666,7 +672,6 @@ THREE.VRMLLoader = ( function () {
 					case 'Script':
 					case 'Script':
 					case 'Sound':
 					case 'Sound':
 					case 'SpotLight':
 					case 'SpotLight':
-					case 'WorldInfo':
 
 
 					case 'CylinderSensor':
 					case 'CylinderSensor':
 					case 'PlaneSensor':
 					case 'PlaneSensor':
@@ -1442,6 +1447,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 ) {
 			function buildIndexedFaceSetNode( node ) {
 
 
 				var color, coord, normal, texCoord;
 				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 ( object instanceof Object3D ) scene.add( object );
 
 
+					if ( node.name === 'WorldInfo' ) scene.userData.worldInfo = object;
+
 				}
 				}
 
 
 				return scene;
 				return scene;
@@ -688,6 +690,10 @@ var VRMLLoader = ( function () {
 						build = buildGeometricNode( node );
 						build = buildGeometricNode( node );
 						break;
 						break;
 
 
+					case 'WorldInfo':
+						build = buildWorldInfoNode( node );
+						break;
+
 					case 'Anchor':
 					case 'Anchor':
 					case 'Billboard':
 					case 'Billboard':
 					case 'Collision':
 					case 'Collision':
@@ -702,7 +708,6 @@ var VRMLLoader = ( function () {
 					case 'Script':
 					case 'Script':
 					case 'Sound':
 					case 'Sound':
 					case 'SpotLight':
 					case 'SpotLight':
-					case 'WorldInfo':
 
 
 					case 'CylinderSensor':
 					case 'CylinderSensor':
 					case 'PlaneSensor':
 					case 'PlaneSensor':
@@ -1478,6 +1483,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 ) {
 			function buildIndexedFaceSetNode( node ) {
 
 
 				var color, coord, normal, texCoord;
 				var color, coord, normal, texCoord;