fix cam
This commit is contained in:
@@ -35,6 +35,25 @@ function setLinePoints(line, a, b) {
|
||||
line.geometry.computeBoundingSphere();
|
||||
}
|
||||
|
||||
function computePoseCenter(near, far) {
|
||||
const points = [];
|
||||
for (const key of JOINT_KEYS) {
|
||||
const np = near?.[key];
|
||||
const fp = far?.[key];
|
||||
if (np && Number.isFinite(np.x) && Number.isFinite(np.y)) points.push(np);
|
||||
if (fp && Number.isFinite(fp.x) && Number.isFinite(fp.y)) points.push(fp);
|
||||
}
|
||||
if (!points.length) return null;
|
||||
|
||||
let sx = 0;
|
||||
let sy = 0;
|
||||
for (const p of points) {
|
||||
sx += p.x;
|
||||
sy += p.y;
|
||||
}
|
||||
return { x: sx / points.length, y: sy / points.length };
|
||||
}
|
||||
|
||||
export function create3DRenderer(mountEl) {
|
||||
const scene = new THREE.Scene();
|
||||
scene.background = new THREE.Color(0x0f1116);
|
||||
@@ -52,6 +71,9 @@ export function create3DRenderer(mountEl) {
|
||||
controls.target.set(0, 0, 0);
|
||||
controls.update();
|
||||
|
||||
const trackedTarget = new THREE.Vector3(0, 0, 0);
|
||||
let hasTrackedTarget = false;
|
||||
|
||||
scene.add(new THREE.AmbientLight(0xffffff, 0.65));
|
||||
|
||||
const keyLight = new THREE.DirectionalLight(0xffffff, 0.55);
|
||||
@@ -159,6 +181,21 @@ export function create3DRenderer(mountEl) {
|
||||
grid.position.y = -floorY;
|
||||
}
|
||||
|
||||
const center = computePoseCenter(near, far);
|
||||
if (center) {
|
||||
const nextTarget = new THREE.Vector3(center.x, -center.y, 0);
|
||||
if (!hasTrackedTarget) {
|
||||
trackedTarget.copy(nextTarget);
|
||||
controls.target.copy(nextTarget);
|
||||
hasTrackedTarget = true;
|
||||
} else {
|
||||
const delta = nextTarget.clone().sub(trackedTarget);
|
||||
trackedTarget.copy(nextTarget);
|
||||
camera.position.add(delta);
|
||||
controls.target.lerp(nextTarget, 0.2);
|
||||
}
|
||||
}
|
||||
|
||||
controls.update();
|
||||
renderer.render(scene, camera);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user