我想在动画中修改相机的FOV值。不幸的是,一旦我实现了FOV值,我就会发现场景变小了。
所以我一直在想,FOV值和透视相机的距离位置之间的数学关系是什么?
这个想法是通过修改相机位置来保持相同的场景大小(而FOV值不断变化)。
非常感谢。
编辑1:
以下是一个示例,说明我的问题:当我实现相机的FOV值(从4到45)时,我的正方形与相机之间的距离会改变。如何防止这种情况?
所以我一直在想,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>