Three.js太阳系3D可视化实战:从零构建行星轨道动画与交互场景
最近在做一个数据可视化大屏项目需要展示太阳系行星的运行轨迹尝试了多种方案后最终选择了 Three.js。不得不说用它来构建3D宇宙场景效果确实震撼。但过程中也踩了不少坑比如模型加载一片黑、坐标转换晕头转向。本文将分享一个完整的、可运行的“太阳系漫游”Three.js项目从环境搭建、场景构建、模型加载、光照相机设置到行星轨道动画和交互实现手把手带你走完整个流程。无论你是Three.js新手想入门3D Web开发还是有一定基础想实现复杂场景都能从中获得可直接复用的代码和清晰的排错思路。1. 背景与核心概念为什么是Three.js在Web端实现3D效果过去主要依赖Flash或浏览器插件如今WebGL已成为标准。但直接使用原生WebGL API进行开发复杂度极高需要处理大量的底层渲染细节。Three.js应运而生它是一个基于WebGL的轻量级3D图形库封装了底层的图形接口让开发者能够用更直观的JavaScript对象如场景、相机、几何体、材质、光源来创建和操控3D场景。它能解决什么问题降低3D开发门槛无需深入钻研图形学矩阵运算和着色器语言即可创建复杂3D应用。跨平台与免插件基于Web标准只要浏览器支持WebGL即可运行完美适配PC和移动端。丰富的功能与生态内置几何体、多种材质和光源支持加载.gltf/.glb、.obj、.fbx等多种主流3D模型格式并有大量社区示例和扩展。常见应用场景产品展示与电商360度查看商品、虚拟试衣。数据可视化3D地图、建筑BIM、网络拓扑图。教育与模拟如本文的太阳系模拟、机械原理演示。游戏与创意页面小型Web游戏、品牌宣传页。为什么选择它做太阳系太阳系模拟需要构建多个球体行星、设置纹理贴图星球表面、控制它们围绕中心太阳的圆周运动并允许用户旋转、缩放视角。Three.js的SphereGeometry球体几何、MeshStandardMaterial标准网格材质和OrbitControls轨道控制器等模块能让我们以声明式的方式快速组合出这个系统并轻松添加动画和交互。2. 环境准备与版本说明在开始编码前我们需要搭建一个基础的Web开发环境。本文示例将使用最通用的方式通过CDN引入Three.js库并创建一个简单的HTML文件来运行。这种方式无需构建工具最适合快速学习和原型开发。环境要求操作系统Windows / macOS / Linux 均可。浏览器推荐使用最新版的 Chrome、Edge 或 Firefox确保WebGL支持完好。可以在 https://get.webgl.org/ 测试你的浏览器。编辑器任意代码编辑器如 VS Code、Sublime Text、WebStorm。Three.js 版本本文使用 r158一个较新且稳定的版本。Three.js更新较快但核心API变化相对平缓。建议初学者先从CDN使用一个稳定版本开始避免因最新版API变动而踩坑。项目结构 我们将创建一个非常简单的项目文件夹包含以下文件solar-system-tutorial/ ├── index.html # 主HTML文件 ├── main.js # 主要的JavaScript代码 └── textures/ # 存放星球纹理图片的文件夹 ├── sun.jpg ├── earth.jpg ├── jupiter.jpg └── ... (其他行星纹理)纹理图片你可以从NASA官网、纹理素材网站或一些开源天文项目中找到高质量的星球纹理图。确保图片尺寸为2的幂次方如1024x512, 2048x1024以获得最佳的渲染性能和兼容性。3. 核心概念与Three.js基础组件拆解在动手写太阳系之前必须理解Three.js的几个核心对象它们就像搭建舞台的各个角色。3.1 场景、相机与渲染器3D世界的基石场景可以理解为一个3D容器或舞台所有要显示的对象网格、灯光等都需要添加到场景中。const scene new THREE.Scene(); scene.background new THREE.Color(0x000033); // 设置深蓝色背景模拟太空相机决定了我们观察场景的视角。最常用的是PerspectiveCamera透视相机模拟人眼视角有近大远小的效果。// 参数视野角度、宽高比、近裁剪面、远裁剪面 const camera new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); camera.position.set(0, 20, 100); // 将相机移动到(0, 20, 100)的位置渲染器负责将场景和相机看到的画面绘制到浏览器的canvas元素上。const renderer new THREE.WebGLRenderer({ antialias: true }); // 开启抗锯齿 renderer.setSize(window.innerWidth, window.innerHeight); // 设置渲染尺寸为窗口大小 document.body.appendChild(renderer.domElement); // 将canvas添加到页面3.2 几何体、材质与网格物体的“形”与“色”几何体定义了物体的形状如球体、立方体、平面等。const geometry new THREE.SphereGeometry(5, 32, 16); // 半径5经纬分段数材质定义了物体的表面特性如颜色、光泽度、纹理等。const material new THREE.MeshStandardMaterial({ color: 0xffff00, // 颜色 roughness: 0.8, // 粗糙度 map: sunTexture // 纹理贴图 });网格将几何体和材质结合形成一个可以在场景中显示和操作的物体。const sun new THREE.Mesh(geometry, material); scene.add(sun); // 别忘了添加到场景3.3 光源让世界拥有明暗没有光物体就是一片漆黑。Three.js提供了多种光源AmbientLight环境光均匀照亮所有物体无方向常用于提亮整体场景。DirectionalLight平行光像太阳光有方向会产生清晰的阴影。PointLight点光源像灯泡向所有方向发光。HemisphereLight半球光模拟天空和地面的环境光能产生更自然的室外光照效果。 对于太阳系我们可以用一个强烈的PointLight来模拟太阳本身的光照。3.4 轨道控制器实现用户交互OrbitControls是一个非常有用的扩展它允许用户通过鼠标拖拽来旋转场景通过滚轮来缩放实现第一人称的“漫游”体验。它不是Three.js核心库的一部分需要单独引入。import { OrbitControls } from three/addons/controls/OrbitControls.js; // 或者通过CDN引入 const controls new OrbitControls(camera, renderer.domElement); controls.enableDamping true; // 启用阻尼惯性效果让交互更平滑 controls.dampingFactor 0.05;4. 完整实战构建可交互的太阳系现在让我们将以上概念组合起来创建一个完整的太阳系。4.1 项目初始化与HTML结构首先创建index.html通过CDN引入Three.js和轨道控制器。!DOCTYPE html html langzh-CN head meta charsetUTF-8 meta nameviewport contentwidthdevice-width, initial-scale1.0 titleThree.js 太阳系漫游/title style body { margin: 0; overflow: hidden; } #info { position: absolute; top: 10px; left: 10px; color: white; font-family: monospace; } /style /head body div idinfo加载中.../div !-- Three.js渲染的canvas将在这里插入 -- script srchttps://cdn.jsdelivr.net/npm/three0.158.0/build/three.min.js/script script srchttps://cdn.jsdelivr.net/npm/three0.158.0/examples/js/controls/OrbitControls.min.js/script script srcmain.js/script /body /html4.2 创建场景、相机、渲染器与控制器在main.js中我们开始构建核心的Three.js世界。// main.js // 1. 初始化场景、相机、渲染器 const scene new THREE.Scene(); scene.background new THREE.Color(0x000010); // 深空背景 const camera new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.1, 3000); camera.position.set(0, 50, 150); const renderer new THREE.WebGLRenderer({ antialias: true }); renderer.setSize(window.innerWidth, window.innerHeight); renderer.shadowMap.enabled true; // 启用阴影 renderer.shadowMap.type THREE.PCFSoftShadowMap; // 使用软阴影 document.body.appendChild(renderer.domElement); // 2. 添加轨道控制器 const controls new OrbitControls(camera, renderer.domElement); controls.enableDamping true; controls.dampingFactor 0.05; controls.minDistance 20; controls.maxDistance 500; // 3. 窗口自适应 window.addEventListener(resize, () { camera.aspect window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize(window.innerWidth, window.innerHeight); });4.3 创建太阳与行星我们将定义一个createPlanet函数来复用创建星球的逻辑。这里以太阳、地球、木星为例。// 纹理加载器 const textureLoader new THREE.TextureLoader(); // 创建太阳 function createSun() { const geometry new THREE.SphereGeometry(10, 64, 32); const texture textureLoader.load(./textures/sun.jpg); const material new THREE.MeshBasicMaterial({ map: texture }); // 太阳自发光用BasicMaterial const sun new THREE.Mesh(geometry, material); // 添加一个点光源作为太阳的光照 const sunLight new THREE.PointLight(0xffffff, 2, 0, 2); sun.add(sunLight); // 将光源作为太阳的子对象光源会跟随太阳移动 scene.add(sun); return { sun, light: sunLight }; } // 创建行星的通用函数 function createPlanet(radius, texturePath, orbitalRadius, orbitalSpeed) { const geometry new THREE.SphereGeometry(radius, 32, 16); const texture textureLoader.load(texturePath); const material new THREE.MeshStandardMaterial({ map: texture, roughness: 1 }); const planet new THREE.Mesh(geometry, material); planet.castShadow true; // 行星投射阴影 planet.receiveShadow true; // 行星接收阴影 // 创建一个空对象作为轨道中心点行星将围绕它旋转 const orbit new THREE.Object3D(); scene.add(orbit); orbit.add(planet); planet.position.x orbitalRadius; // 将行星放置在轨道半径上 return { planet, orbit, orbitalSpeed }; } // 创建行星数据 const planets []; const sunObj createSun(); planets.push(sunObj); // 地球 const earth createPlanet(3, ./textures/earth.jpg, 30, 0.01); planets.push(earth); // 木星 const jupiter createPlanet(8, ./textures/jupiter.jpg, 80, 0.003); planets.push(jupiter); // 可以继续添加水星、金星、火星等...4.4 添加星空背景与动画循环为了增强太空感我们添加一个星空背景并创建动画循环来更新行星位置。// 添加星空背景使用立方体贴图或大量粒子这里用简单粒子 function createStarfield() { const starGeometry new THREE.BufferGeometry(); const starCount 5000; const positions new Float32Array(starCount * 3); for (let i 0; i starCount * 3; i 3) { positions[i] (Math.random() - 0.5) * 2000; positions[i 1] (Math.random() - 0.5) * 2000; positions[i 2] (Math.random() - 0.5) * 2000; } starGeometry.setAttribute(position, new THREE.BufferAttribute(positions, 3)); const starMaterial new THREE.PointsMaterial({ color: 0xffffff, size: 0.7 }); const stars new THREE.Points(starGeometry, starMaterial); scene.add(stars); } createStarfield(); // 动画循环 let time 0; function animate() { requestAnimationFrame(animate); time 0.016; // 假设每秒60帧每帧时间增量 // 更新每个行星除了太阳的轨道位置 for (let i 1; i planets.length; i) { const p planets[i]; p.orbit.rotation.y p.orbitalSpeed; } // 太阳自转 sunObj.sun.rotation.y 0.002; controls.update(); // 更新控制器如果启用了阻尼 renderer.render(scene, camera); // 更新信息显示 document.getElementById(info).innerHTML 相机位置: (${camera.position.x.toFixed(1)}, ${camera.position.y.toFixed(1)}, ${camera.position.z.toFixed(1)})br 使用鼠标拖拽旋转滚轮缩放。 ; } animate();5. 常见问题与排查思路在开发Three.js项目时你几乎一定会遇到下面这些问题。问题现象常见原因解决思路场景一片漆黑什么都看不见1. 没有添加光源。2. 相机位置不对物体在相机背面或视野外。3. 材质设置错误如MeshBasicMaterial不需要光而MeshStandardMaterial需要。1. 检查并添加至少一个光源AmbientLight或DirectionalLight。2. 调整camera.position并调用camera.lookAt(0,0,0)看向场景中心。3. 确认材质类型与光源匹配或使用MeshBasicMaterial测试。加载的GLB/GLTF模型全黑1. 模型文件路径错误或未成功加载。2. 模型本身不包含材质或纹理。3. 场景中没有足够强的光源PBR材质需要光照。4. 纹理加载跨域问题本地文件协议。1. 使用浏览器的开发者工具“网络”标签页查看模型文件是否返回404。2. 使用GLTFLoader的onError回调捕获错误。3. 添加一个强DirectionalLight或HemisphereLight。4. 在本地运行需启动一个HTTP服务器如VS Code的Live Server不能直接双击打开HTML文件。物体显示锯齿严重渲染器没有开启抗锯齿。在创建WebGLRenderer时传入参数new THREE.WebGLRenderer({ antialias: true })。鼠标交互OrbitControls不生效1. 控制器初始化时传入的DOM元素错误。2. 没有在动画循环中调用controls.update()如果启用了阻尼。3. 相机或控制器被其他代码重置。1. 确保第二个参数是renderer.domElement。2. 在animate函数中调用controls.update()。3. 检查是否有其他代码修改了camera.position或controls.target。性能卡顿帧率很低1. 几何体面数太多分段数过高。2. 实时阴影计算开销大。3. 每帧执行了昂贵的操作如创建新对象。4. 纹理图片尺寸过大。1. 减少几何体的widthSegments和heightSegments参数。2. 限制产生阴影的光源数量或降低shadowMap的width/height。3. 将初始化代码移出动画循环利用对象复用。4. 压缩纹理图片使用合适的尺寸如1024x1024。6. 最佳实践与工程建议当你的Three.js项目从Demo走向实际应用时下面这些经验能帮你走得更稳。1. 项目结构与模块化不要把所有代码都堆在一个main.js里。按功能拆分sceneSetup.js: 场景、相机、渲染器、控制器初始化。createSolarSystem.js: 创建太阳、行星、轨道等物体的函数。utils.js: 工具函数如纹理加载、坐标转换。main.js: 主入口组织调用和启动动画循环。如果使用构建工具如Vite、Webpack可以利用ES6模块import/export来管理依赖。2. 资源加载与管理使用加载管理器Three.js的LoadingManager可以统一管理多个资源纹理、模型、字体的加载进度便于显示加载界面。const manager new THREE.LoadingManager(); manager.onLoad () { console.log(所有资源加载完毕); }; manager.onProgress (url, loaded, total) { console.log(加载中: ${loaded}/${total}); }; const loader new THREE.TextureLoader(manager);纹理压缩与格式生产环境使用.jpg或压缩的.png。考虑使用.basis或.ktx2等GPU友好格式以减少内存和带宽。可以使用Three.js的KTX2Loader或BasisTextureLoader。3. 性能优化重用几何体和材质相同的物体如大量相同的小行星应共享几何体和材质使用不同的Mesh实例。细节层次对于远处的物体使用面数更少的几何体LOD - Level of Detail。Three.js提供了THREE.LOD对象。视锥体裁剪Three.js默认会进行视锥体裁剪。确保不要创建远在视锥体外的物体或者手动管理它们的可见性。减少实时阴影动态阴影非常消耗性能。尽可能使用烘焙光照贴图或只为关键物体启用阴影。4. 内存管理与销毁从场景中移除物体时如果确定不再使用应调用geometry.dispose()和material.dispose()来释放WebGL内存特别是对于动态创建和销毁大量物体的应用如游戏。5. 响应式设计监听window的resize事件及时更新camera.aspect和renderer.setSize如本文示例所示。对于移动端可能需要根据设备像素比window.devicePixelRatio来设置渲染器精度以平衡清晰度和性能renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2))。6. 调试与开发工具Three.js官方编辑器可用于可视化地组合场景。Chrome开发者工具Layers面板可以查看WebGL调用和纹理内存。社区工具three-inspector浏览器插件可以实时查看和修改场景中的对象属性是强大的调试利器。掌握了从环境搭建、核心概念理解到完整项目构建的全过程并了解了常见的“坑”和优化方向你已经具备了用Three.js创建丰富3D网页应用的基础。接下来可以尝试更复杂的模型加载、添加粒子效果如行星环、星云、集成物理引擎如Cannon.js模拟引力甚至结合Vue.js或React框架来构建更大型的3D应用。记住3D开发是“视觉编程”多动手调整参数、观察效果是学习最快的方式。

相关新闻

正式评优线上投票如何落地?工具选型与风控实战参考

正式评优线上投票如何落地?工具选型与风控实战参考

又到年中评优季。不少企业的HR和行政又开始头疼:传统“领导拍板”容易引发公平性质疑,纸质投票统计耗时费力,微信群接龙则分分钟被刷票攻陷。线上投票系统成了刚需,但选什么工具、怎么防刷,是两道绕不过的坎。 今天这…

2026/8/18 22:18:25 阅读更多 →
RAG系统构建实战:从文档切片到混合检索的工程化指南

RAG系统构建实战:从文档切片到混合检索的工程化指南

如果你在2024年问一个开发者,大模型应用落地最靠谱的路径是什么?十有八九会告诉你:RAG。但如果你再追问,如何从零搭建一个真正可用、可扩展、能应对复杂业务场景的RAG系统?很多人可能就卡在了“文档切片怎么切”、“向…

2026/8/18 22:17:25 阅读更多 →
基于OpenAI API构建智能对话记忆系统:从原理到实战

基于OpenAI API构建智能对话记忆系统:从原理到实战

在 ChatGPT 的日常使用中,你是否曾有过这样的困扰:几天前和 AI 讨论过一个技术方案,当时它给出了一个非常精妙的代码片段,但现在却怎么也想不起具体的对话内容,只能在一页页的聊天记录里大海捞针?或者&…

2026/8/18 22:17:25 阅读更多 →

最新新闻

AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

1. 项目概述:当AI开始“猜”数学定理 最近在AI研究圈里,一个名为“Moonshine”的项目引起了不小的讨论。这名字本身就挺有意思,直译是“月光”,但在数学史上,它特指一个神秘而美丽的联系——魔群月光猜想,连…

2026/8/19 0:00:30 阅读更多 →
【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/19 0:00:30 阅读更多 →
IPMI与ipmitool实战指南:从硬件监控到远程运维

IPMI与ipmitool实战指南:从硬件监控到远程运维

1. 项目概述:从“黑盒子”到“透明机房”的钥匙如果你管理过服务器,尤其是那些托管在机房、藏在机柜深处的设备,一定经历过这样的场景:服务器突然宕机,远程SSH连接不上,控制台一片漆黑。这时候,…

2026/8/18 23:59:30 阅读更多 →
Windows文件关联错误修复全攻略:从原理到实战解决“无法打开文件”

Windows文件关联错误修复全攻略:从原理到实战解决“无法打开文件”

1. 问题根源:为什么文件会“打不开”? “该文件没有与之关联的应用来执行该操作。” 这句话对于任何使用Windows系统的用户来说,都像一盆冷水,尤其是在你急需打开某个重要文件的时候。它本质上是一个“文件关联”错误。简单来说&a…

2026/8/18 23:59:30 阅读更多 →
ROS tf2坐标系转换:从原理到实战,解决机器人开发中的空间关系难题

ROS tf2坐标系转换:从原理到实战,解决机器人开发中的空间关系难题

1. 项目概述:为什么你需要深入理解ROS tf2如果你正在捣鼓ROS机器人,无论是让机械臂精准抓取,还是让小车在房间里自主导航,有一个问题你迟早会碰到:坐标系转换。想象一下,你的机器人身上装满了传感器——激光…

2026/8/18 23:59:30 阅读更多 →
AgenticVAU:多智能体协同实现视频异常深度理解

AgenticVAU:多智能体协同实现视频异常深度理解

1. 从“看”到“理解”:视频异常理解的挑战与AgenticVAU的解题思路 最近在跟进一些工业质检和安防监控的项目,客户反馈最多的一个痛点就是:现有的AI系统“看”是能“看”到异常,但“理解”不了异常。比如,监控画面里一…

2026/8/18 23:59:30 阅读更多 →

日新闻

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/19 0:00:30 阅读更多 →
AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

1. 项目概述:当AI开始“猜”数学定理 最近在AI研究圈里,一个名为“Moonshine”的项目引起了不小的讨论。这名字本身就挺有意思,直译是“月光”,但在数学史上,它特指一个神秘而美丽的联系——魔群月光猜想,连…

2026/8/19 0:00:30 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →