[英]Rotate camera around model in Autodesk Forge
我創建了一個擴展程序,該擴展程序可以使相機圍繞Revit模型旋轉,該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);
};
我認為您在這里需要使用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()
};
根據您的代碼段和現場插圖,查看我的擴展庫回購以獲取完整代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.