在 Forge 查看器中控制相机

Posted

技术标签:

【中文标题】在 Forge 查看器中控制相机【英文标题】:Controlling camera in Forge viewer 【发布时间】:2017-07-11 15:06:48 【问题描述】:

我正在尝试在 Autodesk Forge Viewer 中控制相机。设置目标和位置似乎工作正常,但如果我尝试设置旋转或四元数它没有任何效果。

为了获取相机,我使用 getCamera 函数,然后在尝试设置参数后使用 applyCamera。

我想要实现的是使用手持设备上的设备方向来旋转模型。仅仅使用 alpha 和 beta 来设置目标并不是一个流畅的体验。

// get camera
var cam = _viewer.getCamera();

// get position
var vecPos = cam.position;

// get view vector
var vecViewDir = new THREE.Vector3();
vecViewDir.subVectors(cam.target,cam.position);

// get length of view vector
var length = vecViewDir.length();

// rotate alpha
var vec = new THREE.Vector3();
vec.y = length;
var zAxis = new THREE.Vector3(0,0,1);
vec.applyAxisAngle(zAxis,THREE.Math.degToRad(alpha));

// rotate beta
var vec2 = new THREE.Vector3(vec.x,vec.y,vec.z);
vec2.normalize();
vec2.negate();
vec2.cross(zAxis);
vec.applyAxisAngle(vec2,THREE.Math.degToRad(beta) + Math.PI / 2);

// add to camera
cam.target.addVectors(vecPos,vec);
_viewer.applyCamera(cam,false);

【问题讨论】:

你好,去年我做了一个用移动设备驱动Viewer摄像头的实验。这是一个关于它的博客。 forge.autodesk.com/cloud_and_mobile/2016/11/… 。我只是复制了一些 Viewer3D.js 代码来旋转相机。你能看看它是否有帮助吗?如果没有,您能否提供一些您玩过的代码 sn-p 供我们调查? 嗨。我在我的问题中添加了我第一次尝试的代码 sn-p。我也尝试使用四元数更改我的代码,但仍然不好。我设备的 alpha 和 beta 值非常“跳跃”。如果在 Chrome 中以模拟设备方向运行,它看起来不错。 【参考方案1】:

你需要使用 setView() 方法

_viewer.navigation.setView (pos, target) ;

并且可能还需要设置向上矢量,以确保按照您想要的方式定位相机。

_viewer.navigation.setCameraUpVector (upVector) ;

【讨论】:

我试过了,但结果是一样的。看起来真实设备的欧拉角不像 Chrome 中的模拟欧拉角。你可以在这里测试一个简单的例子:deviceorientationtest.azurewebsites.net 我可以仔细查看您的代码,但我已经在这里发布了一个示例vr.autodesk.io - 源代码:github.com/cyrillef/google-cardboard-vr - 如果这没有帮助,请告诉我,我会采取出道吧。

以上是关于在 Forge 查看器中控制相机的主要内容,如果未能解决你的问题,请参考以下文章

无头 chrome 中的 Autodesk forge 查看器,CONTEXT_LOST_WEBGL

在 Forge Autodesk 查看器中获取节点的属性

在 Autodesk Forge 查看器中显示链接文件

在 Forge 查看器中从 Revit 模型重建对象组

Navisworks 在 Forge 查看器中保存了视点

在 forge 查看器中编辑 revit 文件