J'ai une CubeGeometry que la caméra regarde, et je veux que la caméra fasse un zoom pour que le cube soit entièrement visible, mais pas plus grand.Ajustement de la caméra pour la forme Three.js visible
Ma première tentative a été de convertir le cube vertices à la caméra système de coordonnées,
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();
}
Je pensais que cela fonctionnerait, mais parfois il est trop petit, et d'autres fois trop grand (en fonction de la position du caméra). Je dois également faire ceci pour la caméra orthographique.
Edit: Je sais comment faire lorsque le cube est face à la caméra, je suis à la recherche d'une façon de le faire lorsque l'appareil est déplacé dans une certaine position arbitraire (r, thêta, phi) (coordonnées polaires sphériques; r est réellement constant pour mes fins).
J'aurais dû être plus clair dans ma question originale. Ce que j'essaie de faire, c'est automatiquement zoomer ou dézoomer lorsque la caméra tourne autour du cube. C'est-à-dire, quand il regarde le cube sous un angle. J'ai édité la question pour clarifier ceci. – sn6uv
Comment allez-vous trouver la hauteur du cube.Si en calculant la boîte englobante? Nous obtiendrons la boîte de délimitation du modèle après l'initialisation de la caméra. –