🚀 Auto-deploy: melhoria no snap e medição AR em 04/08/2026 21:04:14

This commit is contained in:
2026-08-04 21:04:14 +00:00
parent 11bbf1e663
commit 8807b18c55
+30 -7
View File
@@ -112,7 +112,12 @@ const CubeControlado = ({
ry = gpRight?.axes[3] ?? 0;
lt = gpLeft?.buttons[1]?.value ?? 0;
rt = gpRight?.buttons[1]?.value ?? 0;
resetBtn = gpRight?.buttons[4]?.pressed || gpRight?.buttons[5]?.pressed || false;
resetBtn =
gpRight?.buttons[4]?.pressed ||
gpRight?.buttons[5]?.pressed ||
gpLeft?.buttons[4]?.pressed ||
gpLeft?.buttons[5]?.pressed ||
false;
} else {
// Desktop nativo
lx = gpDesktop!.axes[0] ?? 0;
@@ -171,17 +176,35 @@ const CubeControlado = ({
<XRGrabbable
allowScale={true}
lockedActive={lockedRef.current}
onSync={(pos, quat, scale) => {
posRef.current.x = pos.x;
posRef.current.y = Math.max(0.5, pos.y);
posRef.current.z = pos.z;
onSync={(deltaPos, deltaQuat, deltaScale) => {
// Matriz atual do cubo
const mMesh = new THREE.Matrix4().compose(
new THREE.Vector3(posRef.current.x, posRef.current.y, posRef.current.z),
new THREE.Quaternion().setFromEuler(new THREE.Euler(rotRef.current.x, rotRef.current.y, rotRef.current.z, 'YXZ')),
new THREE.Vector3(scaleRef.current, scaleRef.current, scaleRef.current)
);
const euler = new THREE.Euler().setFromQuaternion(quat, 'YXZ');
// Matriz delta vinda do arrasto (XRGrabbable group)
const mGroup = new THREE.Matrix4().compose(deltaPos, deltaQuat, deltaScale);
// Multiplica o offset (group) pelo local (mesh)
const mCombined = new THREE.Matrix4().multiplyMatrices(mGroup, mMesh);
const finalPos = new THREE.Vector3();
const finalQuat = new THREE.Quaternion();
const finalScale = new THREE.Vector3();
mCombined.decompose(finalPos, finalQuat, finalScale);
posRef.current.x = finalPos.x;
posRef.current.y = Math.max(0.5, finalPos.y);
posRef.current.z = finalPos.z;
const euler = new THREE.Euler().setFromQuaternion(finalQuat, 'YXZ');
rotRef.current.x = euler.x;
rotRef.current.y = euler.y;
rotRef.current.z = euler.z;
scaleRef.current = scale.x;
scaleRef.current = finalScale.x;
}}
>
<mesh