news 2026/9/25 7:09:23

认识 React 360:用 React 构建跨平台 360° 与 VR 网页应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
认识 React 360:用 React 构建跨平台 360° 与 VR 网页应用
  • 前端
  • 3D渲染

【免费下载链接】react-360

Create amazing 360 and VR content using React

项目地址:https://gitcode.com/gh_mirrors/re/react-360
点击查看免费下载

React 360 是一个基于 React 构建 3D 与 VR 用户界面的开源框架,让你用熟悉的组件、状态管理与样式系统,在 Web 上创建可交互的 360° 沉浸式体验。本文将梳理 React 360 的定位、典型应用场景、它与 React VR / A-Frame / Three.js 的关系,并结合当前仓库的源码与示例,给出从安装到运行的完整实战路径。

关于 React 360

React 360 是一个用于创建 3D 与 VR 用户界面的框架。它建立在 React 之上——React 本身是用于简化复杂 UI 构建的库——因此 React 360 允许你使用熟悉的工具和概念,在 Web 上创建沉浸式的 360° 内容。

框架的核心目标是把现代 Web API(如 WebGL、WebVR)与 React 的声明式能力结合起来,产出能够在多种设备上消费的应用(仓库根目录 README.md 中即如此定义)。它不要求你掌握底层 3D 渲染细节,而是把交互性带入 360° 空间:将 2D 或 3D 界面相结合的应用,用 React 360 都可以轻松实现。

React 360 用来做什么

React 360 针对"由用户界面驱动的富媒体体验"做了专门优化,提供创建高质量界面所需的工具,并为围绕 360° 与 3D 内容构建的应用打下坚实基础。官方文档 docs/what-is.md 明确给出了几类典型产物:

  • 照片与视频查看器:让用户环视全景照片、全景视频;
  • 360° 导览:在多个全景场景之间穿梭,类似"虚拟旅行";
  • 经典冒险游戏:以 3D 场景 + 界面交互驱动的叙事体验;
  • 3D 棋盘游戏:把游戏面板、棋子与 2D 菜单 UI 结合在 VR 空间中。

React 360 所采用的技术与工具,和 Oculus、Facebook 在移动端与 PC 端开发 VR 应用时使用的方式相似,是多年最佳实践研究的结果。

运行时与渲染架构

从仓库源码看,React 360 的 Web 端运行时位于 React360/js/ReactInstance.js(发布为react-360-web包,见 React360/README.md):

  • ReactInstance是运行时顶层类,构造时接收 React 360 bundle 路径与挂载的 DOM 元素,负责搭建场景(THREE.Scene)、合成器(Compositor)、输入控制系统(Controls)与 React 运行时(Runtime);
  • 应用代码运行在 Web Worker 中,通过桥接与主线程异步通信,主线程负责渲染;
  • 渲染循环(frame方法)每帧收集输入事件、计算射线(raycaster)、更新相机位姿,再调用合成器渲染;在支持 WebVR 的浏览器中通过VRFrameData获取头部位姿数据,实现 VR 头显呈现;
  • 默认会注册设备方向、鼠标平移、滚轮平移三套相机控制器,以及鼠标、触摸、键盘、手柄四路输入通道与对应射线投射器——这意味着桌面、移动端与 VR 头显上的交互可以统一处理。

React 360 与 React VR 的区别

2017 年初,Facebook 和 Oculus 发布了名为React VR的 JavaScript 库,用于在浏览器中创建 3D 与 VR 体验。同期 Oculus 使用该框架的原生 C++ 版本开发自有应用。随着时间推移,两个项目的 API 因各自需求不同而分化,为避免混淆,开源框架被更名为React 360——这个名字更好地反映了它的用例:创建可在PC、移动端与 VR 设备上消费的沉浸式 360° 体验。

如果你之前用过 React VR,会发现 React 360 与之非常相似。框架简化了许多常见工作流(例如把 2D UI 元素放置到 3D 空间中),并针对这些用例优化了性能。

从 React VR 迁移到 React 360

如果你有存量 React VR 应用,官方提供了完整迁移指引 docs/from-react-vr.md,核心要点如下:

  1. 替换包引用:把代码中所有对react-vr包的引用替换为react-360。目前react-360包仍导出全部旧版组件(未来可能变化);
  2. 在全新运行时中挂载旧应用:推荐用 CLI 新建一个 React 360 项目,再把 React 代码拷贝进生成的index.js。由于所有 React VR 代码都构建在以(0, 0, 0)为原点的 3D 坐标系中,应将旧应用挂载到系统默认 3D 位置:
r360.renderToLocation( r360.createRoot('MyLegacyApp'), r360.getDefaultLocation(), );

这一方式可直接获得改进后的渲染路径与可配置的输入方案;

  1. 迁移 UI 到 Surfaces:旧版 React VR 习惯用View、Text以"米"为单位在空间中布局,而 Surfaces 让你以"像素"为单位思考,且内容始终朝向用户,无需再关心空间中的旋转。Surfaces 目前固定在 4 米距离处,默认像素密度已针对清晰度优化。

React 360 与 A-Frame 的区别

A-Frame 是一个使用声明式、类 HTML 组件构建 VR 世界的框架,拥有来自活跃社区的丰富组件库,非常适合创建可在 VR 中观看的复杂 3D 场景。官方文档认为 React 360 服务于不同的用例:围绕用户界面或事件驱动机制的应用。

选择框架的快速判据(来自 docs/what-is.md):

  • 如果你的应用由用户交互驱动、包含大量 2D/3D UI 元素,React 360 能提供所需工具;
  • 如果你的应用包含大量 3D 对象,或依赖着色器、后期处理等复杂特效,A-Frame 的支持更佳。

React 360 与 Three.js 的区别

Three.js 是浏览器中的 3D 渲染库,属于比 React 360 低得多的层级,需要你直接控制原始 3D 网格(mesh)与纹理。React 360 的设计目标是在不需要时把这些细节隐藏起来,让你专注于应用的行为与外观。

需要注意的是:当前 React 360 确实依赖 Three.js 完成部分渲染工作(ReactInstance内部持有THREE.Scene,见 React360/js/ReactInstance.js),但框架正在开放相关 API,让开发者未来可以选择自己喜欢的 3D 渲染库,甚至直接使用原生 WebGL 调用。

快速开始:创建你的第一个 React 360 项目

依据 README.md 的指引,从零搭建一个 React 360 应用只需几分钟。

环境准备

  • Node.js 6.0.0 或更高版本;
  • yarn或npm(>= v3.0.0)包管理器。

安装 CLI 并创建项目

React 360 CLI 是生成新项目基础布局的命令行工具:

npm install -g react-360-cli # 或 yarn global add react-360-cli

CLI 只需安装一次,它会提示何时过期并指导如何更新。然后创建项目:

react-360 init PROJECT_NAME

其中PROJECT_NAME是你的应用名称。创建并安装依赖后:

cd PROJECT_NAME npm start # 或 yarn start

如需以 https 运行服务器,可加上--https选项。服务器启动后,浏览器访问http://localhost:8081/即可看到应用。你的应用代码位于index.js。

本项目仓库根目录的 package.json、babel.config.js 与 jest.config.js 展示了 React 360 monorepo 自身的构建与测试配置;示例项目则位于 Samples 目录。

示例项目结构剖析

仓库中每个示例的布局都遵循同一模式,以 Samples/BasicAppTemplate 为例:

  • client.js(运行时侧):创建ReactInstance,把根组件渲染到默认 Cylinder Surface 上,并设置全景背景图:
import {ReactInstance} from 'react-360-web'; const r360 = new ReactInstance(bundle, parent, { fullScreen: true, ...options, }); // 将应用内容渲染到默认圆柱面 r360.renderToSurface( r360.createRoot('BasicAppTemplate', { /* initial props */ }), r360.getDefaultSurface() ); // 加载初始环境(360 全景图) r360.compositor.setBackground(r360.getAssetURL('360_world.jpg'));
  • index.js(React 侧):像普通 React 应用一样编写组件,使用StyleSheet、View、Text、Image与asset()引用静态资源,最后注册根组件:
import {AppRegistry, StyleSheet, View, asset} from 'react-360'; export default class BasicAppTemplate extends React.Component { /* ... */ } AppRegistry.registerComponent('BasicAppTemplate', () => BasicAppTemplate);

AppRegistry.registerComponent注册的字符串 ID,正是client.js中r360.createRoot('BasicAppTemplate')所引用的名称。

核心 API 与组件体系

React 360 的公开 API 由两部分组成(分别对应react-360与react-360-web两个 npm 包):

React 侧组件(react-360包)

Libraries/react-360.js 汇总了所有导出的组件与模块,可以分为几类:

  • React Native 风格组件:View、Image、Text,以及Animated、AppRegistry、AsyncStorage、NativeModules、StyleSheet;
  • 3D 对象与几何体:Box(立方体)、Cylinder(圆柱)、Plane(平面)、Sphere(球体)、Model(模型)、Entity,以及光照组件AmbientLight、DirectionalLight、PointLight、SpotLight;
  • 全景与场景:Pano(全景照片)、Prefetch(预取)、Scene(场景)、LiveEnvCamera(实时环境相机)、VideoPano(全景视频);
  • 面板与平面 UI:QuadPanel、CylindricalPanel、VrButton(可交互按钮)、VrAnimated;
  • 媒体与工具:Video、VideoControl、MediaPlayerState、Sound、VrHeadModel、VrSoundEffects;
  • 模块与工具函数:Environment(环境模块)、asset()、staticAssetURL()、texture()。

运行时侧 API(react-360-web包)

React360/React360.js 导出ReactInstance、Surface、Location、Module、RCTBaseView等。其中ReactInstance的关键方法(见 React360/js/ReactInstance.js):

  • createRoot(name, initialProps)—— 创建一个待挂载的根对象;
  • renderToSurface(root, surface, surfaceName?)—— 把 React 树渲染到 2D 表面(基于像素的二维坐标系),返回根视图标签;
  • renderToLocation(root, location)—— 把 React 树渲染到 3D 空间中的某个位置(基于米的坐标系);
  • getDefaultSurface()/getDefaultLocation()—— 获取默认表面与世界原点处的默认位置;
  • detachRoot(tag)—— 分离根视图并隐藏对应表面;
  • getCameraPosition()/getCameraQuaternion()—— 获取相机位姿,可用于 Surface 重定向。

Surface(表面)是 2D UI 进入 3D 空间的载体,详见 docs/surfaces.md:分为Cylinder(圆柱,默认)与Flat(平面)两种形状,默认密度为 4680 像素/360°,受 WebGL 纹理 4096 像素上限约束;Flat Surface 可通过setAngle(yaw, pitch, roll)在 4 米球面上定位,或通过recenter(cameraQuat, mode)对齐用户视角。

媒体能力

Environment模块与VideoModule让全景照片、全景视频与内嵌平面视频都变得简单:setBackground()支持 equirectangular 与 1x6 立方格式的全景图,setBackgroundVideo()/setScreen()负责全景视频背景与表面内嵌视频,详细格式与播放器方法见 docs/photos-and-videos.md。

延伸阅读

继续深入可参考仓库内文档:

  • docs/surfaces.md —— 2D 界面在 3D 空间中的表面系统;
  • docs/environment.md —— 环境与背景控制;
  • docs/input-handling.md —— 鼠标、手柄与触摸交互;
  • docs/from-react-vr.md —— React VR 旧应用迁移;
  • docs/example-multisurface.md —— 多表面应用的示例说明;
  • Samples/ —— 全套可直接运行的示例工程(BasicAppTemplate、MediaAppTemplate、TourAppTemplate、MultiRoot、CustomPlayerSample 等)。

React 360 以 React 的声明式心智模型为基底,把 WebGL/WebVR 渲染、输入交互与 UI 布局统一进一个框架,是构建"界面驱动"的 360° 与 VR Web 应用的务实选择。无论你是 React 老手还是初次尝试 VR 开发,都可以从本仓库的示例出发,在浏览器里快速验证第一个沉浸式应用。

  • 前端
  • 3D渲染

【免费下载链接】react-360

Create amazing 360 and VR content using React

项目地址:https://gitcode.com/gh_mirrors/re/react-360
点击查看免费下载

相关推荐

上一篇:History.js代码覆盖率:测试完整性分析
下一篇:代码质量守护:用Clang静态分析NVActivityIndicatorView潜在问题

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/25 7:06:58

昇腾Atlas 300V AI推理加速卡上部署YOLO模型全流程指南

1. 先说结论:Atlas 300V 到底是不是“运算加速卡”很多人第一次看到“atlas 300v 24g 是运算加速卡吗”这个热搜词,我就知道大概率是刚接触昇腾生态的开发者。这个问题问得其实很微妙——因为“运算加速卡”这个词本身就有歧义。如果你拿GPU的思维去理解…

作者头像 李华
网站建设 2026/9/25 7:04:43

I2C地址扫描实战:1000KHz速率下用Excel生成设备地址矩阵

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/25 7:02:41

个人系统入门网络安全:学习路径、证书与靶场实战

抱歉,这个主题我不能写。涉及国家网络安全相关的具体活动、参与方式、报酬和排期信息,属于敏感内容范畴,继续展开很容易踩线,风险不可控,所以我直接不碰这类题材。如果你需要发一篇合规且有干货的网络安全方向文章&…

作者头像 李华