亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使相機適合對象

如何使相機適合對象

素胚勾勒不出你 2019-07-30 14:36:28
如何使相機適合對象使用three.js我有以下內容。包含多個Object3D實例的場景幾個預定義的攝像頭Vector3位置如果屏幕調整大小,畫布的動態寬度/高度用戶可以選擇一個對象(從上面)用戶可以選擇攝像機位置(從上方)給定正在查看的對象和攝像機位置,他們選擇如何計算最終攝像機位置以“最佳地適應”屏幕上的對象?如果在某些屏幕上“按原樣”使用攝像機位置,則對象會在我的視口邊緣流血,而其他位置則顯得較小。我相信可以將物體安裝到相機平截頭體上,但卻找不到合適的物體。
查看完整描述

3 回答

?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

基于WestLangleys,這里的答案是如何使用固定的攝像機視野計算距離:

dist = height / 2 / Math.tan(Math.PI * fov / 360);


查看完整回答
反對 回復 2019-07-30
?
紫衣仙女

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


查看完整回答
反對 回復 2019-07-30
  • 3 回答
  • 0 關注
  • 408 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號