2017-02-21 60 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