对于此演示,您目前需要Google Chrome才能进行移动。它也可能在Firefox上用于移动设备,但是当我在HTC One M9上尝试时,我发现点击事件并没有触发我。它还可以在一些桌面浏览器(Chrome和Opera在我的Mac上运作良好),但绝对与带有触摸事件的智能手机的体验绝对不太相同。不过,它可能在平板电脑上整洁。
>您还需要一个IFTTT帐户以及如何使用触发HTTP请求的规则来设置制造商渠道的知识。如果您是IFTTT的新手,我们以前介绍了使用IFTTT将LIFX灯泡连接到IoT的文章中的基础知识。对于那些新的制造商频道的人,我们还介绍了将IoT和node.js连接到IFTTT。 最后,您需要将标记打印到一张纸上。我们要使用的标记是这个:
>代码
awe.js
geo_ar - 允许您将对象放置在Set Compass Point。
grift_ar - 与Oculus Rift兼容。>
<span>window.addEventListener('load', function() { </span> <span>var menu_open = false; </span> <span>// Our code continues here </span> <span>});</span>
在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'}。
>我通过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一样。
然后,我们有register()和unregister()函数添加和删除正在关注标记的事件侦听器。
<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>
我们的点击事件包含在e.detail.proctiond_id中单击的投影的ID。我们使用开关语句确定如何对单击反应。单击虫洞打开并关闭虚拟菜单,而“虚拟菜单”按钮上的单击将触发我们的浅色。我们使用开关语句,因为每个按钮都会运行相同的响应代码。
<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切换到与之相反的相反,因此我们跟踪它的到底位置。
在我们的按钮单击事件中,我们向IFTTT提出HTTP请求,其中包括我们的按钮ID作为事件名称,以及访问IFTTT服务的键。我们并没有真正使用返回的数据,而是将其记录到控制台进行调试目的,但实际上,实际结果来自IFTTT对HTTP呼叫的反应。
<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>在所有这些之后
是https time
<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>
如果我们单击虫洞,我们的菜单按钮应将其动画成正确的斑点。
>这就是您使用awe.js中浏览器中增强现实开始的一切所需的一切。它具有很大的潜力,如今技术界的许多发展都在做! Awe.js团队一直在插入插件,很快就会有一个更新甚至更完整的版本!也可以在Google纸板中设置三个。JS立体效果,并将其与Awe.js的某些功能相结合以构建AR耳机体验。我认为一篇文章可能有点多,所以请留意将来的文章!
>>如果您使用此代码尝试一些AR魔术或进一步进行,请在评论中留下便条或在Twitter上与我联系(@thatpatrickguy),我很想检查一下!
>awe.js和ar.js都是在浏览器中创建增强现实体验的强大工具。但是,它们在几种方面有所不同。 awe.js是一个更全面的框架,为创造身临其境的AR体验提供了广泛的功能。它支持多种跟踪方法,包括GPS,Compass和陀螺仪跟踪,并且还支持3D模型。另一方面,AR.JS更专注于基于标记的跟踪,并以其高性能和效率而闻名。它也更容易用于初学者,但是它可能不会提供与awe.js.
>我如何从awe.js?
开始,以敬畏开始。 JS,您首先需要从官方的GitHub存储库下载库。完成此操作后,您可以通过编写JavaScript代码开始创建AR场景。 awe.js提供了一系列API和功能,您可以使用这些功能来控制AR体验,包括用于创建对象,控制相机和处理用户输入的功能。awe.js构建应用程序的一些示例,是一种多功能工具,可用于创建各种AR应用程序。例如,您可以使用它来创建AR导游应用程序,用户可以在其中将手机指向不同的地标以获取有关它们的信息。您也可以使用它来创建AR游戏,用户可以在现实世界中与虚拟对象进行交互。其他可能的应用程序包括AR购物应用程序,AR教育应用程序等。可能的。但是,由于它使用了WebGL和WeBRTC等高级Web技术,因此它可能无法在不支持这些技术的较旧浏览器上使用。为了获得最佳效果,建议使用awe.js与Chrome,Firefox或Safari(例如Chrome,Firefox或Safari)等现代,最新的浏览器。
>
> 。如果您需要awe.js的帮助,则可以在项目的GitHub页面或其他在线开发人员社区上寻求帮助。在线上还有许多可用的教程和指南可以帮助您开始敬畏。以上是awe.js在浏览器中增强现实的详细内容。更多信息请关注PHP中文网其他相关文章!