index.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. Component({
  2. behaviors: [require('../common/share-behavior').default],
  3. data: {
  4. loaded: false,
  5. arReady: false,
  6. },
  7. methods: {
  8. handleReady({detail}) {
  9. const xrScene = this.scene = detail.value;
  10. xrScene.event.add('tick', this.handleTick.bind(this));
  11. console.log('xr-scene', xrScene);
  12. },
  13. handleAssetsProgress: function ({detail}) {
  14. console.log('assets progress', detail.value);
  15. },
  16. handleAssetsLoaded: function ({detail}) {
  17. console.log('assets loaded', detail.value);
  18. this.setData({loaded: true});
  19. },
  20. handleARReady: function ({detail}) {
  21. console.log('arReady');
  22. this.setData({arReady: true});
  23. },
  24. handleTick: function () {
  25. const xrSystem = wx.getXrFrameSystem();
  26. const trackerEl = this.scene.getElementById('tracker');
  27. if (!trackerEl) {
  28. return;
  29. }
  30. const tracker = trackerEl.getComponent(xrSystem.ARTracker);
  31. if (!tracker.arActive) {
  32. return
  33. }
  34. // 这里只是例子,实际上用的是`ARTracker`的`autoSync`属性。
  35. // 但也是一个更高自由度的选项。
  36. // 视情况需要自己同步`tracker`的`scale`和`rotation`特定节点。
  37. // 第一个参数是特征点编好,第二个是可选的复用结果,第三个是可选的是否相对于`ARTracker`。
  38. // 为`false`为世界空间的位置,需要配合`scale`自己使用
  39. const position = tracker.getPosition(98, new xrSystem.Vector3(), false);
  40. }
  41. }
  42. })