Создание объекта, точно вписывающегося в усеченный конус камеры в Three.Js

Я пытаюсь сделать так, чтобы объект помещался внутри усеченной камеры, и для этого я прошел всю тригонометрию, и это код, который я использовал.

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; но тогда это то, что я получаю:

введите здесь описание изображения

Результат, который я хочу, следующий (это то, что я получил, панорамируя правой кнопкой мыши и перетаскивая ее вверх, пока она не уместится на всей рамке холста): введите здесь описание изображения

Я действительно надеюсь, что вы можете помочь с этим, потому что это сводило меня с ума весь день ;-)

Большое спасибо!


person cyberjoac    schedule 18.08.2014    source источник
comment
Как подогнать камеру к объекту: stackoverflow.com /вопросы/14614252/   -  person gaitat    schedule 18.08.2014


Ответы (1)


Я не проверял ваши расчеты расстояния, но вы смотрите прямо по оси Z, в то время как объект не центрируется по вертикали вокруг 0. Помещение вашего camera.y в mesh1_BB.max.y / 2 должно исправить это.

Если вы не хотите двигать камеру, по крайней мере, направьте ее на фактический центр объекта. В этом случае использование ограничительной рамки (выровненной по оси) больше не является правильным на 100%.

person Paul-Jan    schedule 18.08.2014
comment
Большое спасибо за ваш быстрый ответ. Я изменил camera.y на mesh1_BB.max.y/2, но результат, который я получаю, очень похож на второе изображение в исходном посте. Во время экспериментов и установки очень большой камеры камера продолжает указывать на (0,0,0). Я думаю, что это часть проблемы, камера должна быть направлена ​​вперед, а не на 0,0,0... - person cyberjoac; 18.08.2014
comment
TrackballControls возился со свойствами моей камеры. Установка его на высоте / 2 отлично справляется со своей задачей, большое спасибо !!! - person cyberjoac; 18.08.2014