Ho una CubeGeometry che la fotocamera sta guardando e voglio che la fotocamera ingrandisca in modo che il cubo sia interamente visibile, ma non più grande.Regolazione della fotocamera per la forma Three.js visibile
Il mio primo tentativo è stato quello di convertire i verticies cubo alla telecamera sistema di coordinate,
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();
}
Ho pensato che questo avrebbe funzionato, ma a volte è troppo piccolo, e altre volte troppo grande (a seconda della posizione del telecamera).
Ho anche bisogno di fare questo per macchina ortografica.
Edit: So come fare questo quando il cubo si trova di fronte alla telecamera, sto cercando un modo per farlo quando la fotocamera viene spostata a qualche arbitraria (r, theta, phi) posizione (coordinate polari sferiche; r è in realtà costante per i miei scopi).
Avrei dovuto essere più chiaro nella mia domanda iniziale. Quello che sto cercando di fare è ingrandire o ridurre automaticamente quando la telecamera gira attorno al cubo. Cioè, quando guarda il cubo da un angolo. Ho modificato la domanda per chiarire questo. – sn6uv
Come si trova l'altezza del cubo. È questo calcolando il rettangolo di selezione? Otterremo il rettangolo di selezione del modello dopo l'inizializzazione della telecamera. –