Я хотел бы изменить значение FOV моей камеры во время анимации. К сожалению, как только я применяю значение FOV, я вижу, что моя сцена становится меньше.
Итак, мне интересно, какова математическая связь между значением FOV и расстоянием от камеры в перспективе?
Идея состоит в том, чтобы иметь одну и ту же сцену (один и тот же размер за счет изменения положения камеры) при изменении значения FOV.
Большое тебе спасибо.
ИЗМЕНИТЬ 1:
Вот фрагмент, который иллюстрирует мою проблему: когда я применяю значение FOV моей камеры (от 4 до 45), расстояние между моим квадратом и моей камерой изменяется. Как я могу это предотвратить?
let W = window.innerWidth, H = window.innerHeight;
let renderer = new THREE.WebGLRenderer( { antialias: true, alpha: true } );
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( W, H );
document.body.appendChild( renderer.domElement );
let camera = new THREE.PerspectiveCamera( 4, W/H, 1, 100 );
let scene = new THREE.Scene();
camera.position.set(0,0,14);
camera.lookAt(0,0,0);
let geo = new THREE.BoxGeometry(0.5, 0.5, 0.5);
let mat = new THREE.MeshNormalMaterial();
let mesh = new THREE.Mesh(geo, mat);
mesh.rotation.set(0.2,0.4,-0.1);
scene.add(mesh);
renderer.render(scene, camera);
let progress = {};
progress.fov = 4;
TweenMax.to(progress, 2,{
fov:45,
onUpdate:function(){
camera.lookAt(0,0,0);
camera.updateProjectionMatrix();
camera.fov = progress.fov;
renderer.render(scene, camera);
},
repeat:-1,
ease:Power3.easeInOut
});
body{margin:0;padding:0;overflow:hidden;background: #666;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/2.1.3/TweenMax.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/108/three.js"></script>