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 ) ))向上和向下縮放,以顯示攝像機位置考慮對象的比例。
添加回答
舉報
