Преглед изворни кода

adding layer visibility toggle to example.

Luis Fraguada пре 5 година
родитељ
комит
d0f4129eef
1 измењених фајлова са 41 додато и 0 уклоњено
  1. 41 0
      examples/webgl_loader_3dm.html

+ 41 - 0
examples/webgl_loader_3dm.html

@@ -16,11 +16,14 @@
 
 
 			import * as THREE from '../build/three.module.js';
 			import * as THREE from '../build/three.module.js';
 
 
+			import { GUI } from './jsm/libs/dat.gui.module.js';
+
 			import { OrbitControls } from './jsm/controls/OrbitControls.js';
 			import { OrbitControls } from './jsm/controls/OrbitControls.js';
 			import { Rhino3dmLoader } from './jsm/loaders/3DMLoader.js';
 			import { Rhino3dmLoader } from './jsm/loaders/3DMLoader.js';
 
 
 			var container, controls;
 			var container, controls;
 			var camera, scene, renderer;
 			var camera, scene, renderer;
+			var gui;
 
 
 			init();
 			init();
 			animate();
 			animate();
@@ -50,6 +53,7 @@
 				loader.load( 'models/3dm/hello_mesh.3dm', function ( object ) {
 				loader.load( 'models/3dm/hello_mesh.3dm', function ( object ) {
 
 
 					scene.add( object );
 					scene.add( object );
+					initGUI( object.userData.layers );
 
 
                 } );
                 } );
                 
                 
@@ -82,6 +86,43 @@
 				requestAnimationFrame( animate );
 				requestAnimationFrame( animate );
 
 
 			}
 			}
+
+			function initGUI( layers ) {
+
+				gui = new GUI( { width: 330 } );
+				var layersControl= gui.addFolder( 'layers' );
+				for( var i = 0; i < layers.length; i++) {
+					var layer = layers[i];
+					layersControl.add( layer, 'visible' ).name( layer.name ).onChange( function ( val ) {
+
+						scene.traverse( function ( child ) {
+
+							if( child.userData.hasOwnProperty('attributes') ) {
+
+								if( 'layerIndex' in child.userData.attributes ){
+
+									var layerName = layers[child.userData.attributes.layerIndex].name;
+
+									if( layerName === layer.name ) {
+										
+										child.visible = val;
+										layer.visible = val;
+										animate();
+
+									}
+
+								}
+
+							}
+
+						} );
+
+					} );
+				}
+				layersControl.open();
+				console.log( layers );
+
+			}
 		</script>
 		</script>
 
 
 	</body>
 	</body>