如何解决使用三个js在将几何创建的Autodesk Viewer上将摄像机从A点移动到B点
我正在尝试将相机视图状态从A点移至B点。 为此,我在Autodesk Viewer中使用LineDashedMaterial创建了一条路径,并且能够创建并显示从点A到B的线。
这是代码
geometry = new THREE.Geometry();
geometry.vertices.push(getBoundingBox([2112]).center(),getBoundingBox([2109]).center());
material = new THREE.LineDashedMaterial({color: 0xFF0000,dashSize: 3,gapSize: 1,transparent: true,depthWrite: false,depthTest: true,});
checkLinedistance = geometry.computeLinedistances();
geometry.linedistancesNeedUpdate = true;
nop_VIEWER.impl.matman().addMaterial('material',material,true);
line= new THREE.Line(geometry,material);
nop_VIEWER.impl.sceneAfter.skipDepthTarget = true;
nop_VIEWER.impl.sceneAfter.skipIdTarget = true;
nop_VIEWER.impl.sceneAfter.add(line);
现在,我遇到了要按照线/路径(A到B)的方向导航或移动相机的问题。 我现在使用的是示例模型,认为这将是一栋具有A和B房间的建筑物。
2。有什么方法可以从行通过的地方获取所有矢量,我基本上需要相机运动的位置,目标和upVector
3。有什么方法可以在伪造查看器api中使用dbid获取从A到B的所有矢量或点吗?
4。我尝试用forge viewer来建立Three.js,但是似乎很困难。
This实际上是我要实现的目标,但我需要在伪造查看器中显示视口,而不是移动的几何图形
解决方法
Forge Viewer的导航系统支持使用setRequestTransition
方法对自定义相机状态进行平滑的线性插值,例如:
let newCameraPosition = new THREE.Vector3(1.0,2.0,3.0);
let newCameraTarget = new THREE.Vector3(4.0,5.0,6.0);
let fov = viewer.navigation.getHorizontalFov();
viewer.navigation.setRequestTransition(true,newCameraPosition,newCameraTarget,fov);
此过渡的默认持续时间为1秒,因此,如果您具有要使用相机跟踪的路径的顶点列表,则可以使用以下方法进行操作:
function followPath(viewer,vertices,delayMs) {
let index = 0;
let timer = setInterval(function () {
if (index >= vertices.length) {
clearInterval(timer);
return;
}
let newPos = vertices[index];
let newTarget = vertices[index + 1];
if (!newTarget) {
let oldPos = viewer.navigation.getPosition();
let oldTarget = viewer.navigation.getTarget();
newTarget = new THREE.Vector3(
newPos.x + (oldTarget.x - oldPos.x),newPos.y + (oldTarget.y - oldPos.y),newPos.z + (oldTarget.z - oldPos.z)
);
}
viewer.navigation.setRequestTransition(true,newPos,newTarget,viewer.navigation.getHorizontalFov());
index++;
},delayMs);
}
followPath(viewer,[
new THREE.Vector3(10,20,30),new THREE.Vector3(40,50,60),new THREE.Vector3(70,80,90),new THREE.Vector3(0,10,0)
],2000);
如果您需要更大的灵活性(例如,在曲线周围进行插值,自定义缓入/缓出等),您仍然可以使用three.js或其他动画库,并且只需控制摄像机的位置并自己定位即可。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。