You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

demo.js 1.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. window.addEventListener('load', async function() {
  2. try {
  3. const session = await startARSession();
  4. function animate(time, frame)
  5. {
  6. session.requestAnimationFrame(animate);
  7. }
  8. session.requestAnimationFrame(animate);
  9. }
  10. catch(error) {
  11. alert(error.message);
  12. }
  13. async function startARSession()
  14. {
  15. if(!AR.isSupported()) {
  16. throw new Error(
  17. 'This device is not compatible with this AR experience.\n\n' +
  18. 'User agent: ' + navigator.userAgent
  19. );
  20. }
  21. //AR.Settings.powerPreference = 'low-power';
  22. const tracker = AR.Tracker.ImageTracker();
  23. await tracker.database.add([{
  24. name: 'my-reference-image',
  25. image: document.getElementById('my-reference-image')
  26. }]);
  27. const viewport = AR.Viewport({
  28. container: document.getElementById('ar-viewport'),
  29. hudContainer: document.getElementById('ar-hud')
  30. });
  31. const video = document.getElementById('my-video');
  32. const useWebcam = (video === null);
  33. const source = useWebcam ?
  34. AR.Source.Camera({ resolution: 'md' }) :
  35. AR.Source.Video(video);
  36. const session = await AR.startSession({
  37. mode: 'immersive',
  38. viewport: viewport,
  39. trackers: [ tracker ],
  40. sources: [ source ],
  41. stats: true,
  42. gizmos: true,
  43. });
  44. const scan = document.getElementById('scan');
  45. tracker.addEventListener('targetfound', event => {
  46. if(scan)
  47. scan.hidden = true;
  48. });
  49. tracker.addEventListener('targetlost', event => {
  50. if(scan)
  51. scan.hidden = false;
  52. });
  53. return session;
  54. }
  55. });