首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Autodesk锻件中旋转相机模型

在Autodesk锻件中旋转相机模型
EN

Stack Overflow用户
提问于 2018-11-14 11:44:14
回答 1查看 477关注 0票数 0

我已经创建了一个扩展,它将摄像机围绕着上传在水桶中的Revit模型旋转,但是如何使相机在单击工具栏中的按钮后一直围绕模型旋转。此外,如何再次单击相同的按钮来停止旋转?下面的代码是我用来旋转相机,一旦按钮被点击。

代码语言:javascript
复制
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);
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-14 20:24:32

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

代码语言:javascript
复制
  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()
  };

根据代码片段和活生生的插图,检查我的扩展回购以获得完整的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53299467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档