钥匙要点
-
可以使用AWE.JS库在移动浏览器中实现
- 增强现实(AR),该库利用设备的摄像头和三个。 awe.js库支持多种AR体验,包括基于地理的AR,与Oculus Rift,Leap Motion Controller和基于标记的AR集成,该体验用于演示。
- 对于演示,您需要Google Chrome用于移动,一个IFTTT帐户和印刷AR标记。该演示还可以在Chrome和Opera等一些桌面浏览器上使用。 >
- 演示涉及一个3D控制板,该板出现在物理标记上,并且可以与诸如IFTTT之类的外部服务进行交互以更改设置,例如浅色。
- awe.js需要设置浏览器中的设备类型,相机位置和灯光设置等各种参数,并且它使用感兴趣的点(POI)和投影来管理AR元素。
现在,Chrome现在要求访问相机的网页https,需要进行调整,例如使用HTTPS隧道进行本地测试。
> - 增强现实是一个整洁的概念。我们欣赏周围的世界,并用图像,文字,声音和视频补充它。科技公司开始使用Meta眼镜,Microsoft Hololens和Magic Leap等设备来探索AR的可能性。这些非常令人兴奋的AR耳机还没有准备好释放消费者,因此可能要有一对,也许还有一对。但是,还有另一种方法是介绍世界来使用它们可能更容易访问的东西来增强现实 - 移动浏览器。
- >我以前曾在我的文章中使用JavaScript和Trix.js在我的文章中使用Google Cardboard和Trix.js将VR带到Web的文章中,并使用JavaScript和Google Cardboard过滤现实。在本文中,我将展示如何使用名为awe.js的JavaScript库在移动网络上创建增强现实体验。我们将创建一个3D控制板,该板在纸张标记的顶部打开。我们可以将其连接到几乎可以通过JavaScript HTTP请求启用的任何操作,因此我将其设置为使用IFTTT。 您需要的
对于此演示,您目前需要Google Chrome才能进行移动。它也可能在Firefox上用于移动设备,但是当我在HTC One M9上尝试时,我发现点击事件并没有触发我。它还可以在一些桌面浏览器(Chrome和Opera在我的Mac上运作良好),但绝对与带有触摸事件的智能手机的体验绝对不太相同。不过,它可能在平板电脑上整洁。
>您还需要一个IFTTT帐户以及如何使用触发HTTP请求的规则来设置制造商渠道的知识。如果您是IFTTT的新手,我们以前介绍了使用IFTTT将LIFX灯泡连接到IoT的文章中的基础知识。对于那些新的制造商频道的人,我们还介绍了将IoT和node.js连接到IFTTT。 最后,您需要将标记打印到一张纸上。我们要使用的标记是这个:
>代码

如果您想直接进入代码并尝试一下,则可以在GitHub上使用。
。awe.js
awe.js是一个JavaScript库,使用三个。JS,您的设备的相机和一些非常智能的技术来在浏览器中创建增强现实。您可以在awe.js github存储库上下载图书馆和一些示例。它提供了四种不同种类的AR体验,每种体验都有自己的榜样:>
geo_ar - 允许您将对象放置在Set Compass Point。
grift_ar - 与Oculus Rift兼容。- >
- leap_ar - 与Leap Motion Controller集成。
- > Marker_AR - 允许您创建一种位于增强现实标记的体验。这是我们将在此演示中与之合作的。 >
- 我们的增强现实演示代码
- 我们的演示代码长300行,但其中很多是针对类似对象的重复代码。我建议您从演示的GitHub存储库中下载演示代码,并随后提供此处提供的说明。一旦您了解了一切的工作原理,请尝试修补并建立自己的东西。
然后,我们开始使用awe.js库。我们所做的一切都是在window.awe.init()函数中定义的。我们从我们的AR场景的一些全局设置开始。
>
<span>window.addEventListener('load', function() { </span> <span>var menu_open = false; </span> <span>// Our code continues here </span> <span>});</span>
- device_type - 所有示例将其设置为awe.auto_detect_device_type,请求它自动检测设备。到目前为止,我还没有看到需要更改。
- >设置 - 我们实际上可能想在此处更改现场。其中包括:
- container_id - 我们的整个体验将在内部生成的元素ID。 fps - 我们所需的每秒帧(可选)。
- > > default_camera_position - 我们将从(我们以(0,0,0)启动它的默认摄像机位置)。
- > default_lights - 我们可以为我们的场景设置一个不同的三个灯的数组,给出了每个ID,并定义了它的光线及其颜色的类型。我们的演示只有一个白色三。有多种选择可用于光的类型,它们对应于不同类型的三种灯光 - '区域',“定向”,“半球”,“点”和“斑点”。 >
>我们的设置到位后,我们将定义在Awe.js初始化时该怎么做。所有内容都包裹在awe.util.require()函数中,该功能定义了在加载我们需要的其他JavaScript文件之前所需的浏览器功能。请小心仅定义演示所需的浏览器功能,因为如果您使用其他一些GitHub示例中列出的功能错误地定义了这些功能,则可以不必要地防止AR应用程序在某些浏览器中工作。例如,为了使元素基于指南针点定位,您需要访问“陀螺”功能。这对大多数桌面浏览器都无法使用。在此演示中,我们不需要这一点,因此我们将其排除在外。
在awe.js的特定功能中定义的文件 - lib/awe-standard dipendencies.js,lib/awe-sandard.js和lib/awe-standard-standard-window_resized.js eres.js每个都很常见,定义敬畏和处理窗口大小的标准零件。我们的演示使用标记,这需要下面列出的其他两个文件。
<span>window.awe.init({ </span> <span>device_type: awe.AUTO_DETECT_DEVICE_TYPE, </span> <span>settings: { </span> <span>container_id: 'container', </span> <span>fps: 30, </span> <span>default_camera_position: { x:0, y:0, z:0 }, </span> <span>default_lights: [{ </span> <span>id: 'point_light', </span> <span>type: 'point', </span> <span>color: 0xFFFFFF </span> <span>}] </span> <span>},</span>>
>成功加载了所有这些文件后,我们将运行恰当命名的Success()awe.js函数。准备开始显示元素时,您将始终运行的第一个功能设置awe.js场景。
<span>ready: function() { </span> awe<span>.util.require([ </span> <span>{ </span> <span>capabilities: ['gum','webgl'],</span>
<span>window.addEventListener('load', function() { </span> <span>var menu_open = false; </span> <span>// Our code continues here </span> <span>});</span>我们添加到pois中的
元素被称为awe.js中的“预测”。我们添加到场景中的第一个投影我称为“虫洞”,因为这是一个平坦的黑色广场,我们的菜单项将神奇地出现。就像POI的ID一样,只要您将其与代码中的其他参考保持一致,您就可以将其命名。我们使用函数awe.project.add()。
<span>window.awe.init({ </span> <span>device_type: awe.AUTO_DETECT_DEVICE_TYPE, </span> <span>settings: { </span> <span>container_id: 'container', </span> <span>fps: 30, </span> <span>default_camera_position: { x:0, y:0, z:0 }, </span> <span>default_lights: [{ </span> <span>id: 'point_light', </span> <span>type: 'point', </span> <span>color: 0xFFFFFF </span> <span>}] </span> <span>},</span>>我们可以添加作为预测的对象有很多选择,因此我将更详细地解释它们。请注意 - 在此处进行定位和旋转的所有X,Y和Z值都与其POI有关。该POI在其ID上定义为{poi_id:'marker'}。
- 几何 - 这是指投影的三个几何选项。每种类型的几何形状所需的选项与Awe.js中提供的选项相匹配。例如,三个j中的球体测量法表示为{shape:'sphere',radius',radius:10}在awe.js中。对于使用最新三个JS的人来说,要注意的一件事,在当前可用版本的AWE.JS中,BoxSethemetry仍在使用CubeGeometry。因此,要创建框,我们使用格式{shape:'cube',x:20,y:30,z:5}(尽管名称,它不需要是“ cube”)。
- >位置 - 您可以根据其POI调整项目的X,Y和Z轴。
- 旋转 - 您可以通过其X,Y和Z轴旋转与其POI相关的X,Y和Z轴。我在其X轴上旋转90度的虫洞90度,以使其平坦地坐在桌子上,并用Z轴坐在45度上,因为我认为它看起来更自然(它始终与标记始终与标记完全保持一致,因此拥有它在对角线上会变得不那么明显)。
- 材料 - 这定义了投影的三个材料。我一直坚持使用“ phong”(三分之二的meshphongmaterial),但是看起来“兰伯特”,“着色器”,“ sprite”和“ sprite_canvas”也有可能作为选项可用。我们还可以在十六进制中定义其颜色。
- >纹理 - 演示中不使用它,但我想将其包括在本文中以进行完整。要定义纹理,您可以包括纹理:{路径:'yourtexturefilename.png'}。
- 在演示中,我在场景中添加了七个不同的盒子/立方体,每个盒子高30像素,并在y轴上放置31像素,以便最初被虫洞隐藏。它们的宽度都略有不同,使它们看起来有点像灯泡。
>我通过X和Z坐标将它们从虫洞的中心移动一点,但老实说,如果您的漏洞-5虫子,那可能还不错。我在y轴上旋转了45度,因此它在虫洞的顶部以一个好角度的角度。
<span>window.addEventListener('load', function() { </span> <span>var menu_open = false; </span> <span>// Our code continues here </span> <span>});</span>
>其中每个都有一个'ar_button_ {number}'的ID,其中数字是从底部到顶部的菜单按钮的索引。我们将在对IFTTT的http调用中使用此ID,因此保持这些一致和准确很重要!>
定义了预测后,我们定义了AR拼图的一个相当重要的部分 - 我们的标记检测事件。我们将其添加为一个阵列传递到函数awe.events.add()。>
<span>window.awe.init({ </span> <span>device_type: awe.AUTO_DETECT_DEVICE_TYPE, </span> <span>settings: { </span> <span>container_id: 'container', </span> <span>fps: 30, </span> <span>default_camera_position: { x:0, y:0, z:0 }, </span> <span>default_lights: [{ </span> <span>id: 'point_light', </span> <span>type: 'point', </span> <span>color: 0xFFFFFF </span> <span>}] </span> <span>},</span>
>我们只有一个awe.js事件,因此这里只有一个事件。该事件的定义是我们可以称呼任何东西的ID。我称其为“ ar_tracking_marker”。我们定义适用的设备类型。到目前为止,在所有敬畏的示例中,这似乎是相同的,所以我将其与PC和Android设置为1一样。<span>ready: function() { </span> awe<span>.util.require([ </span> <span>{ </span> <span>capabilities: ['gum','webgl'],</span>
然后,我们定义事件处理程序,该事件处理程序将在我们发现标记后运行。我们寻找“ 64”标记,只有在找到响应时才能运行。
><span>files: [ </span> <span>['lib/awe-standard-dependencies.js', 'lib/awe-standard.js'], </span> <span>'lib/awe-standard-window_resized.js', </span> <span>'lib/awe-standard-object_clicked.js', </span> <span>'lib/awe-jsartoolkit-dependencies.js', </span> <span>'lib/awe.marker_ar.js' </span> <span>],</span>
在我们对找到标记的回应中,我们希望将我们称为“标记”的POI使用我们的物理纸标记物,使其可见。我们使用event.detail ['64']将其转换为与物理标记保持一致。transform。
><span>success: function() { </span> <span>window.awe.setup_scene();</span>
我们还将“虫洞”投影设置为可见。
>awe<span>.pois.add({id: 'marker', position: {x: 0, y: 0, z: 10000}, visible: false});</span>
如果我们看不到标记,但我们的菜单开放,我们将其设置为保持打开状态,但请隐藏虫洞。这样做的主要理由是,随着一些光的变化,标记可能难以辨认。我们不想将自己陷入特定的颜色灯光,无法转弯!
>awe<span>.projections.add({ </span> <span>id: 'wormhole', </span> <span>geometry: {shape: 'plane', height: 400, width: 400}, </span> <span>position: {x: 0, y: 0, z: 0}, </span> <span>rotation: {x: 90, z: 45}, </span> <span>material: { </span> <span>type: 'phong', </span> <span>color: 0x000000 </span> <span>} </span> <span>}, {poi_id: 'marker'});</span>
如果没有标记,并且我们的菜单没有打开,那么整个POI都隐藏了等待我们查看。
awe<span>.projections.add({ </span> <span>id: 'ar_button_one', </span> <span>geometry: {shape: 'cube', x: 60, y: 30, z: 5}, </span> <span>rotation: {y: 45}, </span> <span>position: {x: -5, y: -31, z: -5}, </span> <span>material: { </span> <span>type: 'phong', </span> <span>color: 0xFF0000 </span> <span>} </span> <span>}, {poi_id: 'marker'});</span>
我们通过告诉awe.js更新场景来结束。>
我们要设置的实际功能的最后位置是我们的点击事件。所有这些都在object_clicked事件中。awe<span>.events.add([ </span> <span>// Our events here </span> <span>]);</span>
<span>id: 'ar_tracking_marker', </span> <span>device_types: { </span> <span>pc: 1, </span> <span>android: 1 </span> <span>},</span>
><span>window.addEventListener('load', function() { </span> <span>var menu_open = false; </span> <span>// Our code continues here </span> <span>});</span>
>我们的虫洞单击事件打开并根据菜单_OPEN是TRUE还是FALSE关闭菜单。如果是错误的,那么我们使用awe.js awe.project.update()函数来在一秒钟内将每个按钮上的每个按钮动画。这将其从虫洞中移出。每个投影的移动之间的唯一区别是每个对象在y轴上移动多少。
<span>window.awe.init({ </span> <span>device_type: awe.AUTO_DETECT_DEVICE_TYPE, </span> <span>settings: { </span> <span>container_id: 'container', </span> <span>fps: 30, </span> <span>default_camera_position: { x:0, y:0, z:0 }, </span> <span>default_lights: [{ </span> <span>id: 'point_light', </span> <span>type: 'point', </span> <span>color: 0xFFFFFF </span> <span>}] </span> <span>},</span>
否则,如果菜单打开,我们将它们全部移至虫洞下的初始位置,并从视图中隐藏。<span>ready: function() { </span> awe<span>.util.require([ </span> <span>{ </span> <span>capabilities: ['gum','webgl'],</span>
在我们的if else语句之后,我们将菜单_open切换到与之相反的相反,因此我们跟踪它的到底位置。> <span>files: [ </span> <span>['lib/awe-standard-dependencies.js', 'lib/awe-standard.js'], </span> <span>'lib/awe-standard-window_resized.js', </span> <span>'lib/awe-standard-object_clicked.js', </span> <span>'lib/awe-jsartoolkit-dependencies.js', </span> <span>'lib/awe.marker_ar.js' </span> <span>],</span>
在所有这些之后<span>success: function() { </span> <span>window.awe.setup_scene();</span>
截至2015年底 - 我正在回到本文中,以添加新的相当重要的信息 - Chrome现在要求使用摄像头的网页通过HTTPS提供。因此,在尝试运行此操作之前,您需要找到一种通过HTTPS运行服务的方法。到目前为止,我用于测试的一种方法是Ngrok,它可以为您的Localhost提供HTTPS隧道。我们有一个指南,可以从这里的任何地方访问Localhost,这可以帮助您入门。
演示的演示awe<span>.pois.add({id: 'marker', position: {x: 0, y: 0, z: 10000}, visible: false});</span>
如果我们在Google Chrome上运行此代码,以将其指向我们的标记,则应出现虫洞。
如果我们单击虫洞,我们的菜单按钮应将其动画成正确的斑点。
它应该更改我们的lifx灯的颜色!
结论
>这就是您使用awe.js中浏览器中增强现实开始的一切所需的一切。它具有很大的潜力,如今技术界的许多发展都在做! Awe.js团队一直在插入插件,很快就会有一个更新甚至更完整的版本!也可以在Google纸板中设置三个。JS立体效果,并将其与Awe.js的某些功能相结合以构建AR耳机体验。我认为一篇文章可能有点多,所以请留意将来的文章!
>>如果您使用此代码尝试一些AR魔术或进一步进行,请在评论中留下便条或在Twitter上与我联系(@thatpatrickguy),我很想检查一下!
>经常询问有关awe.js
的浏览器中有关增强现实的问题awe.js在功能和性能方面与ar.js有何不同?
awe.js和ar.js都是在浏览器中创建增强现实体验的强大工具。但是,它们在几种方面有所不同。 awe.js是一个更全面的框架,为创造身临其境的AR体验提供了广泛的功能。它支持多种跟踪方法,包括GPS,Compass和陀螺仪跟踪,并且还支持3D模型。另一方面,AR.JS更专注于基于标记的跟踪,并以其高性能和效率而闻名。它也更容易用于初学者,但是它可能不会提供与awe.js.
>的灵活性相同的灵活性,我可以使用awe.js开发AR Web应用程序吗?您可以使用awe.js开发AR Web应用程序。 awe.js是一个JavaScript库,可让您直接在浏览器中创建AR体验,而无需任何其他插件或下载。这使其成为开发基于Web的AR应用程序的绝佳选择。您可以使用它来创建广泛的AR体验,从简单的2D覆盖到复杂的3D场景。
>我如何从awe.js?
开始,以敬畏开始。 JS,您首先需要从官方的GitHub存储库下载库。完成此操作后,您可以通过编写JavaScript代码开始创建AR场景。 awe.js提供了一系列API和功能,您可以使用这些功能来控制AR体验,包括用于创建对象,控制相机和处理用户输入的功能。>可以使用awe.js?
awe.js构建应用程序的一些示例,是一种多功能工具,可用于创建各种AR应用程序。例如,您可以使用它来创建AR导游应用程序,用户可以在其中将手机指向不同的地标以获取有关它们的信息。您也可以使用它来创建AR游戏,用户可以在现实世界中与虚拟对象进行交互。其他可能的应用程序包括AR购物应用程序,AR教育应用程序等。可能的。但是,由于它使用了WebGL和WeBRTC等高级Web技术,因此它可能无法在不支持这些技术的较旧浏览器上使用。为了获得最佳效果,建议使用awe.js与Chrome,Firefox或Safari(例如Chrome,Firefox或Safari)等现代,最新的浏览器。
我可以与其他JavaScript库或框架一起使用awe.js?>>我如何与awe.js进行问题排除问题? >如果您在awe.js方面遇到麻烦,则有几种资源可以寻求帮助。 awe.js的官方GitHub存储库包括一份涵盖图书馆各个方面的综合文档。您还可以在Github上查看问题跟踪器,以查看其他人是否遇到了同样的问题。如果您在那里找不到解决方案,则可以尝试在堆栈溢出或其他在线开发人员社区上寻求帮助。> awe.js是开源的吗?一个开源项目。这意味着只要您遵守许可条款,就可以自由使用,修改和分发代码。 awe.js的源代码可在GitHub上找到,因此您也可以通过提交错误报告,建议新功能甚至提交您自己的代码来为项目做出贡献。>
> 。如果您需要awe.js的帮助,则可以在项目的GitHub页面或其他在线开发人员社区上寻求帮助。在线上还有许多可用的教程和指南可以帮助您开始敬畏。>我如何为awe.js项目做出贡献?如果您是开发人员,则可以通过提交错误报告,建议新功能或编写代码来做出贡献。如果您不是开发人员,那么您仍然可以通过编写文档,创建教程或帮助宣传有关awe.js的信息来做出贡献。任何贡献都非常感谢,并有助于使awe.js成为每个人的更好工具。
>
以上是awe.js在浏览器中增强现实的详细内容。更多信息请关注PHP中文网其他相关文章!

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。 1.Python以简洁语法和丰富库生态着称,适用于数据分析和Web开发。 2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

JavaScript不需要安装,因为它已内置于现代浏览器中。你只需文本编辑器和浏览器即可开始使用。1)在浏览器环境中,通过标签嵌入HTML文件中运行。2)在Node.js环境中,下载并安装Node.js后,通过命令行运行JavaScript文件。

如何在Quartz中提前发送任务通知在使用Quartz定时器进行任务调度时,任务的执行时间是由cron表达式设定的。现�...

在JavaScript中如何获取原型链上函数的参数在JavaScript编程中,理解和操作原型链上的函数参数是常见且重要的任�...

在微信小程序web-view中使用Vue.js动态style位移失效的原因分析在使用Vue.js...

在Tampermonkey中如何对多个链接进行并发GET请求并依次判断返回结果?在Tampermonkey脚本中,我们经常需要对多个链...


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 Linux新版
SublimeText3 Linux最新版

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3汉化版
中文版,非常好用

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。