【问题标题】:Rotate camera around model in Autodesk Forge在 Autodesk Forge 中围绕模型旋转相机
【发布时间】:2019-04-17 09:01:30
【问题描述】:

我创建了一个扩展程序,可以围绕上传到制作的存储桶中的 Revit 模型旋转相机,但是在单击工具栏中的按钮后,如何让相机不断地围绕模型旋转。另外,如何再次单击相同的按钮来停止旋转?下面的代码是我用来在单击按钮后旋转相机的代码。

var _this = this;
var _viewer = _this.viewer;
var turnTableToolbarButton = new Autodesk.Viewing.UI.Button('turnTableButton');
turnTableToolbarButton.onClick = function (e) { 

    const nav = _viewer.navigation;
    const up = nav.getCameraUpVector();
    var pos = nav.getPosition();
    const axis = new THREE.Vector3(0, 0, 1);
    const speed = 10.0 * Math.PI / 180;

    const matrix = new THREE.Matrix4().makeRotationAxis(axis, speed * 0.1);

    pos.applyMatrix4(matrix);
    up.applyMatrix4(matrix);

    nav.setView(pos, new THREE.Vector3(0, 0, 0));
    nav.setCameraUpVector(up);
    var viewState = _viewer.getState();
    _viewer.restoreState(viewState);
};

【问题讨论】:

    标签: javascript autodesk-forge autodesk-viewer


    【解决方案1】:

    我认为您在这里需要的是使用 requestAnimation,您的按钮停止或启动对新帧的请求:

      let started = false;
    
      let rotateCamera = () => {
          if (started) {
              requestAnimationFrame(rotateCamera);
          }
    
          const nav = viewer.navigation;
          const up = nav.getCameraUpVector();
          const axis = new THREE.Vector3(0, 0, 1);
          const speed = 10.0 * Math.PI / 180;
          const matrix = new THREE.Matrix4().makeRotationAxis(axis, speed * 0.1);
    
          let pos = nav.getPosition();
          pos.applyMatrix4(matrix);
          up.applyMatrix4(matrix);
          nav.setView(pos, new THREE.Vector3(0, 0, 0));
          nav.setCameraUpVector(up);
          var viewState = viewer.getState();
          // viewer.restoreState(viewState);
    
      };
    
      turnTableToolbarButton.onClick = function (e) {
          started = !started;
          if (started) rotateCamera()
      };
    

    查看my repo of extensions 以获取基于您的 sn-p 和现场插图的完整代码。

    【讨论】:

    • 我保留你的方法是为了证明它有效,但我担心它需要一些优化。我会做一些调查,稍后用更优化的方法更新我的 repo。
    • 谢谢,我使用了上面提供的代码,模型现在可以完美旋转了。
    猜你喜欢
    • 2021-10-02
    • 2014-11-01
    • 1970-01-01
    • 2016-11-23
    • 2016-09-22
    • 2018-08-03
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多