当前位置: 首页 > 文档资料 > A-Frame 中文文档 >

常见问答

优质
小牛编辑
127浏览
2023-12-01

什么是A-Frame?

:a:-Frame 是一个用来构建虚拟现实(VR)应用的网页开发框架。由WebVR的发起人Mozilla VR 团队所开发,在three.js和DOM之上实现了声明式的实体-组件-系统模式。

为什么需要A-Frame

A-Frame使得WebVR易于学习和快速开发,有益于构建WebVR的内容生态系统。

如何开始A-Frame的开发

阅读入门教程来建立基础概念和开发环境。

阅读开发指南来构建简单到高级的WebVR应用。

此外,你可以在网上搜索参考作品,比在百度上搜索要更实时和有效。或者您可以在awesome-aframeA-Frame代码仓库上获取项目资源。如果需要技术帮助,可以在StackOverflow上提问

A-Frame的性能如何

DOM的布局系统已经成为Web应用程序的主要性能瓶颈之一。A-Frame通过自定义元素把DOM作为场景中图形对象的数据容器来使用,这些元素不经过浏览器渲染系统,而是由WebGL直接渲染。这使得我们能够达到90+FPS的渲染性能。A-Painter就是用A-Frame开发的一个性能非常平滑的应用实例。

  • setAttribute方法的效果是异步的。当修改一个实体的位置时,开销几乎为零。执行 setAttribute('position', {x: 1, y: 2, z: 3})几乎等同于直接修改底层three.js对象。
  • 当改变一个实体的属性时,数据不会序列化回DOM。这减少了DOM开销,大多数修改直接在内存中完成,类似于React的虚拟DOM。
  • 从HTML文件中显式设置的HTML属性被缓存在内存中。

A-Frame提供了基本的性能优化机制,但是性能最终取决于每个场景的复杂性和特性。为了充分利用资源,我们需要对3D图形有更深的理解。请阅读最佳性能实践和指南章节来了解更多细节。

为什么我的资源(比如 image, video, model) 没有被加载?

如果您正在从另一个域加载该资源,请确保该资源所在服务器启用了跨域资源共享(CORS),或者将你的资源放在和场景代码同一域名下。

所有部署在GitHub网页上的资源是可以跨域访问的。我们推荐使用GitHub网页作为一个简单的部署平台。或者您也可以使用A-Frame + Uploadcare Uploader,这也是一个提供了CORS信息头的服务。

为什么A-Frame中的HTML/DOM不更新?

出于性能原因,A-Frame不使用组件数据来更新DOM。使用调试组件来启用组件到DOM的序列化(component-to-DOM serialization)。

为什么在移动设备上视频不播放?

出于移动网络流量耗费的原因,当前移动浏览器在显示内置视频方面有所限制。

由于iOS平台限制,为了获得内置视频(无论是否自动播放),我们必须:

  • 设置<meta name="apple-mobile-web-app-capable" content="yes">meta标签(如果没有将会被自动注入到页面头部)。
  • 为video元素设置webkit-playsinline属性(将自动添加到所有视频中)。
  • 把网页锁定到iOS主屏幕。

iOS 10可能将对在线视频支持做出改变(长期而言,限制应该被取消)。在某些Android设备或浏览器上,我们必须:

  • 需要用户交互来触发视频(例如单击或点击事件)。查看Chromium Bug 178297.

我们将努力创建一个视频应用模板,来适配尽可能多的移动设备。

如何显示iframe或者在A-Frame中渲染HTML?

作为浏览器的一个限制,<iframe>不能在A-Frame中显示,不能作为纹理,不能和WebGL/WebVR混在一起。尽管我们可以把它作为一个A-Frame场景之上的浮层来使用,但并不能在VR模式下正常显示。

解决方案可以画到<canvas>上并以此作为纹理贴图的来源。社区有一些组件可以使用:

在哪里找到资源?

awesome-stock-resources,上面有很多免费资源

对于纹理贴图,textures.com

对于360°全景图,搜索Flickr球面投影图

对于3D模型:

<!--

能否在纹理中渲染Youtube视频?

With manual effort, you could either proxy YouTube videos as a texture or download them locally to serve, but that is against their terms of service.

For inspiration, Chris Van has a project that proxies YouTube videos for WebVR.

-->

能否在场景中添加链接?

Mozilla目前正在改进浏览器中的链接访问用户体验,以及帮助迭代API。A-Frame将会提供一个链接组件。

A-Frame使用什么类型的单位?

A-Frame使用的单位为米。它维持1:1的比率。在A-Frame中5单位等于在现实生活中的5米。此外,当使用类似Blender这样为英制或公制模式的程序时,度量也将是1:1转换。Blender中的10英尺长等同于现实生活中的10英尺。

A-Frame和VRML有什么不同?

A是一个JavaScript框架,不是3D或Web标准。它包含Extensible Web Manifesto。只吸收在标准化过程中获胜的想法。VRML曾经是一个和HTML类似的网页3D标准,不过已接近被淘汰。

技术上来讲,A-Frame构建在一个entity-component-system模式之上,是完全可扩展的,并且与现有的所有Web开发框架和工具都可以很好的集成在一起。

A-Frame支持哪些特性?

A-Frame提供了一些现成的组件和原语。不过因为基于entity-component-system模型,当一个特性没有现成的组件支持时,你可以自己编写组件来支持它。或者某个基础组件不能完全满足需求时,你可以克隆它并扩展出自己需要的特性。

看看社区生态系统已经提供了哪些功能组件:awesome-aframe组件集/a>。

A-Frame支持哪些开发库或框架?

A-Frame是基于DOM的,所以绝大部分Web框架原则上都可以集成。我们发现如下框架已经可以和A-Frame一起很好的工作:

A-Frame支持Leap Motion吗?

可以使用Leap Hands组件支持Leap Motion控制。

这个医学教育项目也支持Leap Motion控制模式。

A-Frame支持哪些设备,头戴和平台?

请查看 设备和平台支持.

如何提高性能?

请查看 最佳实践.

如何分享作品?

我们推荐在国内使用在线平台来分享作品(好的作品会被推荐到网站首页),您也可以使用如下几个国外渠道:

我怎么跟A-Frame团队联系?

产品开发路线图在哪里?

A-Frame Roadmap on GitHub