камера aframe переключается между выходом vr и вводом vr

как можно переключаться между камерой на рабочем столе и VR? я хочу использовать курсор мыши на рабочем столе, и когда я вхожу в виртуальную реальность, он должен переключиться на другую камеру с помощью курсора.

вот мой код:

<a-entity id="cam-desktop" camera="userHeight: 1.6; zoom:1 " look-controls mouse-cursor>
</a-entity>


<a-entity id="cam-vr" camera="userHeight: 1.6; zoom:1 " look-controls>
    <a-animation begin="cursor-fusing" delay=" 3000" attribute="camera.zoom" from="1" to="4" dur="1000"></a-animation>
  <a-animation begin="click" delay="500" attribute="camera.zoom" from="4" to="1" dur="1000"></a-animation>
    <a-entity cursor="fuse: true; fuseTimeout:4000" geometry="primitive: ring; radiusInner: 0.02; radiusOuter: 0.03; thetaLength: 360; thetaStart: 0" rotation="0 0 90" position="0 0 -1" material="color: black; side: double; shader: flat">
    <a-animation begin="cursor-fusing" attribute="geometry.thetaLength" from="360" to="0" easing="linear" dur="3000"></a-animation>
    <a-animation begin="mouseleave" attribute="geometry.thetaLength" from="360" to="360" dur="0"></a-animation>
    </entity>
</a-entity>

большое спасибо!


person Stephan    schedule 05.07.2017    source источник


Ответы (1)


Вы можете создать компонент, который прослушивает события «enter-vr» и «exit-vr» и соответственно установить активную камеру:

AFRAME.registerComponent('scenelistener',{
   init:function(){
      let vrcam = document.querySelector("#cam-vr");
      let dcam = document.querySelector("#cam-desktop");
      let  vrmode = false;
      this.el.sceneEl.addEventListener('enter-vr',function(){
           if(!vrmode){
               dcam.setAttribute('active',false);
               vrcam.setAttribute('active',true);
               vrmode!=vrmode;
           }
      }
      this.el.sceneEl.addEventListener('exit-vr',function(){
           if(vrmode){
               dcam.setAttribute('active',true);
               vrcam.setAttribute('active',false);
               vrmode!=vrmode;
           }
      }
  }
});

На самом деле, вы можете просто вставлять слушателей куда угодно, более того, вы можете просто слушать любое событие и делать что-то в соответствии с полученным событием, я просто хотел показать вам концепцию.
Я не уверен, что произойдет, если активны 2+ камеры. , поэтому я сделал их ложными при изменении.
ОБНОВЛЕНИЕ
Я не заметил, что камеры являются сущностями, а не примитивами, поэтому вы должны установить атрибут следующим образом: setAttribute('camera','active',true)
У меня есть некоторые проблемы с курсором, поэтому я делаю его видимым и невидимым, в зависимости от состояния vr.
Рабочая скрипка (по крайней мере, переключатель камеры) здесь.

person Piotr Adam Milewski    schedule 05.07.2017
comment
я не понимаю, это не работает :-/ почему vr-cam и desktop-cam ложны и истинны одновременно? #cam-vr должен быть активен в vr и не активен в не-vr. и #cam-desktop активен в не-vr и не активен в vr. камера не должна быть активной в то же время. :-( - person Stephan; 06.07.2017
comment
я сделал так, чтобы они не были активны одновременно, в следующей строке я устанавливаю активным правильный, я могу поменять его на простую проверку - person Piotr Adam Milewski; 06.07.2017
comment
спасибо за помощь, но курсор переместился на землю под камеру. и переключатель не работает или я тупой для этого. проверьте это здесь: davidklapheck.de/webvr/navbar.html кажется, у меня есть попробовать другое решение. - person Stephan; 10.07.2017
comment
Огромное спасибо. оно работает! :-D ты лучший. если вы уже задавали здесь вопрос, но у вас есть идеи, почему анимация масштабирования в vr-режиме не работает? - person Stephan; 12.07.2017
comment
@ Стефан рад, что смог помочь, мне удалось воспроизвести проблему с масштабированием, но я понятия не имею, почему это не работает должным образом. - person Piotr Adam Milewski; 12.07.2017