From 6643379133c7faf8d87de94944bb70243d09bd0e Mon Sep 17 00:00:00 2001 From: Michael Mainguy Date: Mon, 17 Nov 2025 20:10:14 -0600 Subject: [PATCH] Add distance-based scaling to ResizeGizmo handles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Implement camera distance-based scaling so handles appear consistent visual size - Add updateHandleScaling() method called every frame - Use 0.2 multiplier for scale factor (adjustable) - Handles maintain mesh rotation alignment (not billboarded) - Keeps existing utility layer configuration for compatibility 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/gizmos/ResizeGizmo/ResizeGizmo.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/gizmos/ResizeGizmo/ResizeGizmo.ts b/src/gizmos/ResizeGizmo/ResizeGizmo.ts index 45bfaa4..28b32a9 100644 --- a/src/gizmos/ResizeGizmo/ResizeGizmo.ts +++ b/src/gizmos/ResizeGizmo/ResizeGizmo.ts @@ -184,6 +184,9 @@ export class ResizeGizmo { // Check for handle picking with XR controllers this.checkXRControllerPicking(); + // Update handle scaling based on camera distance + this.updateHandleScaling(); + // Update scaling if active if (this._isScaling) { this.updateScaling(); @@ -194,6 +197,20 @@ export class ResizeGizmo { }); } + /** + * Update handle scaling based on camera distance for consistent visual size + */ + private updateHandleScaling(): void { + const camera = this._scene.activeCamera; + if (!camera) return; + + for (const handle of this._handles) { + const distance = Vector3.Distance(camera.globalPosition, handle.position); + const scaleFactor = distance * 0.2; // Adjust multiplier to control visual size + handle.scaling = new Vector3(scaleFactor, scaleFactor, scaleFactor); + } + } + /** * Check if XR controllers are pointing at any handles */