当前位置: 首页 > Web前端 > HTML5

使用 ViroReact 开发增强实现应用的一个具体例子

时间:2023-04-05 18:34:59 HTML5

使用ViroReact开发增强实现应用程序的具体示例最基本的概念和环境搭建步骤。本文开始详细介绍使用ViroReact进行编码开发的技术细节。按照本文步骤开发的应用效果可以从下面两个视频demo看:https://v.qq.com/x/page/o3003...https://v.qq.com/x/page/q3003...这款增强现实应用支持实时改变特斯拉车身颜色,可以帮助用户轻松查看同款特斯拉不同车身颜色的不同视觉效果。ViroReact的官网有一个非常详细的分步向导:按照步骤一步步来,最后你可以通过手机摄像头看到一个硬编码的HelloWorld字符串和真实场景中的一些3D物体。这个HelloWorld关卡的源码可以在ViroReact官网下载。您可以下载它并在本地运行它。跑完它之后,你可以继续学习本文其余部分介绍的技术细节。打开基于ViroReact的Node.js项目,找到package.json,项目名为ViroSample,声明了对React-Native和React-viro的依赖。React-Native和ViroReact结合的美妙之处在于“一次编写,到处运行”的跨平台特性。一次编写JavaScript代码,它可以作为原生应用程序在iOS和Android操作系统上运行。以Android为例,执行命令行react-nativestart+react-nativerun-android后,可以在android文件夹中找到针对Android平台生成的native应用程序的部分源代码。最重要的两个应用引导文件,一个是MainActivity.java,通过回调函数返回AR应用的工程名:MainApplication.java的getJSMainModuleName通过回调函数指定JavaScript入口模块的名称:因为这篇文章是不是React-Native的讲解文章,所以就不详细阐述React-Native应用在Android平台的启动原理了。感兴趣的朋友可以自行搜索。React-Native生态非常活跃,类似原理分析的文章不胜枚举。React-Native+ViroReactJerry开发的增强现实应用的典型实现套路可以概括为三个步骤:匹配-替换-AugmentMatch-匹配由于增强现实应用是将代码生成的虚拟物品叠加到真实场景中,应用开发人员需要帮助ViroReact在真实场景中找到一个附着平面,这样ViroReact就可以将这个附着平面映射到手机的二维屏幕上,然后ViroReact就可以在二维屏幕上绘制虚拟物体。ViroReact提供了一个标签ViroARImageMarker,顾名思义,它允许应用开发者定义一个“标记”(identification,标记)。在编程术语中,此标记定义了一个占位符,它与应用程序开发人员通过target属性指定的图像相关联。当用户使用增强现实应用程序在现实世界中通过摄像头扫描到与ViroARImageMarker指定的图片相匹配的图形时,ViroReact会将Marker指定的图形替换为应用程序开发者事先准备好的3D模型。这个匹配-替换过程由ViroReact自动完成,应用开发者只需要提供Marker指向的图片和需要替换的3D模型即可。这样实现的AR应用也称为MarkerbasedAR应用(当然也有不使用Marker实现的AR应用)。从上图可以看出target指向的Marker内容是一个名为logo的对象,它是通过APIViroARTrackingTargets.createTargets创建的,入参为AR项目中图片的相对路径:图片如下。这就是为什么我们在演示这个应用的时候,第一步总是在电脑上打开这张图片,然后用手机摄像头扫描一下。Replace-ReplaceViroReact将真实世界的图形与AR应用的ImageMarker匹配后,会自动替换为3D物体并渲染在Marker的位置。被替换的3D对象由标签Viro3DObject定义,需要指定三个重要属性:source和resources:3D模型文件,一般由专业3D软件生成。Windows10自带的Paint3D软件可以打开.obj后缀的模型文件:您可以观看下方视频全方位观察演示中使用的特斯拉3D模型:https://v.qq。com/x/page/s3003...我们可以很容易地观察到,Paint3D中看到的特斯拉汽车表面是暗淡的,而Leo视频中的特斯拉可以更改为不同的颜色。这是通过向3D模型添加不同的纹理来实现的。我们使用ViroMaterials.createMaterials传入不同的纹理参数生成不同的Material对象,最后赋值给上图中Viro3DObject的materials属性,这样就完成了要替换的3D对象的声明。通过使用React编程动态修改Viro3DObject材质属性的值,我们可以动态修改相机中观察到的特斯拉车身的颜色。当然,这些不同纹理对应的图形文件也需要专业人士制作:Augmentenhancement是即使是从未接触过AR应用开发的程序员也非常熟悉的一个步骤:标签Viro3DObject支持各种事件响应函数,比如点击后触发的onClick回调函数:我们将自己的_toggleButtons函数注册到onClick事件中。当点击特斯拉模型时,我们可以在演示视频中弹出颜色选择菜单,让用户指定新的车身颜色。因为Viro3DObject的materials属性绑定的React模型字段是this.state.texture,所以在用户选择了新的颜色后,调用React的this.setState方法将texture属性设置为选中的颜色,实现动态体色刷新.总结本文从上篇文章使用JavaScript开发AR(增强现实)移动应用的初步知识和环境搭建开始,从一个具体的ViroReact项目入手,详细介绍了增强现实应用编码匹配、替换和增强的实现发展。歌曲。