2017-05-11 420 views
1

我手動設置了我的perspective camerapositionfov THREE.JS。它的行爲如預期。但是,一旦我嘗試通過TrackBall Controls稍後與scene進行交互時,它只會顯示黑屏,沒有錯誤。使用軌跡球控件(THREEJS)手動設置攝像機位置和fov

JS Fiddle

相關代碼:

var bbox = new THREE.Box3().setFromObject(scene); 
var center = bbox.getCenter(); 
var size = bbox.getSize(); 

// update some controls properties 
controls.target.set(center.x, center.y, center.z); 

// position the camera on the y axis 
camera.position.set(center.x, center.y - size.y, center.z); 

// fit FOV 
var dist = size.y/2; 
var fov = 2 * Math.atan(size.z/(2 * dist)) * (180/Math.PI); 

camera.fov = fov; 

camera.updateProjectionMatrix(); 

哪一步我會爲了能夠再與scene

感謝

==== EDITS正確的交互失蹤

Wor王小提琴根據公認的答案:Fiddle

回答

2

我認爲,當相機「上」位置與攝像機位置和目標定義的矢量平行時,無法正確投影案例。攝像機向上位置應指定如何將視圖定位在與從攝像機位置到目標的矢量正交的平面上,但如果攝像機沿該平面的分量爲零,則無法工作。在代碼:

  • 相機 「向上」 位置是默認的(0,1,0)
  • 從攝像機位置到攝像機目標的矢量爲(0,size.y,0)

最簡單的解決方法是可能指定一個不同的照相機「上」,即

camera.up = new THREE.Vector3(0,0,1.); 

或任何其它載體不平行於y方向。

+0

謝謝! 在問題中用答案添加了一個新文件 - – Nicolas