2017-02-21 28 views
0

我试图在Autodesk Forge查看器中控制摄像头。设置目标和位置似乎工作正常,但如果我尝试设置旋转或四元组,它没有任何作用。Forge查看器中的控制摄像头

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

我想要实现的是在手持设备上使用设备方向来旋转模型。仅仅使用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); 
+0

嗨,去年,我做了一个实验,用移动设备驱动Viewer的摄像头。这是一个关于它的博客。 https://forge.autodesk.com/cloud_and_mobile/2016/11/remotely-connect-forge-viewer-with-mobile-sensor-and-touch-by-javascript.html。我只是复制一些Viewer3D.js代码旋转相机。你可以看看它是否有帮助吗?如果没有,你能提供一些你为我们调查过的代码片段吗? –

+0

嗨。我已经添加了我第一次尝试访问我的问题的代码片段。我也尝试使用四元数来更改我的代码,但它仍然不好。我的设备的alpha和beta值非常“跳跃”。如果在Chrome中以模拟设备方向运行,它看起来不错。 – FrodeTo

回答

1

您需要使用的setView()方法

_viewer.navigation.setView (pos, target) ; 

,且也可能需要设置了向量,以确保您放置相机你想要的方式。

_viewer.navigation.setCameraUpVector (upVector) ; 
+0

我试过了,但结果是一样的。看起来来自真实设备的欧拉角度不像Chrome中的模拟角度。你可以在这里测试一个简单的例子:https://deviceorientationtest.azurewebsites.net/ – FrodeTo

+0

我可以仔细看看你的代码,但我已经在这里发布了一个样本http://vr.autodesk.io/ - 源代码: https://github.com/cyrillef/google-cardboard-vr - 让我知道如果这没有帮助,我会首次亮相它。 – cyrille