Browse Source

Editor: Improvements to TransformControls.
Avoids unnecessary renders and object saves.

Mr.doob 11 năm trước cách đây
mục cha
commit
27754463a8

+ 6 - 3
editor/js/Viewport.js

@@ -49,11 +49,12 @@ var Viewport = function ( editor ) {
 
 		}
 
-		if ( editor.selected !== null ) {
+		render();
 
-			signals.objectChanged.dispatch( editor.selected );
+	} );
+	transformControls.addEventListener( 'objectChange', function () {
 
-		}
+		signals.objectChanged.dispatch( transformControls.object );
 
 	} );
 	sceneHelpers.add( transformControls );
@@ -590,6 +591,8 @@ var Viewport = function ( editor ) {
 
 	function render() {
 
+		console.trace();
+
 		sceneHelpers.updateMatrixWorld();
 		scene.updateMatrixWorld();
 

+ 9 - 6
examples/js/controls/TransformControls.js

@@ -568,6 +568,7 @@
 		var _plane = "XY";
 
 		var changeEvent = { type: "change" };
+		var objectChangeEvent = { type: "objectChange" };
 
 		var ray = new THREE.Raycaster();
 		var projector = new THREE.Projector();
@@ -724,15 +725,17 @@
 
 			var intersect = intersectObjects( pointer, scope.gizmo[_mode].pickers.children );
 
+			var axis = null;
+
 			if ( intersect ) {
 
-				scope.axis = intersect.object.name;
-				scope.update();
-				scope.dispatchEvent( changeEvent );
+				axis = intersect.object.name;
 
-			} else if ( scope.axis !== null ) {
+			}
+
+			if ( scope.axis !== axis ) {
 
-				scope.axis = null;
+				scope.axis = axis;
 				scope.update();
 				scope.dispatchEvent( changeEvent );
 
@@ -948,7 +951,7 @@
 			}
 
 			scope.update();
-			scope.dispatchEvent( changeEvent );
+			scope.dispatchEvent( objectChangeEvent );
 
 		}
 

+ 1 - 1
examples/misc_controls_transform.html

@@ -67,8 +67,8 @@
 				var material = new THREE.MeshLambertMaterial( { map: texture } );
 
 				control = new THREE.TransformControls( camera, renderer.domElement );
-
 				control.addEventListener( 'change', render );
+				control.addEventListener( 'objectChange', render );
 
 				var mesh = new THREE.Mesh( geometry, material );
 				scene.add( mesh );