Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

demo.js 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /**
  2. * @file MARTINS.js WebAR: Hello World demo
  3. * @version 1.0.2
  4. * @author Alexandre Martins (https://github.com/alemart)
  5. * @license AGPL-3.0
  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 useWebcam = true;
  38. const useWebcam = (location.search.substr(1) == 'webcam');
  39. const video = document.getElementById('my-video');
  40. const source = !useWebcam ? Martins.Source.Video(video) : Martins.Source.Camera({
  41. resolution: 'md'
  42. });
  43. const session = await Martins.startSession({
  44. mode: 'immersive',
  45. viewport: viewport,
  46. trackers: [ tracker ],
  47. sources: [ source ],
  48. stats: true,
  49. gizmos: true,
  50. });
  51. const scan = document.getElementById('scan');
  52. tracker.addEventListener('targetfound', event => {
  53. if(scan)
  54. scan.hidden = true;
  55. });
  56. tracker.addEventListener('targetlost', event => {
  57. if(scan)
  58. scan.hidden = false;
  59. });
  60. return session;
  61. }
  62. });
  63. // Toggle webcam
  64. window.addEventListener('load', () => {
  65. const page = location.href.replace(/\?.*$/, '');
  66. const usingWebcam = (location.search.substr(1) == 'webcam');
  67. const button = document.getElementById('toggle-webcam');
  68. if(!button)
  69. return;
  70. button.innerHTML = usingWebcam ? '&#x1F39E' : '&#x1F3A5';
  71. button.addEventListener('click', () => {
  72. if(usingWebcam)
  73. location.href = page;
  74. else
  75. location.href = page + '?webcam';
  76. });
  77. });