3 回答
TA贡献1797条经验 获得超4个赞
基于WestLangleys,这里的答案是如何使用固定的摄像机视野计算距离:
dist = height / 2 / Math.tan(Math.PI * fov / 360);
TA贡献1839条经验 获得超15个赞
要计算将相机放置到适合屏幕的对象的距离,您可以使用此公式(在Javascript中):
// Convert camera fov degrees to radians
var fov = camera.fov * ( Math.PI / 180 );
// Calculate the camera distance
var distance = Math.abs( objectSize / Math.sin( fov / 2 ) );
objectSize物体的高度或宽度在哪里。对于立方体/球体对象,您可以使用高度或宽度。对于长度或宽度较大的非立方体/非球体对象,请使用var objectSize = Math.max( width, height )以获得更大的值。
请注意,如果您的物体位置不在0, 0, 0,则需要调整相机位置以包含偏移。
这是一个CodePen,显示了这一点。相关部分:
var fov = cameraFov * ( Math.PI / 180 );
var objectSize = 0.6 + ( 0.5 * Math.sin( Date.now() * 0.001 ) );
var cameraPosition = new THREE.Vector3(
0,
sphereMesh.position.y + Math.abs( objectSize / Math.sin( fov / 2 ) ),
0
);
您可以看到,如果您抓住窗口手柄并调整其大小,则球体仍占据屏幕高度的100%。此外,对象以正弦波方式(0.6 + ( 0.5 * Math.sin( Date.now() * 0.001 ) ))向上和向下缩放,以显示摄像机位置考虑对象的比例。
添加回答
举报