浏览代码

Add ar.viewer to the plugins

customisations
alemart 10 个月前
父节点
当前提交
a1d78f6fc6
共有 3 个文件被更改,包括 48 次插入2 次删除
  1. 20
    2
      plugins/aframe-with-encantar.js
  2. 14
    0
      plugins/babylon-with-encantar.js
  3. 14
    0
      plugins/three-with-encantar.js

+ 20
- 2
plugins/aframe-with-encantar.js 查看文件

39
         return null;
39
         return null;
40
     },
40
     },
41
 
41
 
42
-    getTrackablePointers(frame)
42
+    findViewer(frame)
43
+    {
44
+        if(frame === null)
45
+            return null;
46
+
47
+        for(const result of frame.results) {
48
+            if(result.tracker.type == 'image-tracker') {
49
+                if(result.trackables.length > 0)
50
+                    return result.viewer;
51
+            }
52
+        }
53
+
54
+        return null;
55
+    },
56
+
57
+    findTrackablePointers(frame)
43
     {
58
     {
44
         if(frame === null)
59
         if(frame === null)
45
             return [];
60
             return [];
67
 
82
 
68
     session: /** @type {Session | null} */ (null),
83
     session: /** @type {Session | null} */ (null),
69
     frame: /** @type {Frame | null} */ (null),
84
     frame: /** @type {Frame | null} */ (null),
85
+    viewer: /** @type {Viewer | null} */ (null),
70
     pointers: /** @type {TrackablePointer[]} */ ([]),
86
     pointers: /** @type {TrackablePointer[]} */ ([]),
71
 
87
 
72
     _utils: ARUtils(),
88
     _utils: ARUtils(),
207
         }
223
         }
208
 
224
 
209
         session.addEventListener('end', () => {
225
         session.addEventListener('end', () => {
226
+            this.viewer = null;
210
             this.frame = null;
227
             this.frame = null;
211
             this.pointers.length = 0;
228
             this.pointers.length = 0;
212
         });
229
         });
230
         // animation loop
247
         // animation loop
231
         const animate = (time, frame) => {
248
         const animate = (time, frame) => {
232
             this.frame = frame;
249
             this.frame = frame;
250
+            this.viewer = this._utils.findViewer(frame);
233
             this._updateTrackablePointers();
251
             this._updateTrackablePointers();
234
 
252
 
235
             scene.render();
253
             scene.render();
312
     {
330
     {
313
         this.pointers.length = 0;
331
         this.pointers.length = 0;
314
 
332
 
315
-        const newPointers = this._utils.getTrackablePointers(this.frame);
333
+        const newPointers = this._utils.findTrackablePointers(this.frame);
316
         if(newPointers.length > 0)
334
         if(newPointers.length > 0)
317
             this.pointers.push.apply(this.pointers, newPointers);
335
             this.pointers.push.apply(this.pointers, newPointers);
318
     },
336
     },

+ 14
- 0
plugins/babylon-with-encantar.js 查看文件

83
     }
83
     }
84
 
84
 
85
     /**
85
     /**
86
+     * AR Viewer
87
+     * @returns {Viewer | null}
88
+     */
89
+    get viewer()
90
+    {
91
+        return this._viewer;
92
+    }
93
+
94
+    /**
86
      * Pointer-based input in the current frame (touch, mouse, pen...)
95
      * Pointer-based input in the current frame (touch, mouse, pen...)
87
      * You need a PointerTracker in your session in order to use these
96
      * You need a PointerTracker in your session in order to use these
88
      * @returns {TrackablePointer[]}
97
      * @returns {TrackablePointer[]}
136
     {
145
     {
137
         this._session = null;
146
         this._session = null;
138
         this._frame = null;
147
         this._frame = null;
148
+        this._viewer = null;
139
         this._pointers = [];
149
         this._pointers = [];
140
         this._origin = null;
150
         this._origin = null;
141
         this._root = null;
151
         this._root = null;
174
     function mix(frame)
184
     function mix(frame)
175
     {
185
     {
176
         let found = false;
186
         let found = false;
187
+        ar._viewer = null;
177
         ar._pointers.length = 0;
188
         ar._pointers.length = 0;
178
 
189
 
179
         for(const result of frame.results) {
190
         for(const result of frame.results) {
186
 
197
 
187
                     align(projectionMatrix, viewMatrix, modelMatrix);
198
                     align(projectionMatrix, viewMatrix, modelMatrix);
188
                     ar._origin.setEnabled(true);
199
                     ar._origin.setEnabled(true);
200
+                    ar._viewer = result.viewer;
189
 
201
 
190
                     found = true;
202
                     found = true;
191
                 }
203
                 }
260
 
272
 
261
         session.addEventListener('end', event => {
273
         session.addEventListener('end', event => {
262
             ar._origin.setEnabled(false);
274
             ar._origin.setEnabled(false);
275
+            ar._viewer = null;
263
             ar._frame = null;
276
             ar._frame = null;
277
+            ar._pointers.length = 0;
264
         });
278
         });
265
 
279
 
266
         session.viewport.addEventListener('resize', event => {
280
         session.viewport.addEventListener('resize', event => {

+ 14
- 0
plugins/three-with-encantar.js 查看文件

83
     }
83
     }
84
 
84
 
85
     /**
85
     /**
86
+     * AR Viewer
87
+     * @returns {Viewer | null}
88
+     */
89
+    get viewer()
90
+    {
91
+        return this._viewer;
92
+    }
93
+
94
+    /**
86
      * Pointer-based input in the current frame (touch, mouse, pen...)
95
      * Pointer-based input in the current frame (touch, mouse, pen...)
87
      * You need a PointerTracker in your session in order to use these
96
      * You need a PointerTracker in your session in order to use these
88
      * @returns {TrackablePointer[]}
97
      * @returns {TrackablePointer[]}
136
     {
145
     {
137
         this._session = null;
146
         this._session = null;
138
         this._frame = null;
147
         this._frame = null;
148
+        this._viewer = null;
139
         this._pointers = [];
149
         this._pointers = [];
140
         this._origin = null;
150
         this._origin = null;
141
         this._root = null;
151
         this._root = null;
168
     function mix(frame)
178
     function mix(frame)
169
     {
179
     {
170
         let found = false;
180
         let found = false;
181
+        ar._viewer = null;
171
         ar._pointers.length = 0;
182
         ar._pointers.length = 0;
172
 
183
 
173
         for(const result of frame.results) {
184
         for(const result of frame.results) {
180
 
191
 
181
                     align(projectionMatrix, viewMatrixInverse, modelMatrix);
192
                     align(projectionMatrix, viewMatrixInverse, modelMatrix);
182
                     ar._origin.visible = true;
193
                     ar._origin.visible = true;
194
+                    ar._viewer = result.viewer;
183
 
195
 
184
                     found = true;
196
                     found = true;
185
                 }
197
                 }
232
 
244
 
233
         session.addEventListener('end', event => {
245
         session.addEventListener('end', event => {
234
             ar._origin.visible = false;
246
             ar._origin.visible = false;
247
+            ar._viewer = null;
235
             ar._frame = null;
248
             ar._frame = null;
249
+            ar._pointers.length = 0;
236
         });
250
         });
237
 
251
 
238
         session.viewport.addEventListener('resize', event => {
252
         session.viewport.addEventListener('resize', event => {

正在加载...
取消
保存