Я пытаюсь сделать так, чтобы объект помещался внутри усеченной камеры, и для этого я прошел всю тригонометрию, и это код, который я использовал.
var setupCamera = function() {
aspectRatio = window.innerWidth / window.innerHeight
camera = new THREE.PerspectiveCamera( 45, aspectRatio, 1, 10000 );
scene.add(camera);
}
var updateCamera = function() {
var height = mesh1_BB.max.y;
var width = mesh1_BB.max.x - mesh1_BB.min.x;
var vertical_FOV = camera.fov * (Math.PI/ 180);
var max_z = mesh1_BB.max.z;
var horizontal_FOV = 2 * Math.atan (Math.tan (vertical_FOV/2) * aspectRatio);
var distance_vertical = height / (2 * Math.tan(vertical_FOV/2));
// alert ('vertical' + distance_vertical);
var distance_horizontal = width / (2 * Math.tan(horizontal_FOV/2));
// alert ('horizontal' + distance_horizontal);
var z_distance = distance_vertical >= distance_horizontal? distance_vertical : distance_horizontal;
camera.position.z = z_distance + max_z;
camera.position.y = 0 ;
camera.position.x = 0;
}
Хотя я думаю, что расчет расстояния до камеры правильный, я получаю следующий результат:
Я думал, что проблема заключается в изменении положения камеры по оси y, и поставил ее с помощью camera.position.y = height; но тогда это то, что я получаю:
Результат, который я хочу, следующий (это то, что я получил, панорамируя правой кнопкой мыши и перетаскивая ее вверх, пока она не уместится на всей рамке холста):
Я действительно надеюсь, что вы можете помочь с этим, потому что это сводило меня с ума весь день ;-)
Большое спасибо!