fix(pose_3d): gizmo visibility (use getHelper for r160) + larger wrist hitbox + diagnostics
This commit is contained in:
1 parent
0a3ee61007
commit
25c94d3861
1 file changed
+12
-2
+12
-2
@@ -29,12 +29,13 @@ function makeUCS(size = 0.1) {
|
|||||||
function makeWristMarker(color) {
|
function makeWristMarker(color) {
|
||||||
const group = new THREE.Group();
|
const group = new THREE.Group();
|
||||||
const sphere = new THREE.Mesh(
|
const sphere = new THREE.Mesh(
|
||||||
new THREE.SphereGeometry(0.025, 16, 12),
|
new THREE.SphereGeometry(0.04, 16, 12),
|
||||||
new THREE.MeshStandardMaterial({ color, metalness: 0.2, roughness: 0.5 }),
|
new THREE.MeshStandardMaterial({ color, metalness: 0.2, roughness: 0.5 }),
|
||||||
);
|
);
|
||||||
group.add(sphere);
|
group.add(sphere);
|
||||||
group.add(makeUCS(0.07));
|
group.add(makeUCS(0.07));
|
||||||
group.userData.sphere = sphere;
|
group.userData.sphere = sphere;
|
||||||
|
group.userData.sphere.userData.kind = 'wrist';
|
||||||
return group;
|
return group;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,9 +131,15 @@ function initScene() {
|
|||||||
|
|
||||||
const transform = new TransformControls(camera, renderer.domElement);
|
const transform = new TransformControls(camera, renderer.domElement);
|
||||||
transform.setMode('translate');
|
transform.setMode('translate');
|
||||||
|
transform.size = 0.6;
|
||||||
// Disable orbit while dragging gizmo
|
// Disable orbit while dragging gizmo
|
||||||
transform.addEventListener('dragging-changed', (e) => { orbit.enabled = !e.value; });
|
transform.addEventListener('dragging-changed', (e) => { orbit.enabled = !e.value; });
|
||||||
scene.add(transform);
|
// In r160 the visual helper is exposed via getHelper(); fall back to the
|
||||||
|
// transform object itself for older versions.
|
||||||
|
const transformHelper = typeof transform.getHelper === 'function'
|
||||||
|
? transform.getHelper()
|
||||||
|
: transform;
|
||||||
|
scene.add(transformHelper);
|
||||||
|
|
||||||
state.three = { scene, camera, renderer, orbit, transform };
|
state.three = { scene, camera, renderer, orbit, transform };
|
||||||
|
|
||||||
@@ -288,9 +295,11 @@ function setupSelection() {
|
|||||||
const candidates = [state.arms.right.userData.sphere,
|
const candidates = [state.arms.right.userData.sphere,
|
||||||
state.arms.left.userData.sphere];
|
state.arms.left.userData.sphere];
|
||||||
const hits = raycaster.intersectObjects(candidates, false);
|
const hits = raycaster.intersectObjects(candidates, false);
|
||||||
|
console.log('[pose_3d] click on canvas, raycast hits:', hits.length);
|
||||||
if (hits.length > 0) {
|
if (hits.length > 0) {
|
||||||
const sphere = hits[0].object;
|
const sphere = hits[0].object;
|
||||||
const side = sphere.parent.userData.side;
|
const side = sphere.parent.userData.side;
|
||||||
|
console.log('[pose_3d] activating side:', side);
|
||||||
activateSide(side);
|
activateSide(side);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -306,6 +315,7 @@ function activateSide(side) {
|
|||||||
ensureGhostInit(side);
|
ensureGhostInit(side);
|
||||||
const { transform } = state.three;
|
const { transform } = state.three;
|
||||||
transform.attach(state.ghosts[side]);
|
transform.attach(state.ghosts[side]);
|
||||||
|
console.log('[pose_3d] gizmo attached to ghost', side, 'at', state.ghosts[side].position);
|
||||||
state.ghosts[side].visible = true;
|
state.ghosts[side].visible = true;
|
||||||
updateReadout();
|
updateReadout();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user