mindarjs使用

引入,index.html中

  <script src="https://aframe.io/releases/1.5.0/aframe.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/mind-ar@1.2.5/dist/mindar-image-aframe.prod.js"></script>
 

添加引擎

//添加引擎
  document.addEventListener("DOMContentLoaded", function () {
    const sceneEl = document.querySelector("a-scene");
    let arSystem;
    sceneEl.addEventListener("loaded", function () {
      // alert('执行')
      arSystem = sceneEl.systems["mindar-image-system"];
    });
    const startButton = document.querySelector("#example-start-button");
    startButton.addEventListener("click", () => {
      console.log("start");
      arSystem.start(); // start AR
      arSystem.pause(true);
    });
    sceneEl.addEventListener("arReady", (event) => {
      // alert('AR引擎已启动')
    });
    sceneEl.addEventListener("arError", (event) => {
      alert("相机未启动成功!");
    });
  });

添加识别图像的资源和识别之后显示的内容

<!-- 识别目标放在mindar-image中,如有多个目标需要按顺序解析,识别目标对应根据mindar-image-target的targetIndex来确定 -->
    <a-scene mindar-image="识别资源地址" vr-mode-ui="enabled: false" device-orientation-permission-ui="enabled: false">
      <!-- 识别后显示内容使用到的资源 -->
      <a-assets>
        <!-- 资源的src可以使用请求获取之后再赋值,如果是网络路径,需要服务器端进行跨域处理 -->

        <img id="paintandquest-img" src="资源地址" crossorigin="anonymous" />
        <video id="paintandquest-video" src="资源地址" loop="false" playsinline></video>
      </a-assets>


      <!-- 相机 -->
      <a-camera position="0 0 0" look-controls="enabled:  false" cursor="fuse: false; rayOrigin: mouse;"
        raycaster="far: 10000; objects: .clickable"></a-camera>
      <!-- 识别后显示的内容 -->
      <!-- 这里的targetIndex就是对应识别目标列表的index -->
      <a-entity mindar-image-target="targetIndex: 0" mytarget id="target">
        <a-entity id="portfolio-panel" position="0 0 -0.01">

          <a-text value="Hello, World!" position="-0.5 0.5 0"></a-text>
          <!-- 显示内容的src直接以id对应到资源的src -->
          <a-image src="#paintandquest-img" position="0 0 0" height="0.552" width="1" rotation="0 0 0"></a-image>
          <a-video src="#paintandquest-video" playsinline width="1" height="0.552" position="0 -0.6 0"
            rotation="0 0 0 "></a-video>

        </a-entity>
      </a-entity>
    </a-scene>

识别目标的事件

const portfolio = document.querySelector("#portfolio-panel");
    portfolio.setAttribute("position", "0 " + y + " -0.01");
    //图像识别事件
    const target = document.querySelector("#target");
    target.addEventListener("targetFound", (event) => {
      document.querySelector("#paintandquest-video").play();
    });
    target.addEventListener("targetLost", (event) => {
      document.querySelector("#paintandquest-video").pause();

    });

自定义显示图层(不跟踪识别目标)

<a-entity mindar-image-target="targetIndex: 0" mytarget id="target">
        <!-- 这里可以为空,在scene外部自定义要展示的内容,可以不受图像追踪的限制 -->
      </a-entity>
    </a-scene>
    <!-- 自定义识别后的显示内容 -->
    <div v-show="showFinder"
      style="width: 100%;position: absolute;top: 0;bottom: 0;display: flex;flex-direction: column;justify-content: center;">
      <video width="100%" id="paintandquest-video" src="" playsinline></video>

    </div>

【基于AT89C51单片机的交通灯系统】是电子工程领域中的一个经典实践项目,尤其适合初学者进行单片机编程和硬件控制的学习。AT89C51是一款广泛应用的8位微处理器,由美国Atmel公司生产,具有4KB的可编程Flash存储器,可以执行各种控制任务,包括交通灯系统的控制。 交通灯控制系统是城市交通管理的重要组成部分,通过红绿黄三色灯的变化来指示行人和车辆何时通行。在本项目中,交通灯系统采用AT89C51单片机作为核心控制器,通过编程实现红绿黄灯的定时切换,确保交通流畅且安全。 DSN(Design Suite Notation)文件,如`C51交通灯.DSN`,通常是在电路设计软件,如Keil uVision或Proteus中创建的工程文件。这种文件包含了整个项目的配置信息,包括源代码、元器件库、仿真设置等,使得开发者可以在虚拟环境中对交通灯系统进行仿真测试。Proteus是一款强大的电子电路仿真软件,可以直观地模拟硬件电路的行为,无需物理硬件即可验证设计的正确性。 数码管(7段显示器)是显示倒计时的关键部件。在这个项目中,数码管用于显示每个灯组的剩余时间,增强用户交互体验,使驾驶员和行人能够清晰了解何时转换灯色。AT89C51通过串行或并行接口与数码管连接,并通过特定的驱动程序代码控制数码管的显示内容。 编程方面,AT89C51使用C51语言编写,这是一种为8051系列单片机定制的C语言变体。代码中包含的详细注释对于初学者理解程序逻辑至关重要,通过注释可以学习如何设置定时器、中断服务子程序以及I/O端口操作,这些都是单片机编程的基础知识。 交通灯的控制通常基于定时器中断,例如,可以设置一个定时器在特定周期后触发中断,然后在中断服务程序中改变灯的状态。此外,为了实现数码管显示,可能需要用到移位寄存器和译码器等外围设备,这些都需要在代码中进行编程控制。 这个项目涵
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值