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.

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