viewAngleControl.js 1.66 KB
import { Vector3, Matrix4 } from 'three';

export const setCameraViewAngle = (view, camera, control, container, initCameraPosition, target = new Vector3()) => {
    if (!camera) return;
    if (!control) return;
    const distance = 100;
    control.setViewPort(0, -container.clientHeight * 0.5 * 0.1);
    switch (view) {
        case 'front':
            camera.position.set(target.x, target.y + distance, target.z);
            break;
        case 'back':
            camera.position.set(target.x, target.y - distance, target.z);
            break;
        case 'left':
            camera.position.set(target.x + distance, target.y, target.z);
            break;
        case 'right':
            camera.position.set(target.x - distance, target.y, target.z);
            break;
        case 'top':
            camera.up.copy(new Vector3(0, -1, 0));
            camera.position.set(target.x, target.y, target.z + distance);
            control.setViewPort(0, 0);
            break;
        case 'bottom':
            camera.up.copy(new Vector3(0, 1, 0));
            camera.position.set(target.x, target.y, target.z - distance);
            control.setViewPort(0, 0);
            break;
        case 'angle':
            control.resetViewPort();
            camera.position.set(target.x + distance, target.y + distance, target.z + distance * 0.5);
            break;
        default:
            camera.position.copy(initCameraPosition);
            camera.position.applyMatrix4(new Matrix4().makeRotationZ(Math.PI));
            break;
    }
    control.target.copy(target);
    camera.lookAt(target);
    camera.updateMatrixWorld();
    camera.updateProjectionMatrix();
    control.update();
};