현재 오브젝트 경계 상자의 각 모서리를 가져 와서이를 Normalized Device Coordinates (NDC)로 변환하고 최대 및 최소 NDC를 추적합니다. 나는 NDC의 중간을 계산하고, 세계에서 찾아 내 카메라를 보게한다.화면에 3D 오브젝트를 센터링 할 수 없습니다.
<Determine max and minimum NDCs>
centerX = (maxX + minX)/2;
centerY = (maxY + minY)/2;
point.set(centerX, centerY, 0);
projector.unprojectVector(point, camera);
direction = point.sub(camera.position).normalize();
point = camera.position.clone().add(direction.multiplyScalar(distance));
camera.lookAt(point);
camera.updateMatrixWorld();
대략적인 방법일까요? 나는 그것이 몇 군데에서 제안 된 것을 보았다. 나는 물체를 중앙에 배치 할 때마다 최소 및 최대 NDC가 다시 계산 될 때 (다른 변경이 이루어지기 전에) 평등해야하지만 그렇지 않은 것이기 때문에 질문합니다. 나는 가깝지 만 동등하지 않은 수 (음수 부호는 무시함)를 얻었고, 더 가깝게 가까워 질수록 숫자 사이의 '오차'가 점점 커짐. 첫 번째 몇 센터에 대한 IE의 오류는 0.0022566539084770687, 0.00541687811360958, 0.011035676399427596, 0.025670088917273515, 0.06396864345885889 등입니다.
내가 이것을 놓치고있는 단계가 있습니까?
나는이 코드를 while 루프의 일부로 사용하여 화면에서 객체를 최대화하고 가운데에 배치합니다. (사용자가 표제를 입력 할 수 있도록 프로그래밍 중이므로 표제와 표고에서 객체를 볼 수 있도록 카메라가 배치됩니다. 몇 주 후 (현재는) 이런 식으로하십시오.)
그러나 이것은 카메라를 내 물건으로 가까이 이동할수록 떨어져 나가는 것처럼 보입니다. 예를 들어 몇 번의 반복을 거친 후 내 최대 X NDC는 0.9989318709122867이고 최소 X NDC는 -0.9552042384799428입니다. 계산 된 점을 살펴보면 너무 삐뚤어져 내 다음 반복에서 max x NDC는 0.9420058636660581이고 min X NDC는 1.0128126740876888입니다.