Я использую ваш шаблон webvr и пытаюсь сопоставить его с сеткой человеческого лица.
Как я это делаю:
1) прикрепить камеру к глазной кости
основной скрипт js:
//add camera to eye
mesh.skeleton.bones[ 22 ].add(camera);
//resets camera rotation
camera.rotation.set(0,0,0);
//looks at mesh up direction to face front
camera.lookAt( mesh.up );
//moves camera to middle of eyes
camera.position.set(10,10,0);
2) изменить webvr-manager.js, чтобы обновить положение и вращение кости шеи (передается как аргумент при инициализации), а в index.php я поменяю местами ось, чтобы она соответствовала осью HMD с осью кости:
webvr-manager.js:
if ( state.orientation !== null ) {
object.quaternion.copy( state.orientation );
}
if ( state.position !== null ) {
object.position.copy( state.position ).multiplyScalar( scope.scale );
}
основной скрипт js:
/* INSIDE UPDATE CYCLE */
// mesh.rotation.y+=0.1;
controls.update();
//resets bone position to default
mesh.skeleton.bones[ neckVRControlBone ].position.set(neckInitPosition.x,neckInitPosition.y,neckInitPosition.z) ;
//ROTATION SWAP
mesh.skeleton.bones[ neckVRControlBone ].rotation.x = pivot.rotation.y;
mesh.skeleton.bones[ neckVRControlBone ].rotation.y = - pivot.rotation.z;
mesh.skeleton.bones[ neckVRControlBone ].rotation.z = - tempRotation;
ОБНОВЛЕНИЕ 28.10.2015:
чтобы упростить и после некоторой дополнительной отладки понял, что это не проблема зажима.
Переформулированная проблема:
Чтобы сопоставить элементы управления VR с объектом, который имеет другую конфигурацию осей HMD/Cardboard и сохранить правильные правила вращения. Пример оси объекта: * x - вверх * y - глубина * z - сторона
Замена поворотов всего на object .rotation.x = object .rotation.z
приводит к тому, что после обновления элементов управления поворот в сторону приводит к нежелательному повороту после 45º.
Правила вращения для каждой оси разные:
- x вращается до PI, после чего инвертирует сигнал и продолжает изменяться в том же направлении, в котором он был;
- y вращается до PI/2 и после инвертирует направление (при увеличении начинает уменьшаться)
- г равно х.
Изменено webvr-polyfill.js
и исправлено для клавиатуры/мыши следующим образом:
MouseKeyboardPositionSensorVRDevice.prototype.getState = function() {
// this.euler.set(this.phi, this.theta, 0, 'YXZ');
this.euler.set( this.theta , 0, - this.phi, 'YXZ');
Но никоим образом не похожая линейка на другие контроллеры (HMD, картон и т.п.). Может быть, было бы неплохо, чтобы порядок вращения и сопоставление были доступны пользователю. Спасибо
Пример — попробуйте установить swappedAxis = true
в консоли js и повернуть шею.