这个问题的可能原因是在自定义标记生成器中,没有正确地设置标记的信息。下面是一个示例代码,用于正确地设置自定义标记的信息,并生成合适的.patt文件:
const patternCount = 28;
const markerWidth = 800;
const markerHeight = 800;
const patternUrlBase = "markers/pattern";
const markerURL = "https://raw.githubusercontent.com/kalwalt/js-aruco/master/test/test Marker - 64x64.jpg";
const generateCustomMarker = function () {
for (let i = 0; i < patternCount; i++) {
const patternUrl = patternUrlBase + i + ".patt";
const markerUrl = markerURL;
const marker = new THREE.Group();
// Create plane
const plane = new THREE.Mesh(
new THREE.PlaneBufferGeometry(markerWidth, markerHeight),
new THREE.MeshBasicMaterial({
map: new THREE.TextureLoader().load(markerUrl),
color: 0xffffff,
side: THREE.DoubleSide,
})
);
plane.rotation.x = -Math.PI / 2;
marker.add(plane);
// Save pattern
const encoded = new jsQR(plane);
const pattern = encoded ? encoded.data : null;
if (pattern) {
const patternData = {
url: patternUrl,
pattern: pattern,
width: markerWidth,
height: markerHeight,
};
fs.writeFileSync(patternUrl, encoded.binary, {
encoding: null,
});
}
}
};
这里我们使用AR.JS和jsQR库,首先引入这两个库。然后设置一些基本参数,如标记数量、标记宽度和高度、标记URL和.patt文件URL基本路径。接下来,我们循环生成每个自定义标记,为每个标记生成一个平面,并将该平面添加到标记组中。最后,我们使用jsQR库来获取编码数据,并将该数据写回.patt文件中,生成标记二进制数据。
再次运行自定义标记生成