カメラが見ている CubeGeometry があり、カメラをズームして、立方体が完全に見えるようにしますが、大きくはなりません。
私の最初の試みは、立方体の頂点をカメラ座標系に変換することでした。
function toScreenXY(position, camera) {
var pos = position.clone();
var projScreenMat = new THREE.Matrix4();
projScreenMat.multiply(camera.projectionMatrix, camera.matrixWorldInverse);
projScreenMat.multiplyVector3( pos );
return pos;
}
function ScaleInView() {
camera.fov = 0.0;
for (var i=0; i<8; i++) {
proj2d = toScreenXY(cube.geometry.vertices[i],camera);
angle = 57.296 * Math.max(Math.atan(proj2d.x/proj2d.z), Math.atan(proj2d.y/proj2d.z));
camera.fov = Math.max(camera.fov,angle);
}
camera.updateProjectionMatrix();
}
これでうまくいくと思いましたが、小さすぎる場合もあれば、大きすぎる場合もあります (カメラの位置によって異なります)。
正投影カメラについてもこれを行う必要があります。
編集: 立方体がカメラに面しているときにこれを行う方法を知っています。カメラが任意の(r、theta、phi)位置に移動したときにそれを行う方法を探しています(球極座標; rは実際には私の目的では一定です)。