A- рдлреНрд░реЗрдо рдФрд░ Tone.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ Audiovisual VR рдЕрдиреБрднрд╡ рдмрдирд╛рдПрдВ

рд╣реЗрд▓реЛ, рд╣реЗрдмреНрд░! рдореИрдВ рдЖрдкрдХреЛ рд╢реЙрди рд╕реБрд▓рд┐рд╡рд╛рди рджреНрд╡рд╛рд░рд╛ "рд╡реЗрдм рдкрд░ рдП-рдлрд╝реНрд░реЗрдо рдХреЗ рд╕рд╛рде рдПрдХ рд╡реАрдЖрд░ рдСрдбрд┐рдпреЛ / рд╡рд┐рдЬрд╝реБрдЕрд▓ рдПрдХреНрд╕рдкреАрд░рд┐рдпрдВрд╕ рдмрдирд╛рдирд╛" рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ ред

Oculus Go рдореЗрдВ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рд░рд┐рдпрд▓рд┐рдЯреА

рдП-рдлреНрд░реЗрдо рд╡реЗрдм рдкрд░ рдЖрднрд╛рд╕реА рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рд╣реИред рд╕рд┐рд░реНрдл рдПрдХ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╡реАрдЖрд░ рд╣реЗрд▓рдореЗрдЯ рдпрд╛ рд╡реАрдЖрд░-рд╕рдХреНрд╖рдо рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреЗ рд╕рд╛рде рдХреЛрдИ рднреА рдЦреБрдж рдХреЛ 3 рдбреА рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╡рд┐рд╕рд░реНрдЬрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред Tone.js рдзреНрд╡рдирд┐рдпрд╛рдБ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЕрдЧрд░ рд╡реЗ рд╕рдВрдпреБрдХреНрдд рд╣реЛрддреЗ рд╣реИрдВред

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдПрдВрдЧреЗ, рдП-рдлреНрд░реЗрдо рдХреЗ рд╕рд╛рде рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдХреЗрд╡рд▓ рдореВрд▓ HTML рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдПрдХ рд╕рдВрдкреВрд░реНрдг 3D рд╕реНрдерд╛рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ aframe-environment-Components рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рдиреАрдЪреЗ рд╣рдорд╛рд░реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдорд╛рд░реНрдХрдЕрдк рд╣реИред

<!DOCTYPE html>
<html>
<head>
  <title>Basic Scene with Environment - A-Frame</title>
  <meta name="description" content="Basic Scene with Environment - A-Frame">
  <script src="https://aframe.io/releases/1.0.4/aframe.min.js">  </script>
  <script src="https://unpkg.com/aframe-environment-component@1.1.0/dist/aframe-environment-component.min.js"></script>
</head>
<body>
  <a-scene environment="preset: starry">
    <a-camera>
      <a-entity cursor="fuse: true; fuseTimeout: 500"
            position="0 0 -1"
            geometry="primitive: ring; radiusInner: 0.02; radiusOuter: 0.03"
            material="color: black; shader: flat">
      </a-entity>    
    </a-camera>
  </a-scene>
</body>
</html>

рддрддреНрд╡ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:
<a-entity cursor>
рдпрд╣ рд╣рдорд╛рд░реЗ рд╕реЗрд▓ рдХреЗ рдЕрдВрджрд░ рд╣реЛрддрд╛ рд╣реИред рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж, рд╡рд╣ рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рднрд░реА рд╣реБрдИ рд╣реИред

рдкреГрд╖реНрда рдХреЛ рдЦреЛрд▓рддреЗ рд╣реБрдП, рдЖрдкрдХреЛ рдкреГрдереНрд╡реА рдкрд░ рддреАрди рдЖрдпрд╛рдореА рдЖрдХрд╛рд╢, рддрд╛рд░реЗ рдФрд░ рдПрдХ рдЧреНрд░рд┐рдб рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕рдм рд╡рд╛рддрд╛рд╡рд░рдг-рдкрд░реНрдпрд╛рд╡рд░рдг-рдШрдЯрдХ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм рд╣рдордиреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдерд╛:

<a-scene environment=тАЭpreset: starryтАЭ>

рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд╕ рдПрдХ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЬреЛрдбрд╝реЗрдВред рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдЖрдкрдХреА рдкрд╕рдВрдж рдХреЗ 16 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░реНрдпрд╛рд╡рд░рдг рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИрдВред

рддрд╛рд░реЛрдВ рд╕реЗ рднрд░рд╛ рдЖрд╕рдорд╛рди

рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╣реИ, рдЕрдВрддрд░рд┐рдХреНрд╖ рд╢рд╛рдВрдд рд╣реИред рдЖрдЗрдП рдЕрдкрдиреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдЧреНрд░рд╣ рдХреА рд╕рддрд╣ рдХреА рддрд░рд╣ рдмрдирд╛рдПрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЧреНрд░рд┐рдб рдХреЛ рд╣рдЯрд╛ рджреЗрдВрдЧреЗ рдФрд░ рдкреГрдереНрд╡реА рдХреА рдмрдирд╛рд╡рдЯ рдХреЛ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ, рдмрджрд▓рддреЗ рд╣реБрдП:

<a-scene environment="preset: starry">

рдкрд░

<a-scene environment="preset: starry; grid: none; groundTexture: walkernoise">

рдкреЗрдЬ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЧреНрд░рд╣ рдЕрднреА рднреА рдкреГрдереНрд╡реА рдкрд░ рдХреБрдЫ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрдзреЗрд░рд╛ рд╣реИред рд╣рдорд╛рд░реЗ рджреГрд╢реНрдп рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдЬреЛрдбрд╝рдХрд░ рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВред

<a-entity light="type: ambient; color: #CCC"></a-entity>

рдЗрд╕рдХреЗ рд╕рд╛рде, рджреГрд╢реНрдп рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдкреНрд░рдХрд╛рд╢ рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп

рдЕрдм рдЬрдм рд╣рдордиреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рд╣реИ, рддреЛ рдПрдХ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред

рдШрдЯрдХ рдирд┐рд░реНрдорд╛рдг


рдП-рдлреНрд░реЗрдо рдПрдХ рдЗрдХрд╛рдИ-рдШрдЯрдХ-рдкреНрд░рдгрд╛рд▓реА рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдпрд╣ рдЖрдкрдХреЛ рдШрдЯрдХреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ рджреГрд╢реНрдп рдореЗрдВ рд╕рдВрд╕реНрдерд╛рдУрдВ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдПрдХ synth.js рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВред

AFRAME.registerComponent('synth', {
  schema: {
    //   .
  },

  init: function () {
    //     .
  },

  update: function () {
    //     .
  },

  remove: function () {
    //       .
  },
  tick: function (time, timeDelta) {
    //     ()  .
  }
});

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреАрд╡рди рдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдП-рдлреНрд░реЗрдо рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рд╣рдорд╛рд░реА рд╡реЗрдмрд╡реАрдЖрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдШрдЯрдХ рдЖрдзрд╛рд░ рддреИрдпрд╛рд░ рд╣реИ, рдЪрд▓реЛ Tone.js. рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ

Tone.js


Tone.js - рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╕рдВрдЧреАрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛, рд╡реЗрдм рдСрдбрд┐рдпреЛ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╣реИред Tone.js рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рдмрдирд╛рдирд╛ рд╕рд░рд▓ рд╣реИ - рдмрд╕ рдПрдХ рдкрдВрдХреНрддрд┐ рд▓рд┐рдЦреЗрдВ:

var synth = new Tone.Synth().toMaster()

рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдерд░рдерд░рд╛рдирд╡рд╛рд▓рд╛ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЖрдЧреЗ рдЕрдиреБрдХреВрд▓рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ:

const synth = new Tone.Synth({
  volume: -15, // -15dB
  oscillator: {
    type: 'triangle' //   -  ""
  },
  envelope: {
    attack: 0.05, //  -  
    release: 2 //   - 
  }
}).toMaster()

рдЗрд╕ рдХреЛрдб рдХреЛ рд╕реАрдзреЗ рд╣рдорд╛рд░реЗ рдШрдЯрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ synth.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ ред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЛ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╛рдж рд░рдЦреЗрдВ <-a-unit рдХрд░реНрд╕рд░> рд╣рдордиреЗ рдХреИрдорд░реЗ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рд╣реИ? рдЗрд╕ рдХрд░реНрд╕рд░ рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдлреНрдпреВрдЬ = "рд╕рд╣реА" рд╣реИ ред рдпрд╣ рд╣рдореЗрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдХрд┐ рдХрд░реНрд╕рд░ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред рдлреНрдпреВрдЬ рдХреЗ рд▓рд┐рдП рдШрдЯрдХ рдореЗрдВ рдПрдХ EventListener рдЬреЛрдбрд╝реЗрдВ ред

рд╣рдо рдЬреАрд╡рди рдЪрдХреНрд░ рдХреА init рдкрджреНрдзрддрд┐ рдореЗрдВ рдПрдХ EventListener рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЯреНрд░рд┐рдЧрд░ рдирд╛рдордХ рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ T..s.s.

...
init: function () {
  //  EventListener     fuse
  this.el.addEventListener('fusing', this.trigger.bind(this))
},
//  ,  tone.js
trigger: function () {
  //tone.js ,     
  synth.triggerAttackRelease(this.data.note, this.data.duration)
},
...

рджреГрд╢реНрдп рдореЗрдВ рдПрдХ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рдШрдЯрдХ рдЬреЛрдбрд╝реЗрдВред


рд╣рдордиреЗ рдШрдЯрдХ рдмрдирд╛рдпрд╛ рд╣реИ, рдпрд╣ рдП-рдлреНрд░реЗрдо рджреГрд╢реНрдп рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ Tone.js рдФрд░ рдПрдХ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рдШрдЯрдХ рдХреЛ рд╣рдорд╛рд░реЗ рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ред рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдХреНрд░рдо рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ - synth.js рдХреЛ Tone.js. рдХреЗ рдмрд╛рдж рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

...
<script src="https://unpkg.com/tone@13.8.25/build/Tone.js"></script>
<script src="synth.js"></script>
</head>
...

рд╣рдореЗрдВ рдХрдИ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рд╣рдо рдШрдЯрдХ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВрдЧреЗред рд╣рдорд╛рд░реЗ рджреГрд╢реНрдп рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд╛рдирдХ рдП-рдлрд╝реНрд░реЗрдо рдЖрдХрд╛рд░ рдЬреЛрдбрд╝реЗрдВред

<a-scene>
...
<a-box synth="note: E4" position="-1 0.5 -3" rotation="0 45 0" color="#4CC3D9"></a-box>
<a-sphere synth="note: C4" position="0 1.25 -5" radius="1.25" color="#EF2D5E"></a-sphere>
<a-cylinder synth="note: G4" position="1 0.75 -3" radius="0.5" height="1.5" color="#FFC65D"></a-cylinder>
...

рд╕рдВрд╢реНрд▓реЗрд╖рдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ ред рдпрд╣ рд╡рд╣ рдШрдЯрдХ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдмрдирд╛рдпрд╛ рд╣реИред Name рд╕рд┐рдВрде тАЩрд╡рд╣ рдирд╛рдо рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдордиреЗ рдкрдВрдЬреАрдХрд░рдг рдХрд┐рдпрд╛ рдерд╛
AFRAME.registerComponent ('рд╕рд┐рдВрде', {})
рдФрд░ рд╣рдордиреЗ рдШрдЯрдХ рдЖрд░реЗрдЦ рдореЗрдВ "рдиреЛрдЯ" рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ред рдПрдХ "рдЕрд╡рдзрд┐" рд╕рдВрдкрддреНрддрд┐ рднреА рд╣реИ - рд╣рдо рдЗрд╕реЗ рдиреЛрдЯ рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
рд╕рд┐рдВрде = "рдиреЛрдЯ: рдИ 4; рдЕрд╡рдзрд┐: 8n ┬╗
рдкреВрд░реЗ рдиреЛрдЯ рдХрд╛ 1/8 рдЦреЗрд▓реЗрдВрдЧреЗ, рдорд╛рдирдХ 1/4 рдирд╣реАрдВред

рдЕрдм, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рджреГрд╢реНрдп рдХреЛ рдЦреЛрд▓рдиреЗ рдкрд░, рд╣рдо рдЕрдкрдиреЗ рдЖрдВрдХрдбрд╝реЗ рджреЗрдЦреЗрдВрдЧреЗ, рдФрд░ рдЬрдм рдЖрдк рдЙрди рдкрд░ рд╣реЛрд╡рд░ рдХрд░реЗрдВрдЧреЗ, рддреЛ рд╣рдорд╛рд░реЗ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рдШрдЯрдХ рд╕реЗ рдиреЛрдЯ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рдВрдЧреАрдд рдХреЗ рдЖрдВрдХрдбрд╝реЗ

Oculus Go рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдЕрдм рд╣рдорд╛рд░рд╛ рджреГрд╢реНрдп рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рд╕реНрдХреНрд░реАрди рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рдХрд░реНрд╕рд░ рддрдп рд╣реЛ рдЧрдпрд╛ рд╣реИред рд╡реАрдЖрд░ рд╣реЗрд▓рдореЗрдЯ рдкрд░, рдЗрд╕реЗ "рд╡рд┐рдЬрд╝реБрдЕрд▓" рдирд┐рдпрдВрддреНрд░рдг рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд┐рд░ рдХреЛ рдореЛрдбрд╝рдХрд░, рдХрд░реНрд╕рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЖрдВрджреЛрд▓рди рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝реЗрдЧрд╛ред рдпрд╣ рдПрдХ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрднрд╡ рд╣реИ рдФрд░ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рд╡реАрдЖрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдЕрдкрдиреА рдмрд╛рдЬреБрдУрдВ рдХреЛ рдЗрдзрд░-рдЙрдзрд░ рдШреБрдорд╛рддреЗ рд╣реБрдП рдФрд░ рд╕рдВрдЧреАрдд рдХреЛ рдордЬрд╝реЗрджрд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЪрд▓рд┐рдП Oculus Go рдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рджреГрд╢реНрдп рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдорд╛рд░реЗ рджреГрд╢реНрдп рдореЗрдВ рдХреБрдЫ рдЗрдХрд╛рдЗрдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ - рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ рд░реЗрдХрд╛рд╕реНрдЯрд░ред

...
<a-entity oculus-go-controls>
<a-entity laser-controls raycaster="far: 200; interval: 100"></a-entity>
...

рдпрд╣рд╛рдБ Oculus Go рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдЕрдкрдиреА рдЗрдХрд╛рдИ рд╣реИ, рд╕рд╛рде рд╣реА рд░реЗрдХрд╛рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИ, рдЬреЛ рд╣рд░ 100 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдкрд░ рдЪрд▓реЗрдЧрд╛ред

рдЕрдм рдЪрд▓реЛ Oculus рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рдШрдЯрдХ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░реЗрдХреЗрд╕реНрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред

AFRAME.registerComponent('synth', {
  dependencies: ['raycaster'],
...

рдлрд┐рд░, init рд╡рд┐рдзрд┐ рдореЗрдВ, EventListener рдХреЛ рдмрджрд▓реЗрдВ - рдЗрд╕реЗ рдШрдЯрдирд╛ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
raycaster-рдЪреМрд░рд╛рд╣реЗ


init: function () {
  this.el.addEventListener('raycaster-intersection', this.trigger.bind(this))
},
...

рдУрдХреБрд▓рд╕ рдЧреЛ рдореЗрдВ рджреГрд╢реНрдп рдХреА рд╢реБрд░реБрдЖрдд рдЕрдм рдЖрдкрдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рджрд┐рдЦрд╛рдиреА рдЪрд╛рд╣рд┐рдП - рдФрд░ рд▓реЗрдЬрд░ рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рдХреЛ рддрдм рдЦреЗрд▓рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдЖрдк рдЖрдВрдХрдбрд╝реЛрдВ рдкрд░ рдордВрдбрд░рд╛рддреЗ рд╣реИрдВред

рдУрдХреБрд▓рд╕ рдЬрд╛рдирд╛

рдпрджрд┐ рдЖрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдХрд░реАрдм рд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдБ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ - glitch.com/~space-synth-vr

рд╣рд┐рд░рд╛рд╕рдд рдореЗрдВ


рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡реАрдЖрд░ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рджреГрд╢реНрдп рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЕрд╡рд╕рд░ рд╣реИрдВред рд╣рдо рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░реИрдХреНрд╢рди, рдЕрдзрд┐рдХ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рдФрд░ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдХреБрдЫ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЪреЗрддрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рджреГрд╢реНрдп рдмрдврд╝рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдП-рдлреНрд░реЗрдо рдореЗрдВ рдХрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИрдВред

рдпрд╣рд╛рдБ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ рд░реЗрдХрд╛рд╕реНрдЯрд░

рдЕрд╡рдпрд╡ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдФрд░ рдХрдВрдЯреНрд░реЛрд▓ рдЯреЛрди рд╣реИрдВред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрд░реЛрдд рдХреЛрдб рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред






All Articles