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.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /**
  2. * @file MARTINS.js WebAR demo with A-Frame
  3. * @version 1.1.0
  4. * @author Alexandre Martins (https://github.com/alemart)
  5. * @license LGPL-3.0-or-later
  6. */
  7. async function startARSession(canvas)
  8. {
  9. if(!Martins.isSupported()) {
  10. throw new Error(
  11. 'Use a browser/device compatible with WebGL2 and WebAssembly. ' +
  12. 'Your user agent is ' + navigator.userAgent
  13. );
  14. }
  15. if(!(canvas instanceof HTMLCanvasElement))
  16. throw new Error(`startARSession expects a <canvas>`);
  17. //Martins.Settings.powerPreference = 'low-power';
  18. const tracker = Martins.Tracker.ImageTracker();
  19. await tracker.database.add([{
  20. name: 'my-reference-image',
  21. image: document.getElementById('my-reference-image')
  22. }]);
  23. const viewport = Martins.Viewport({
  24. canvas: canvas,
  25. container: document.getElementById('ar-viewport'),
  26. hudContainer: document.getElementById('ar-hud')
  27. });
  28. const video = document.getElementById('my-video');
  29. const useWebcam = (video === null);
  30. const source = useWebcam ?
  31. Martins.Source.Camera({ resolution: 'md' }) :
  32. Martins.Source.Video(video);
  33. const session = await Martins.startSession({
  34. mode: 'immersive',
  35. viewport: viewport,
  36. trackers: [ tracker ],
  37. sources: [ source ],
  38. stats: true,
  39. gizmos: true,
  40. });
  41. const scan = document.getElementById('scan');
  42. tracker.addEventListener('targetfound', event => {
  43. session.gizmos.visible = false;
  44. if(scan)
  45. scan.hidden = true;
  46. });
  47. tracker.addEventListener('targetlost', event => {
  48. session.gizmos.visible = true;
  49. if(scan)
  50. scan.hidden = false;
  51. });
  52. return session;
  53. }