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,一经查实,立即删除!

相关文章

php基础教学笔记,php学习笔记:基础知识

php学习笔记&#xff1a;基础知识2.每行结尾不允许有多余的空格3.确保文件的命名和调用大小写一致&#xff0c;是由于类Unix系统上面&#xff0c;对大小写是敏感的4.方法名只允许由字母组成&#xff0c;下划线是不允许的&#xff0c;首字母要小写&#xff0c;其后每个单词首字母…

视图编辑php,PhpStorm视图模式

# PhpStorm视图模式在这个页面中&#xff1a;* [基础](#基础)* [切换全屏模式](#切换全屏模式)* [切换演示模式](#切换演示模式)* [切换不分心模式](#切换不分心模式)## 基础PhpStorm提供特定的视图模式&#xff1a;* **全屏模式** 允许你使用整个屏幕编写代码&#xff0c;在视…

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…

asp连oracle测试,ASP连接Oracle

ASP连接Oracle的方式有几种, 这里介绍一下 OLE 连接方法dim objConn,strConn,DBServer,DBName,DBUser,DBPassworddim RS,xSQLDBServer"192.168.1.151" //DB ServerDBName"oracleDB" //登陆数据库名/SIDDBUser"system" //登陆用户名DBPassword&qu…

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…

python创建excel_python自动生成excel(xlwt库)

# coding: utf-8import web import json import datetime import xlwt import StringIO # 如果不在前端调用接口&#xff0c;如下web.py框架的urls和app、render可以省略 urls( # web框架的路由/index,Index,/home,Home, ) appweb.aplication(urls, globals()) # 注册应用 rend…

linux限制单个用户使用,linux下限制用户使用系统资源

linux下限制用户使用系统资源除了可以对用户设置磁盘配额以及权限做限制以外还可以使用ulimit可以对所有用户的core文件大小&#xff0c;数据段大小&#xff0c;最多可使用的CPU事件和最多可打开的文件数目等做限制&#xff0c;将ulimit命令放在/etc/profile文件中&#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在创建容器时要扫描的包属性…

linux 到文件的最后一行,linux – 将第一行复制到文件中的最后一行

这里的目的是将文件中的第一行复制到最后一行这里是输入文件335418.75,2392631.25,36091,38466,1335418.75,2392643.75,36092,38466,1335418.75,2392656.25,36093,38466,1335418.75,2392668.75,36094,38466,1335418.75,2392681.25,36095,38466,1335418.75,2392693.75,36096,384…

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

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

LinuX编译显示内核配置无效,配置编译内核(Linux kernel)

虽然以前也编译过内核&#xff0c;但是关于内核配置选项特别是有关本机驱动这块还是不熟悉&#xff0c;因为没有通过确定有效的途径知道当前工作正常的内核中到底使用了什么驱动模块来控制硬件&#xff0c;最近看到一本书《Linux kernel in a netshell》&#xff0c;感觉讲的还…

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

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

linux 7查内核,查看CentOS7内核版本及发行版本

原文&#xff1a;https://blog..net/networken/article/details/79771212s1.查看内核版本[rootlocalhost ~]# uname -srLinux 4.15.11-1.el7.elrepo.x86_64[rootlocalhost ~]# uname -aLinux localhost.localdomain 4.15.11-1.el7.elrepo.x86_64 #1 SMP Mon Mar 19 11:46:06 ED…

python下载文件损坏_pythonw.exe停止工作,无法运行IDLE或任何.py文件 - python

此问题与任何代码都不完全相同。我认为我的安装&#xff08;python 3.3.5&#xff09;以某种方式损坏。我尝试了卸载和重新安装以及修复&#xff0c;但是没有任何效果。自从我上次运行任何python代码或进行涉及python的操作以来已经有一段时间了&#xff0c;所以我不能说我不小…