当前位置: 首页 > news >正文

JSAR 入门教程:从零开始开发空间天气小摆件

文章目录

    • 一、JSAR 简介与开发环境搭建
      • 1.1 什么是 JSAR?
      • 1.2 开发环境准备
    • 二、JSAR 项目结构与核心概念
      • 2.1 项目文件解析
      • 2.2 核心概念图解
    • 三、实战开发:3D 天气小摆件
      • 3.1 基础场景搭建
      • 3.2 集成和风天气 API
      • 3.3 3D 天气可视化实现
    • 四、调试与打包发布
      • 4.1 本地调试
        • 方法 1:VS Code 预览
        • 方法 2:浏览器测试
      • 4.2 打包发布
    • 五、进阶技巧与注意事项
      • 5.1 性能优化建议
      • 5.2 常见问题排查
      • 5.3 创新拓展方向
    • 六、总结


在这里插入图片描述


一、JSAR 简介与开发环境搭建

1.1 什么是 JSAR?

JSAR(JavaScript Augmented Reality)是 Rokid 推出的空间小程序开发框架,允许开发者使用 Web 技术栈(JavaScript/TypeScript)构建可嵌入物理空间的 AR 应用。其核心优势在于:

  • 低门槛:无需学习 Unity 或 Unreal Engine,前端开发者可直接上手
  • 强隔离:空间组件独立运行,互不干扰
  • 跨平台:支持 Rokid AR 眼镜、手机等多设备

1.2 开发环境准备

必备工具(版本要求严格):

  • Visual Studio Code ≥ 1.80.0
  • Node.js ≥ 18.0.0(建议使用 18.12.1 LTS)
  • JSAR DevTools 插件(VS Code 商店搜索安装)

环境搭建步骤:

# 验证 Node.js 安装
node -v  # 需显示 ≥ v18.x.x
npm -v   # 配套版本 ≥ 8.0.0
# 安装 JSAR 脚手架
npm init @yodaos-jsar/widget@latest my-weather-widget
cd my-weather-widget
npm install  # 安装类型定义与依赖

二、JSAR 项目结构与核心概念

2.1 项目文件解析

my-weather-widget/
├── main.xsml        # 空间布局定义(类似 HTML)
├── package.json     # 项目配置
├── lib/main.ts      # TypeScript 逻辑
└── model/           # 3D 模型资源

关键文件详解:

  • main.xsml:使用空间标记语言定义 3D 场景结构
<xsml version="1.0"><head><title>天气小摆件</title><script src="./lib/main.ts"></script></head><space><!-- 3D 场景容器 --></space>
</xsml>
- package.json:需指定 xsml 入口文件
{"main": "main.xsml","dependencies": { "@rokid/jsar": "^0.2.0" }
}

2.2 核心概念图解

概念说明类比 Web 开发
可嵌入空间划定的 3D 子空间区域iframe 容器
XSML空间标记语言,定义 3D 元素布局HTML
JSAR-DOM空间文档对象模型,操作 3D 元素DOM API
Babylon.js3D 渲染引擎,处理图形渲染与动画CSS + Canvas

三、实战开发:3D 天气小摆件

3.1 基础场景搭建

在 lib/main.ts 中创建 Babylon.js 场景:

// 获取 JSAR 全局场景对象
const scene = spaceDocument.scene as BABYLON.Scene;
// 添加环境光
const light = new BABYLON.HemisphericLight("light", new BABYLON.Vector3(0, 1, 0), scene
);
light.intensity = 0.7;
// 创建地面
const ground = BABYLON.MeshBuilder.CreateGround("ground", { width: 10, height: 10 }, scene
);
const groundMat = new BABYLON.StandardMaterial("groundMat", scene);
groundMat.diffuseColor = new BABYLON.Color3(0.8, 0.8, 0.8);
ground.material = groundMat;

在这里插入图片描述

3.2 集成和风天气 API

步骤 1:获取 API Key

  1. 访问 和风天气开发者平台 注册账号
    在这里插入图片描述
  2. 创建应用获取 API Key(免费版每日可调用 1000 次)

在这里插入图片描述

步骤 2:编写 API 调用函数

async function fetchWeather(city: string): Promise<any> {const apiKey = "YOUR_API_KEY"; // 替换为实际密钥const cityUrl = `https://geoapi.qweather.com/v2/city/lookup?location=${city}&key=${apiKey}`;try {// 获取城市 IDconst cityRes = await fetch(cityUrl);const cityData = await cityRes.json();const cityId = cityData.location[0].id;// 获取天气数据const weatherUrl = `https://devapi.qweather.com/v7/weather/now?location=${cityId}&key=${apiKey}`;const weatherRes = await fetch(weatherUrl);return await weatherRes.json();} catch (error) {console.error("天气 API 调用失败:", error);return null;}
}

3.3 3D 天气可视化实现

创建动态更新的天气球体:

async function createWeatherSphere() {// 创建球体作为天气指示器const sphere = BABYLON.MeshBuilder.CreateSphere("weatherSphere", { diameter: 2 }, scene);sphere.position.y = 1;// 创建材质const sphereMat = new BABYLON.StandardMaterial("sphereMat", scene);sphere.material = sphereMat;// 更新天气数据setInterval(async () => {const weatherData = await fetchWeather("北京");if (weatherData && weatherData.code === "200") {const temp = weatherData.now.temp;const text = weatherData.now.text;// 根据天气状况改变球体颜色switch(text) {case "晴":sphereMat.diffuseColor = new BABYLON.Color3(1, 0.8, 0); // 晴天-黄色break;case "雨":sphereMat.diffuseColor = new BABYLON.Color3(0.3, 0.5, 1); // 雨天-蓝色break;case "阴":sphereMat.diffuseColor = new BABYLON.Color3(0.6, 0.6, 0.6); // 阴天-灰色break;}console.log(`当前温度: ${temp}℃, 天气: ${text}`);}}, 60000); // 每分钟更新一次return sphere;
}
// 初始化天气球体
createWeatherSphere();

四、调试与打包发布

4.1 本地调试

方法 1:VS Code 预览
  1. 打开 main.xsml 文件
  2. 点击右上角 “场景视图” 按钮启动预览
  3. 使用 WASD 键控制视角,鼠标滚轮缩放
方法 2:浏览器测试
# 安装静态服务器
npm install -g serve
serve -p 8080 --cors
# 在 JSAR Playground 中打开
https://jsar.netlify.app/playground?url=http://localhost:8080/main.xsml

在这里插入图片描述

4.2 打包发布

# 构建项目
npm run build# 生成的包位于 dist/ 目录
# 可通过 Rokid 开发者平台上传至 AR 应用商店

五、进阶技巧与注意事项

5.1 性能优化建议

  • 模型轻量化:3D 模型面数控制在 1000 以内
  • 减少绘制调用:合并静态模型,共享材质
  • 按需加载:非关键资源使用懒加载模式

5.2 常见问题排查

问题现象可能原因解决方案
场景无渲染VS Code 扩展未激活重启 VS Code 或重装 JSAR DevTools
API 调用失败跨域问题使用 Rokid 设备测试或配置代理
模型不显示GLB 文件路径错误检查 xsml 中 link 标签的 href 属性

5.3 创新拓展方向

  1. 多设备同步:结合 WebSocket 实现多 AR 眼镜间数据同步
  2. 语音交互:集成 Rokid 语音 SDK 实现语音控制天气查询
  3. 数据可视化:展示未来 7 天天气预报的 3D 时间轴

六、总结

本教程通过开发一个实时天气小摆件,介绍了 JSAR 开发的完整流程。从环境搭建到 API 集成,再到 3D 可视化实现,我们展示了如何将 Web 开发经验迁移到 AR 领域。JSAR 技术正在快速发展,建议持续关注 Rokid 开发者论坛 获取最新更新。

希望这个教程能帮助你迈出空间开发的第一步,期待看到更多创意十足的 JSAR 应用!

http://www.dtcms.com/a/482731.html

相关文章:

  • 【Pytorch】什么是梯度
  • 核间通信机制
  • 吕口*云蛇激光*VS*薄利魔刀*武打算法的方案
  • CSP-S模拟赛五总结(实际难度远低于提高组)
  • 网站建设服务器的配置wordpress 输出sql
  • 邵阳建设网站公司app在线生成平台 免费
  • 如何在第三方网站做推广什么关键词可以搜到那种
  • 深度解析 PostgreSQL 中的 ctid、xmin、xmax:从原理到实战
  • 2-sat
  • KPI、OKR 和 GS 的区别
  • 坂田网站建设费用明细wordpress 最近登录地址
  • 网站开发技术微信公众平台如何绑定网站
  • electron+react+esbuild入门项目
  • iOS 应用加固与苹果软件混淆指南,如何防止 IPA 被反编译与二次打包?
  • jsp电商网站怎么做网络营销是什么部门
  • 网站优化体验报告百度网盟推广步骤
  • 物联网系统三层架构解析
  • 京东联手广汽、宁德时代造车!
  • PEFT适配器加载
  • React Hooks 核心规则自定义 Hooks
  • 江门网站制作 华企立方洛宁县东宋乡城乡建设局网站
  • 河南网站建设哪家有三品合一网站建设案例
  • 位运算专题总结:从变量初始化陷阱到理解异或分组
  • Linux学习笔记(八)--环境变量与进程地址空间
  • 【动态规划】题目中的「0-1 背包」和「完全背包」的问题
  • Streamlit 中文全面教程:从入门到精通
  • 大模型系列-dify
  • 推荐系统:Python汽车推荐系统 数据分析 可视化 协同过滤推荐算法 汽车租赁 Django框架 大数据 计算机✅
  • 第16讲:深入理解指针(6)——sizeof vs strlen 与 指针笔试题深度解析
  • 【iOS】PrivacyInfo.xcprivacy隐私清单文件(二)