我有一個相機正在查看的CubeGeometry,並且我希望相機縮放以便該立方體完全可見,但不會更大。調整相機的可見Three.js形狀
我最初的嘗試是立方體verticies轉換到攝像機座標系,
function toScreenXY(position, camera) {
var pos = position.clone();
var projScreenMat = new THREE.Matrix4();
projScreenMat.multiply(camera.projectionMatrix, camera.matrixWorldInverse);
projScreenMat.multiplyVector3(pos);
return pos;
}
function ScaleInView() {
camera.fov = 0.0;
for (var i=0; i<8; i++) {
proj2d = toScreenXY(cube.geometry.vertices[i],camera);
angle = 57.296 * Math.max(Math.atan(proj2d.x/proj2d.z), Math.atan(proj2d.y/proj2d.z));
camera.fov = Math.max(camera.fov,angle);
}
camera.updateProjectionMatrix();
}
我想這會工作,但有時它太小,而其他時間過大(視的位置相機)。
我還需要爲正交相機做到這一點。
編輯: 我知道如何當立方體面向相機做到這一點,我正在尋找一種方式來做到這一點,當攝像機移動到某個任意(R,θ,Φ)位置(球形極座標; r對我而言實際上是恆定的)。
我應該在我原來的問題中更加清楚。我想要做的是當相機在立方體周圍旋轉時自動放大或縮小。也就是說,它在一個角度觀察立方體時。我編輯了這個問題來澄清這一點。 – sn6uv
如何找到立方體的高度?是通過計算邊界框嗎?我們將在相機初始化後獲取模型的邊界框。 –