A-Frame user swipe effect for 360 Image

别说谁变了你拦得住时间么 提交于 2019-12-11 16:13:54

问题


I have a 360 Image using aframe.io library. And I would like to see how to create a "throw" effect. [Not sure what the effect calls] When user swipe left or right, the 360 images will rotate/spin to either direction and eventually finish after sometime (perhaps depends on how hard the swipe is?).

I am thinking of having a a-animation within a a-sky can do the trick, but I would like to ask someone whether this is the right approach.

The effect would be similar to http://photo-sphere-viewer.js.org/

Thank.

<a-sky id="vr-sky">
          <a-animation attribute="rotation"></a-animation>
        </a-sky>
        
        
<!-- Or use animation component -->
 <a-sky id="vr-sky"
          animation__rotation="property: rotation; dur: 2000; easing: easeInOut; to: 0 360 0">         
        </a-sky>

回答1:


One way to do this is using super-hands to handle the swipe-to-throw and aframe-physics-system to handle the spinning and deceleration (with a little help from aframe-physics-extras)

Live Demo

<!DOCTYPE html>
<html>
 <head>
  <title>Swipe to spin photosphere</title>
  <script src="https://aframe.io/releases/0.7.0/aframe.min.js"></script>
  <script src="//cdn.rawgit.com/donmccurdy/aframe-physics-system/v2.1.0/dist/aframe-physics-system.min.js"></script>
  <script src="https://unpkg.com/super-hands/dist/super-hands.min.js"></script>
  <script src="https://unpkg.com/aframe-physics-extras/dist/aframe-physics-extras.min.js"></script>
</head>

<body>
  <a-scene physics="gravity: 0">
    <a-assets>
      <a-mixin id="static" static-body="shape: sphere; sphereRadius: 0.2"></a-mixin>
      <!-- the z position of the grabber determines the leverage/force for swipes -->
      <a-mixin id="grabber" physics-collider position="0 0 -25"
               collision-filter="collisionForces: false"
               super-hands="colliderEvent: collisions;
                            colliderEventProperty: els;
                            colliderEndEvent: collisions;
                            colliderEndEventProperty: clearedEls">
      </a-mixin>
      <img id="pano" src="https://your image url here" crossorigin="anonymous"/>
      <video id="video360" src="https://your video url here" crossorigin="anonymous"/>
    </a-assets>
    <!-- progressive-controls sets up mouse/touch input -->
    <a-entity progressive-controls="maxLevel: gaze; gazeMixin: grabber"></a-entity>
    <a-entity id="bottom" mixin="static" position="0 -100 0"></a-entity>
    <a-entity id="top" mixin="static" position="0 100 0"></a-entity>
    <!-- use an entity with a sphere because a-sky seems to have its rotation locked down -->
    <!-- angularDamping sets the deceleration rate and the constraints limit rotation to Y axis -->
    <!-- src can be #pano or #video360 -->
    <a-entity id="sky" geometry="primitive: sphere; radius: 100" material="src: #pano; side:front" grabbable 
              scale="-1 1 1"
              dynamic-body="angularDamping: 0.5"
              constraint__1="type: pointToPoint; target: #bottom; collideConnected: false; pivot: 0 -100 0"
              constraint__2="type: pointToPoint; target: #top; collideConnected: false; pivot: 0 100 0">
    </a-entity>
  </a-scene>
</body>
</html>


来源:https://stackoverflow.com/questions/47518373/a-frame-user-swipe-effect-for-360-image

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!