2017-02-21 10 views
0

Я пытаюсь управлять камерой в Autodesk Forge Viewer. Установка цели и положения, кажется, работает нормально, но если я попытаюсь установить вращение или кватернион, это не будет иметь никакого эффекта.Управление камерой в Forge viewer

Чтобы получить камеру, я использую функцию getCamera, а затем applyCamera после того, как попытался установить параметры.

То, что я пытаюсь достичь, - это использовать ориентацию устройства на карманном устройстве для поворота модели. Просто использование альфы и бета для установки цели не является гладким опытом.

// 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

Привет. Я добавил фрагмент кода того, что я впервые попробовал на свой вопрос. Я также пытался изменить свой код с помощью кватерниона, но он все еще не очень хорош. Значения альфа и бета с моего устройства очень «прыгающие». Если работать с имитируемой ориентацией устройства в 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