Tengo un CubeGeometry que la cámara está mirando, y quiero que la cámara haga un zoom para que el cubo sea completamente visible, pero no más grande.Cámara de ajuste para la forma visible Three.js
Mi intento inicial era convertir los vértices del cubo de la cámara sistema de coordenadas,
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();
}
pensé que esto iba a funcionar, pero a veces es demasiado pequeño, y otras veces demasiado grande (dependiendo de la posición de la cámara).
También necesito hacer esto para la cámara ortográfica.
Editar: Yo sé cómo hacer esto cuando el cubo está frente a la cámara, yo estoy buscando una manera de hacerlo cuando la cámara se mueve a algunos arbitraria (r, theta, phi) posición (coordenadas polares esféricas; r es realmente constante para mis propósitos).
Debería haber sido más claro en mi pregunta original. Lo que intento hacer es acercar o alejar automáticamente cuando la cámara gira alrededor del cubo. Es decir, cuando se ve el cubo en un ángulo. He editado la pregunta para aclarar esto. – sn6uv
¿Cómo va a encontrar la altura del cubo? ¿Es eso al calcular el cuadro delimitador? Obtendremos el cuadro delimitador del modelo después de la inicialización de la cámara. –