【发布时间】:2012-06-30 13:17:14
【问题描述】:
我有一个相机正在查看的 CubeGeometry,我希望相机缩放以使立方体完全可见,但不会变大。
我最初的尝试是将立方体顶点转换为相机坐标系,
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,theta,phi)位置(球极坐标;r 实际上是常数我的目的)。
【问题讨论】:
标签: javascript three.js