请问要如何通过编程来改变 Forge Viewer 相机位置

您好,我想知道有没有办法通过写代码的方式来改变 Forge Viewer 相机的位置,这是有办法做到的吗?

阅读 4.3k
3 个回答

可以的,在 Forge Viewer 里头有很多方法可以做到这点,这边我会以 AutoCam.goToView() 来示范,以下样例假设相机的新位置是 ( x1, y1, z1 ):

// 获取当前相机信息
const currentView = viewer.autocam.getCurrentView();
cosnt eye = viewer.navigation.getEyeVector();
const eyeDir = viewVec.normalize();
const distance = eye.length();                         //!<<< 相机与焦点的距离

const newPosition = new THREE.Vector3( x1, y1, z1 );   //!<<< 相机的新位置
const target = eye.add( newPosition );                 //!<<< 计算新焦点位置

// 产生新相机信息
const newView = {
    position: newPosition.clone(),                     //!<<< 相机的新位置
    up: currentView.up.clone(),
    center: target.clone(),                            //!<<< 相机的新焦点
    pivot: target.clone(),                             //!<<< 相机的新环绕(Orbit)中心
    fov: currentView.fov,
    worldUp: currentView.worldUp.clone(),
    isOrtho: (currentView.isOrtho === false)
};

// 将信息更新到相机上
viewer.autocam.goToView( newView );

以上希望对你帮助~

goToView的性能吃不消
.Viewing.Viewer3D.navigation.getCamera()
获取到相机之后操作相机
然后更新this._navapi.setView(newPosition, newTarget);

新手上路,请多包涵

首先把视角调到自己想要的视角,然后用viewer.autocam.getCurrentView();获取当前自己想要的这个视角。以下的值在你想要的当前视角的结构里可以找到,直接进行替换就好。有值的替换值,其他的不用动。这只是基础的写法,可以根据自己想要的效果进行优化。

 //初始化模型视角
        const eye = viewer.navigation.getEyeVector();
        const newPosition = new THREE.Vector3(-508.8144114263626, -280.3273446852653, 266.7830755532873);
        const target = eye.add( newPosition );
        const up=new THREE.Vector3(0.3887726104595453,0.12839765943236225,0.9123430815262217);
        const worldUp=new THREE.Vector3(0,0,1);
        const center=new THREE.Vector3(-446.59100073377203,-254.7583215368543,236.66966636633654);
        const pivot=new THREE.Vector3(-464.94482906148437,-217.88815652611004,230.05122957846686);
        const defaultViewer ={
            position: newPosition.clone(),                   
            up: up.clone(),
            center: center.clone(),                          
            pivot: pivot.clone(),                           
            fov: 53.130101602940826,
            worldUp: worldUp.clone(),
            isOrtho: false
        };        
        // 将信息更新到相机上       
        viewer.autocam.goToView(defaultViewer);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题