2014-08-18 3 views
3

Я пытаюсь сделать объект подходящим внутри камеры усечения, и я прошел через все тригонометрии для этого, и это код, который я использовал.Создание объекта, который находится точно внутри камеры усечения в 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; 
} 

Хотя я думаю, что расчет расстояния камеры является правильным, это результат я получаю: enter image description here

Я думал, что вопрос изменения у положения камеры, и поставить его с camera.position.y = height; но это то, что я получаю:

enter image description here

В результате я хочу следующее (что-то я получил панорамирование с кнопкой правой кнопкой мыши мыши и перетащив его вверх, пока он не установлен весь холст кадр): enter image description here

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

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

+0

Как подобрать камеру к объекту: http://stackoverflow.com/questions/14614252/how-to-fit-camera-to-object – gaitat

ответ

1

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

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

+0

Большое спасибо за ваш быстрый ответ. Я изменил камеру.y на mesh1_BB.max.y/2, но тогда результат, который я получаю, - это нечто похожее на второе изображение в исходном посте. При экспериментировании и установке очень большой камеры. Камера продолжает указывать на (0,0,0). Я думаю, что это часть проблемы, камера должна указывать заранее, а не 0,0,0 ... – cyberjoac

+0

TrackballControls возился с моими свойствами камеры. Установка на высоте/2 делает работу значительно, спасибо вам большое! – cyberjoac