3 回答

TA貢獻1797條經(jīng)驗 獲得超4個贊
基于WestLangleys,這里的答案是如何使用固定的攝像機視野計算距離:
dist = height / 2 / Math.tan(Math.PI * fov / 360);

TA貢獻1839條經(jīng)驗 獲得超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物體的高度或?qū)挾仍谀睦铩τ诹⒎襟w/球體對象,您可以使用高度或?qū)挾?。對于長度或?qū)挾容^大的非立方體/非球體對象,請使用var objectSize = Math.max( width, height )以獲得更大的值。
請注意,如果您的物體位置不在0, 0, 0,則需要調(diào)整相機位置以包含偏移。
這是一個CodePen,顯示了這一點。相關(guān)部分:
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
);
您可以看到,如果您抓住窗口手柄并調(diào)整其大小,則球體仍占據(jù)屏幕高度的100%。此外,對象以正弦波方式(0.6 + ( 0.5 * Math.sin( Date.now() * 0.001 ) ))向上和向下縮放,以顯示攝像機位置考慮對象的比例。
添加回答
舉報