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

发布于 09-06 10:55 字数 60 浏览 23 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

仙女2022-09-13 10:55:13

可以的,在 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 );

以上希望对你帮助~

贱贱哒2022-09-13 10:55:13

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

冰之心2022-09-13 10:55:13

首先把视角调到自己想要的视角,然后用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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文