@srsergio/taptapp-ar 1.0.15 → 1.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -14,7 +14,7 @@ import { gpuCompute } from "../utils/gpu-compute.js";
|
|
|
14
14
|
const PYRAMID_MIN_SIZE = 8;
|
|
15
15
|
const PYRAMID_MAX_OCTAVE = 5;
|
|
16
16
|
const NUM_BUCKETS_PER_DIMENSION = 8;
|
|
17
|
-
const MAX_FEATURES_PER_BUCKET =
|
|
17
|
+
const MAX_FEATURES_PER_BUCKET = 10; // Aumentado de 3 a 10 para mayor densidad de puntos tracking
|
|
18
18
|
const ORIENTATION_NUM_BINS = 36;
|
|
19
19
|
const FREAK_EXPANSION_FACTOR = 7.0;
|
|
20
20
|
// Global GPU mode flag
|
|
@@ -241,8 +241,8 @@ export class DetectorLite {
|
|
|
241
241
|
for (let y = 1; y < height - 1; y++) {
|
|
242
242
|
for (let x = 1; x < width - 1; x++) {
|
|
243
243
|
const val = curr.data[y * width + x];
|
|
244
|
-
if (Math.abs(val) < 0.
|
|
245
|
-
continue; // Threshold
|
|
244
|
+
if (Math.abs(val) < 0.01)
|
|
245
|
+
continue; // Threshold reducido de 0.015 a 0.01 para mayor sensibilidad
|
|
246
246
|
let isMaxima = true;
|
|
247
247
|
let isMinima = true;
|
|
248
248
|
// Check 3x3 neighborhood in current scale
|
|
@@ -152,14 +152,19 @@ class SimpleAR {
|
|
|
152
152
|
// Matrix is column-major: [m0,m1,m2,m3, m4,m5,m6,m7, m8,m9,m10,m11, m12,m13,m14,m15]
|
|
153
153
|
const tx = worldMatrix[12];
|
|
154
154
|
const ty = worldMatrix[13];
|
|
155
|
-
const
|
|
155
|
+
const tz = worldMatrix[14];
|
|
156
|
+
// focal length (roughly 45 degrees FOV)
|
|
157
|
+
const f = videoH / 2 / Math.tan((45.0 * Math.PI / 180) / 2);
|
|
158
|
+
// Standard perspective projection to screen space
|
|
159
|
+
// tx, ty, tz are in marker units relative to camera
|
|
160
|
+
const screenX = offsetX + (videoW / 2 + (tx * f / -tz)) * scaleX;
|
|
161
|
+
const screenY = offsetY + (videoH / 2 - (ty * f / -tz)) * scaleY;
|
|
162
|
+
// Calculate rotation and scale from the matrix
|
|
156
163
|
const rotation = Math.atan2(worldMatrix[1], worldMatrix[0]);
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
const
|
|
160
|
-
|
|
161
|
-
// The matrixScale from the tracking is in image-space coordinates
|
|
162
|
-
const finalScale = matrixScale * scaleX * 0.5;
|
|
164
|
+
const matrixScale = Math.sqrt(worldMatrix[0] ** 2 + worldMatrix[1] ** 2);
|
|
165
|
+
// Perspective scale: how much larger/smaller the object is based on distance (tz)
|
|
166
|
+
const perspectiveScale = (f / -tz) * scaleX;
|
|
167
|
+
const finalScale = matrixScale * perspectiveScale;
|
|
163
168
|
// Apply transform
|
|
164
169
|
this.overlay.style.position = 'absolute';
|
|
165
170
|
this.overlay.style.transformOrigin = 'center center';
|
package/package.json
CHANGED
|
@@ -16,7 +16,7 @@ import { gpuCompute } from "../utils/gpu-compute.js";
|
|
|
16
16
|
const PYRAMID_MIN_SIZE = 8;
|
|
17
17
|
const PYRAMID_MAX_OCTAVE = 5;
|
|
18
18
|
const NUM_BUCKETS_PER_DIMENSION = 8;
|
|
19
|
-
const MAX_FEATURES_PER_BUCKET =
|
|
19
|
+
const MAX_FEATURES_PER_BUCKET = 10; // Aumentado de 3 a 10 para mayor densidad de puntos tracking
|
|
20
20
|
const ORIENTATION_NUM_BINS = 36;
|
|
21
21
|
const FREAK_EXPANSION_FACTOR = 7.0;
|
|
22
22
|
|
|
@@ -282,7 +282,7 @@ export class DetectorLite {
|
|
|
282
282
|
for (let x = 1; x < width - 1; x++) {
|
|
283
283
|
const val = curr.data[y * width + x];
|
|
284
284
|
|
|
285
|
-
if (Math.abs(val) < 0.
|
|
285
|
+
if (Math.abs(val) < 0.01) continue; // Threshold reducido de 0.015 a 0.01 para mayor sensibilidad
|
|
286
286
|
|
|
287
287
|
let isMaxima = true;
|
|
288
288
|
let isMinima = true;
|
|
@@ -179,16 +179,23 @@ class SimpleAR {
|
|
|
179
179
|
// Matrix is column-major: [m0,m1,m2,m3, m4,m5,m6,m7, m8,m9,m10,m11, m12,m13,m14,m15]
|
|
180
180
|
const tx = worldMatrix[12];
|
|
181
181
|
const ty = worldMatrix[13];
|
|
182
|
-
const
|
|
183
|
-
|
|
182
|
+
const tz = worldMatrix[14];
|
|
183
|
+
|
|
184
|
+
// focal length (roughly 45 degrees FOV)
|
|
185
|
+
const f = videoH / 2 / Math.tan((45.0 * Math.PI / 180) / 2);
|
|
184
186
|
|
|
185
|
-
//
|
|
186
|
-
|
|
187
|
-
const
|
|
187
|
+
// Standard perspective projection to screen space
|
|
188
|
+
// tx, ty, tz are in marker units relative to camera
|
|
189
|
+
const screenX = offsetX + (videoW / 2 + (tx * f / -tz)) * scaleX;
|
|
190
|
+
const screenY = offsetY + (videoH / 2 - (ty * f / -tz)) * scaleY;
|
|
191
|
+
|
|
192
|
+
// Calculate rotation and scale from the matrix
|
|
193
|
+
const rotation = Math.atan2(worldMatrix[1], worldMatrix[0]);
|
|
194
|
+
const matrixScale = Math.sqrt(worldMatrix[0] ** 2 + worldMatrix[1] ** 2);
|
|
188
195
|
|
|
189
|
-
//
|
|
190
|
-
|
|
191
|
-
const finalScale = matrixScale *
|
|
196
|
+
// Perspective scale: how much larger/smaller the object is based on distance (tz)
|
|
197
|
+
const perspectiveScale = (f / -tz) * scaleX;
|
|
198
|
+
const finalScale = matrixScale * perspectiveScale;
|
|
192
199
|
|
|
193
200
|
// Apply transform
|
|
194
201
|
this.overlay.style.position = 'absolute';
|