現在、オブジェクトのバウンディング ボックスの各コーナーを取り、それを正規化されたデバイス座標 (NDC) に変換しており、最大および最小の NDC を追跡しています。次に、NDC の中央を計算し、世界でそれを見つけて、カメラにそれを見てもらいます。
<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 と最大 NDC が等しくなるはずですが、そうではないためです。私は近づくが等しい数ではなく(負の符号を無視して)、近づくにつれて数字の間の「誤差」がますます大きくなります。つまり、最初のいくつかの中心のエラーは次のとおりです。
これを引き起こす可能性のある行方不明のステップはありますか?
このコードを while ループの一部として使用して、オブジェクトを最大化して画面の中央に配置しています。(私は、ユーザーが方位と標高を入力できるようにプログラムしています。カメラは、その方位と標高でオブジェクトを表示するように配置されます。数週間後、(今のところ)より簡単であると判断しましたこのようにします。)
ただし、カメラをオブジェクトに近づけるほど、これはバラバラになり始めるようです。たとえば、数回繰り返した後、最大 X NDC は 0.9989318709122867 になり、最小 X NDC は -0.9552042384799428 になります。ただし、計算されたポイントを見ると、あまりにも右に見えます。次の反復では、最大 X NDC は 0.9420058636660581 であり、最小 X NDC は 1.0128126740876888 です。