js在一个指定元素前添加内容_WebAR开发指南(1)---使用AR.js实现第一个WebAR demo...

前面有一篇文章万字干货介绍WebAR的实现与应用 分析了目前流行的WebAR框架并简单的介绍一些实现方法,这个专栏我们具体的来通过一些框架实现WebAR效果。

关于AR.js

AR.js是一个轻量级的增强现实类JavaScript库,支持基于标记和位置的增强现实。开发人员可以使用几行HTML将AR特性和功能引入任何网站。该项目是开源的,在GitHub上拥有近14,000个stars,各种平台的开发人员正在使用它来创建更多新的数字体验。AR.js框架包括跨浏览器兼容性,并且支持WebGL和WebRTC,这意味着它可以在iOS 11以上的Android和iPhone设备上正常工作。通过包装许多不同的AR框架,包括three.js,a-frame和ARToolKit,AR.js使得将AR引入Web应用程序变得更加简单高效。它具有以下优点:

  • 跨浏览器兼容性
  • 即使在较旧的设备上也可以达到60fps的高性能
  • 基于Web,无需安装
  • 开源,可免费访问
  • 使用WebGL和WebRTC在所有移动设备上均可使用
  • 无需额外或不常见的硬件
  • 可以用不到10行HTML来完成

创建项目

假设你已经建立了一个(本地或其他)开发环境,并使用SSL证书对其进行了保护。为什么要使用SSL?Chrome要要求摄像机访问权限的网站都必须严格通过https交付。

我们可以仅用8行HTML编写一个AR.js demo。

ff3d16d34ed1674de1cfb346187f740c.png

将上述代码编辑到你的开发环境中的index.html文件中,并在你选择的兼容浏览器中将其打开,将收到访问相机的请求,点击允许即可。摄像头对准识别图(如下),如果一切顺利,你应该会在标记上看到一个半透明的白色立方体。

2779b5f25fd102c60c64ed904810d0ef.png

要从视频显示中删除调试框只需添加如下代码:

bec39327ae064dec4678f30a0015d359.png

使用自定义标记

步骤1:确定你的标记图像。为了获得最佳结果,这应该是一个简单的,高对比度的PNG图像,预先裁剪为正方形,大小至少为512x512。这也必须是旋转不对称的,这意味着无论旋转到什么程度,它始终看起来是唯一的。下面是标记图像的一些好例子:

9f5bc5cdcc67188274eff3de7678803e.png

步骤2:将图像转换为.patt文件和AR.js标记。使用此标记训练器(https://jeromeetienne.github.io/AR.js/three.js/examples/marker-training/examples/generator.html),上传要用作标记的图像。

  • Download Marker: AR.js使用.patt文件来识别标记并显示3D内容。
  • Download Image: 带有适当黑色边框的实际.png图像用作物理标记。

步骤3:将.patt文件添加到你的网站。只要应用程序可在何处访问它,如/img/patterns/my-marker.patt

步骤4:将标记添加到AR.js元素。使用a-frame方法,需要做的就是添加一个a-marker元素,其类型属性为'pattern',并将模式文件的相对路径作为'url'属性。

使用此方法,我们还需要包含一个a-entity camera以便虚拟相机包含在正在渲染的3D环境中。

99c58b2650f244d9bb51415b7917f361.png

步骤5:最后,添加你要显示的3D模型。要完成此操作,我们需要添加一个模型,该模型将在发现此标记时显示。幸运的是,框架包含了许多原始几何体,我们可以使用一些简单的元素名称轻松地插入它们:

  • <a-box></a-box>
  • <a-sphere></a-sphere>
  • <a-cylinder></a-cylinder>
  • <a-plane></a-plane>

对于此示例,我将添加一个红色球体,该球体刚好在标记上方。

a271ab27efcfd22d463bf3eb00006ee5.png

测试效果如下:

8fab3470bc474056463cc3487e44d6c5.png

缩小黑色标记边框的大小

我个人认为,默认边框粗细在标记上很难看到。所以如果你使用的是最新版本的框架,则可以根据自己的喜好调整边框大小!

9fad399436abe593bc5bd8727e43bb59.png

哪个看起来更好?左:0.5,右:0.8

你可以访问这个网站来调节大小:https://jeromeetienne.github.io/AR.js/three.js/examples/marker-training/examples/generator.html

一旦确定了所需的图案比例,就可以生成和保存应用程序的标记图案和标记图像,只需进行一些细微的调整即可将其绑定。如下代码:

e7dab1944ba816ce1ddf4015c8cc4668.png

使用自己的3D模型

当然,立方体,球体,平面和圆柱体都很酷,但是大多数时候,你需要在要创建的增强现实场景中利用和显示自定义的3D模型。最简单的方法是确保模型为obj或glTF格式。

对于obj模型:在我们的a-entity标签中,我们将使用obj-model道具,这要求你指定.obj模型文件和随附的.mtl材质文件的路径。最终结果应如下所示:

b8431f43e43efe080ef876feabfd65fc.png

对于glTF模型

16829deb3487d63d449a28d6b714a9e1.png

创建事件监听器

我们为什么要有一个事件监听器?我可以举一个真实的例子:每当用户设备上的标记处于活动状态时,客户都希望显示一个简单的内容块。只要没有当前活动的标记,内容就应该消失。为了实现这一点,我们需要添加一个事件侦听器,该侦听器将在发现/丢失标记时触发,然后将其挂接到主站点的JavaScript捆绑包中,并在触发该事件时显示/隐藏内容。

要实现事件监听器,只需注册一个aframe组件,然后为markerFound和markerLost设置事件监听器。在它们各自的回调函数中,编写你希望在发现或丢失标记时将被触发的任何js内容,如下面的代码示例:

a6c1139bc90b13ab5cd11618c451ea89.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 最小二乘回归 高斯核_从简单数学建模开始:08最小二乘准则的应用(附python代码)...

模型拟合一般来说有这么三种&#xff1a;切比雪夫近似准则极小化绝对偏差之和最小二乘准则这几个原则各有各的适用范围。其中最小二乘准则是比较容易计算的。接下来我将简要的介绍最小二乘准则以及举例说明如何用python实现。最小二乘准则定义&#xff1a;给定某种函数类型 和 …

oracle 时间集合,oracle 日期函数集合(集中版本)第2/2页

oracle 日期函数集合(集中版本)第2/2页更新时间&#xff1a;2009年06月16日 23:45:55 作者&#xff1a;oracle 日期函数网上已经有了不少&#xff0c;特我们跟集中一下&#xff0c;免得大家麻烦。一、 常用日期数据格式1.Y或YY或YYY 年的最后一位&#xff0c;两位或三位SQL&g…

中缀表达式转后缀表达式两位数_再见,正则表达式!

从一段指定的字符串中&#xff0c;取得期望的数据&#xff0c;正常人都会想到正则表达式吧&#xff1f;写过正则表达式的人都知道&#xff0c;正则表达式入门不难&#xff0c;写起来也容易。但是正则表达式几乎没有可读性可言&#xff0c;维护起来&#xff0c;真的会让人抓狂&a…

php 腾讯云 文字识别_腾讯科技(成都)有限公司

成都IT内推圈是由IT行业老兵组建的民间组织&#xff0c;我们希望能为广大IT同仁提供力所能及的帮助&#xff0c;我们不仅提供靠谱的职位&#xff0c;我们更是有温度的圈子&#xff01;为了帮助更多的朋友寻找到靠谱的内推职位&#xff0c;老农在此号召大家&#xff1a;1. 发布职…

oracle插入性能优化,Oracle- insert性能优化

看见朋友导入数据&#xff0c;花了很长时间都没完成&#xff01;其实有很多快速的方法&#xff0c;整理下&#xff01;向表中插入数据有很多办法,但是方法不同&#xff0c;性能差别很大.----1.原始语句drop table t1 purge;create table t1(sid number,sname varchar2(20)) tab…

winscp 自动断开无法连接_winscp教程,winscp教程,看完就学会的winscp教程

作为一个站长&#xff0c;当你的网站流量逐渐变大时&#xff0c;就会发现目前的主机无法满足正常需要&#xff0c;就要更换更高一级的云主机或VPS主机&#xff0c;新手就需要使用WinSCP和Putty&#xff0c;来管理主机。IIS7服务器管理工具可以批量管理、定时上传下载、同步操作…

oracle客户端数据恢复,AnyBackup-Oracle 数据恢复任务恢复到异客户端失败,并提示错误:数据源为空,请检查恢复环境是否授权...

关键字Oracle、数据源适用产品AnyBackup Express 7.0.6 - 7.0.8AnyBackup CDM 7.0.6 - 7.0.8问题描述登录 AnyBackup 管理控制台&#xff0c;依次点击定时数据保护 > 数据恢复 > 新建&#xff0c;新建 Oracle 数据恢复任务&#xff0c;选择恢复数据到异客户端&#xff0c…

linux祖先进程,Linux下的几种特殊进程

1、Linux的登录环境Linux是一个多任务多用户的操作系统&#xff0c;其设计初衷: 就是要达成多用户同时使用单个计算机大的任务。多用户&#xff1a;早期计算机资源紧张&#xff0c;为了让更多的人都可以使用。多任务&#xff1a;服务于多用户&#xff0c;同时提高计算机的吞吐量…

@select注解_SSM框架(十三):Spring框架中的IoC(3)新注解,完全摆脱xml文件

spring中的新注解1、Configuration作用&#xff1a;指定当前类是一个配置类细节&#xff1a;当配置类作为AnnotationConfigApplicationContext对象创建的参数时&#xff0c;该注解可以不写。2、ComponentScan作用&#xff1a;用于通过注解指定spring在创建容器时要扫描的包属性…

element ui 多个子组件_ElementUI 技术揭秘(2) 组件库的整体设计

需求分析当我们去实现一个组件库的时候&#xff0c;并不会一上来就撸码&#xff0c;而是把它当做产品一样&#xff0c;思考一下我们的组件库的需求。那么对于 element-ui&#xff0c;除了基于 Vue.js 技术栈开发组件&#xff0c;它还有哪些方面的需求呢。丰富的 feature&#x…

arraylist线程安全吗_Java的线程安全、单例模式、JVM内存结构等知识梳理

java技术总结知其然&#xff0c;不知其所以然 &#xff01;在技术的海洋里&#xff0c;遨游&#xff01;做一个积极的人编码、改bug、提升自己我有一个乐园&#xff0c;面向编程&#xff0c;春暖花开&#xff01;本篇以一些问题开头&#xff0c;请先不看答案&#xff0c;自己思…

【GitHub精选项目】抖音/ TikTok 视频下载:TikTokDownloader 操作指南

前言 本文为大家带来的是 JoeanAmier 开发的 TikTokDownloader 项目&#xff0c;这是一个高效的下载 抖音/ TikTok 视频的开源工具。特别适合用户们保存他们喜欢的视频或分享给其他人。 TikTokDownloader 是一个专门设计用于下载 TikTok 视频的工具&#xff0c;旨在为用户提供一…

python的界面文字翻译_一个把网站全英文转成中文的方法,让你轻松看懂python官网...

近日&#xff0c;在看python官网&#xff08;英文网站&#xff09;时&#xff0c;使用了有道翻译工具查看了几个专有名词。无意间&#xff0c;有了是不是可以输入网站地址进行翻译的想法&#xff0c;翻译后的网站地址点击进去后&#xff0c;又是一个什么情况呢&#xff1f;小编…

drools规则引擎技术指南_物联网规则引擎技术

物联网应用程序设计与典型的IT解决方案大不相同&#xff0c;因为它将物理操作技术&#xff08;OT&#xff09;与传感器、致动器和通信设备连接起来&#xff0c;并将数字信息技术&#xff08;IT&#xff09;与数据、分析和工作流连接起来。在企业环境中&#xff0c;物联网非常复…

linux 2G内存够用吗,不管2G还是6G运存,为什么使用手机时都会先占用一半?

原标题&#xff1a;不管2G还是6G运存&#xff0c;为什么使用手机时都会先占用一半&#xff1f;以前安卓手机最大的缺陷就是运存问题&#xff0c;手机玩着玩着突然就运行内存不足了&#xff0c;为了运行更流畅手机运存从1G到2G…到8G&#xff0c;手机运存越来越大。但大家有没有…

c++ 写x64汇编 5参数_怀念9年前用纯C和汇编写的入侵检测软件

在翻出12年前用C#写的自我管理软件之后&#xff0c;进一步激发了本猫的怀旧情怀。上一篇在此:竟然无意间翻出12年前自己用C#写的程序这不&#xff0c;昨天竟然又找出2010年写的一款Windows系统入侵检测及防御小工具&#xff0c;当时命名是:NtInfoGuy!对于Windows的内部&#xf…

python怎么导入os模块_python之os模块

在自动化测试中&#xff0c;经常需要查找操作文件&#xff0c;比如说查找配置文件&#xff08;从而读取配置文件的信息&#xff09;&#xff0c;查找测试报告&#xff08;从而发送测试报告邮件&#xff09;&#xff0c;经常要对大量文件和大量路径进行操作&#xff0c;这就依赖…

ubuntu复制文件到另一个文件夹_简单介绍一下电脑中的文件或文件夹的复制、移动及删除的操作方式...

大家好&#xff0c;我是波仔&#xff0c;今天又来跟各位学电脑基础的朋友们分享知识&#xff0c;让我们一起来学习吧。复制文件或文件夹在我们日常操作文件或文件夹的过程中&#xff0c;经常会遇到需要复制一些文件或文件夹什么的&#xff0c;下面我们就一起来分享一下常用的几…

Windows和linux提权方法,Windows与Linux本地用户提权体验(一)

无论是Windows系统还是linux系统都是基于权限控制的&#xff0c;其严格的用户等级和权限是系统安全的有力保证。这么严密的用户权限是否不可逾越呢?下面笔者反其道而行之进行Windows及Linux下的提权测试。一、windows下获取至高权限大家知道&#xff0c;在Windows系统中SYSTEM…

三相逆变器双pi控制器参数如何调节_光伏逆变器短路特性简析

1前言短路故障相对于其他故障类型来说是比较常见的&#xff0c;不同的设备的短路故障&#xff0c;大了讲都一样&#xff0c;细了说各有千秋&#xff0c;今天我们主要聊聊光伏逆变器的短路特征。电力系统中的电源&#xff0c;传统意义是指的是并入电力系统的同步发电机。但随着分…