選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

demo.js 2.2KB

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