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 2.0KB

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