【Code with SOLO】陪初二儿子用 SOLO 做了一个 3D 太阳系(已开源)

:milky_way: 在线体验: 太阳系探索器 | 3D交互式天文教育 | 何健个人网站
https://traesolar-system-standalonec6zn.vercel.app
:family_man_boy: 作者:何健(爸爸)+ 何零壹(初二儿子)
:hammer_and_wrench: 技术栈:TRAE SOLO · Next.js 14 · Three.js · @react-three/fiber · TypeScript
:date: 周期:连着三周,从"自定义天体翻车" → “三体翻车” → “太阳系上线”
:scroll: 开源仓库:


:pushpin: 摘要

TRAE SOLO 陪初二的儿子,从他的一个学弟在课上的一句嘟囔开始——

“书上那张太阳系图是平的,有啥看头?能不能真的转起来、点进去看?”

儿子把这话当了真,回家第一句话就是:"爸爸,这个能做吗?"于是拉着一个多年没写过代码的 IT 爸爸和 SOLO,三个周末做出了一个基于真实 NASA JPL 天文数据的 3D 太阳系探索器:八大行星按真实轨道运行、主要卫星全覆盖、还能自己画一颗小行星扔进太阳系(开普勒第三定律真·算出公转周期)。

整个链路是:儿子带头 → 爸爸配合 → SOLO 实现 → 儿子验收挑刺。做完之后,他主动拿去分享给同学和老师;老师把链接发给全班。当初那位嘟囔"图是平的"的学弟,据说在走廊里围着儿子问了半天

之前我在 【Hello AI 科技致善】普通父母也能陪孩子学 AI:我用 SOLO 陪两个孩子做了一整个亲子网站(hj1982.cn) 里提过这个项目。那篇发完之后,评论区真有朋友来问源码,我才意识到这个小作品可以不只属于我家,也可以属于喜爱它的人们。于是决定把它单独拎出来、单独开源——发给所有想陪孩子做点什么、但又觉得"自己不行"的爸妈。


:bullseye: 背景:一个"多年没写代码的 IT 爸爸",和一个"爱琢磨的初二少年"

我的真实身份:公立医院信息科人员,平时做的是管理,写 PPT、开协调会、跑项目,已经很久没有手写代码。真的要我下班后从 0 学 Three.js、搭 3D 场景陪孩子——坦白讲,SOLO 出现之前,这事我连想都不敢想。

儿子那边:对天体一直有执念。刘慈欣翻过不止一遍,天天跟我念叨"三体是不是真的没有解"。

触发点是一个学弟。初一地理课正好学到太阳系那一章。儿子的一个学弟下课后跟他嘟囔:

“书上那张图是平的,能不能真的转起来、点进去看?”

儿子听完,当天回家就问我:"爸爸,这个能做吗?“我心里一凉——能做,但按老办法大概要几个月。我犹豫地说了一句"爸爸想想办法”,他大概听出了我的虚,马上加了一句:

“不用你一个人做,我跟你一起。”

那一刻我决定,用 SOLO 试一下。——这件事,我一个人做不了,但我们俩加上 SOLO,也许可以


:hammer_and_wrench: 实践过程:三周,多次翻车,一次上线

和很多"一气呵成"的分享帖不一样,我们这个项目其实翻过两次车。真实过程原样讲出来,也许对后面想陪孩子做东西的爸妈更有用。

第一个周六:儿子想做"自己的星系" → 翻车 :flying_saucer:

儿子第一次提的需求其实不是太阳系,是自定义天体:

“爸爸,能不能做一个我自己设定的星系?我放几颗星球进去,它们自己绕来绕去。”

我把这话原样丢给 SOLO。SOLO 很快给出了一版——结果跑起来不到 几 秒,几颗星球啪地一下飞出屏幕,像被什么东西弹开了。

  • 第一反应以为是 bug,让 SOLO 修。
  • 改了几轮才搞明白:这根本不是代码的问题,是物理问题——用户乱填的轨道参数(质量/初速度/距离)对星系中微妙的引力填信息来说根本不合适",稍微不配套,数值积分就爆炸,天体直接飞出宇宙。
  • 这时候才理解:物理上的"稳定轨道"是有很窄的参数窗口的,不是随便画两颗球就能转起来的。

儿子:“那我算了,我不当上帝了。”

第一个周日:儿子想做"三体" → 又翻车 :milky_way::milky_way::milky_way:

刘慈欣粉都懂——不做自定义,那来点"有纪念意义的":三体

“爸爸,我们做三颗恒星互相绕的那种!”

SOLO 老老实实写了三体引力计算。结果:

  • 三体问题本身就是混沌的,没有解析解,数值模拟跑几圈一定会崩。
  • 要么三颗星黏在一起变成一颗大火球,要么其中一颗被弹飞到无穷远。而且还没有几个卫星。
  • 我们尝试过加边界、加约束、加"重置机制",但每次崩的时间点都让儿子抓狂:“还没看够就炸了!”

两次翻车的共同教训:

别让 AI 帮你解数学上就没有稳定解的问题——它能写代码,不能改变物理。

第一周末:退一步海阔天空——做真实太阳系 :sun_with_face:

儿子自己总结的:“要不我们做一个反正现实里就转得好好的那种?”

于是,真实太阳系这个命题正式立项。这次的项目,我要求他写得更具体:

"做一个 Web 端 3D 太阳系,面向初中生。
技术栈:Next.js 14 + Three.js + @react-three/fiber + TypeScript。(这个是问的AI)
八大行星按真实轨道参数,用 NASA JPL 的数据;
距离可以压缩方便看(给个’真实 / 夸张’切换开关);

这一版 SOLO 基本一次跑通——前两次翻车攒的经验,这时候全都变成了具体约束

然后就是踩坑 & 打磨 :toolbox:

真实太阳系稳定了,但立刻冒出新的问题。真实地列出来,给后来者少走弯路:

原因 解决方式
:ringed_planet: 卫星太大,挡住了行星 按真实比例看不见,放大了又遮主星 satelliteScale 全局系数,默认放大,可在 UI 手动调
:telescope: 行星太小,根本看不到 真实比例下地球在屏幕上就一个像素点 加"真实 / 夸张"两档切换,默认夸张模式
:fast_forward_button: 自转一会太快一会太慢 useFrame 里时间倍率和单位没对齐 全局时间总线,所有运动共用 timeScale
:black_heart: 纹理偶尔加载失败,变成一堆黑球 2K 纹理跨网络加载,会有失败 双纹理系统:先加载真实纹理,失败自动降级到程序化 Canvas 纹理,永不空白
:mobile_phone: 手机切后台再回来会崩 WebGL 上下文丢失 webglcontextlost / webglcontextrestored 监听,自动恢复

这些坑里有一半,是SOLO 看到上下文之后主动提醒我的,比如纹理回退和 WebGL 恢复——我自己压根想不到。这是我最佩服它的地方:它不只是在写代码,它在帮你想产品

最后让儿子自己加的功能 :sparkles:

他当场提出的、我当场丢给 SOLO 实现的,还有:

  • 自己画一颗小行星(开普勒第三定律算周期)——前两周"当上帝"失败的梦,在稳定的太阳系框架里终于圆了
  • 4 个探索任务:初识太阳系(访问八大行星)、伽利略卫星、土星环探秘、类地行星对比,每个带积分
  • 键盘快捷键:Space 暂停、↑↓ 调速、M 任务面板、A 小行星创建器、R 切自转、Esc 关闭
  • 移动端响应式——因为他想"把链接发给同学看"

:wrapped_gift: 成果展示

在线体验

:milky_way: Live Demo:太阳系探索器 | 3D交互式天文教育 | 何健个人网站
:house: 整站入口(其他亲子作品):https://hj1982.cn/

开源仓库(欢迎 Star)

:camera_with_flash: [此处建议插入 4~5 张截图:首页全景 / 行星信息卡 / 小行星创建器 / 任务面板 / 手机端]

技术栈一览

选型
框架 Next.js 14(App Router)
3D Three.js + @react-three/fiber + drei
UI React 18 + TypeScript 5 + Tailwind CSS + Framer Motion
数据 NASA JPL Horizons + IAU 标准,755 行结构化 TS
纹理 Solar System Scope 2K(CC BY 4.0)+ 程序化 Canvas 回退

功能清单

  • :white_check_mark: 八大行星 + 太阳,真实轨道参数
  • :white_check_mark: 主要卫星(月球、伽利略四卫星、土卫六/二等)
  • :white_check_mark: 自定义小行星(真·开普勒第三定律)
  • :white_check_mark: 4 个探索任务 + 积分系统
  • :white_check_mark: 点击飞行聚焦(缓动 1.5s)
  • :white_check_mark: 时间控制(暂停 / 加速 / 倒退)
  • :white_check_mark: 响应式(桌面完整面板 / 手机可收起)
  • :white_check_mark: 键盘快捷键全量支持
  • :white_check_mark: MIT 开源

:light_bulb: 效果与总结

最让我感动的一幕:儿子"分享给老师"的那一天

做完的那个周日晚上,儿子用电脑的玩得不亦乐乎,突然说:

“爸爸,这个我能不能拿去给同学和地理老师看?”

我说当然可以。第二天放学他跑回来,第一句话不是"作业",而是:

“老师把链接发给全班了,说这比课本上的图好多了。那个最早嘟囔’图是平的’的学弟,今天下课在走廊拉着我问了好多问题。

那一刻我作为爸爸,感觉这段时间的艰辛是值得的。

一句课间的抱怨,变成了一个能跑的网站,变成了老师发给全班的链接,又回到了那个最初嘟囔的少年手里——这就是所谓的"闭环"。而做成这个闭环的人,是一个多年没写代码的爸爸,和一个初二的儿子,还有一个叫 SOLO 的工具。

对我自己:SOLO 真正改变了什么

诚实一点写,不吹也不黑:

  1. 它不是替我把代码写完了——是让我一个多年没写代码的管理者,敢重新开始写。这两者是天壤之别。
  2. 它帮我补齐"产品思维"——纹理回退、WebGL 恢复、快捷键、响应式,这些"让作品真的能用"的东西,全是它主动建议的。
  3. 它把我从"老师"重新变回了"爸爸"——我不需要教儿子变量和函数。我们俩都是甲方,SOLO 是乙方。我们第一次,真真正正地,一起做成了一件事

提效对比(诚实版)

维度 没有 SOLO 时的预估 实际
从 0 学 Three.js 到能写 3D 2~3 个月业余时间(大概率放弃) 直接跳过
八大行星 + 卫星 + 真实轨道 1~2 周 1 个周末
小行星 + 开普勒公式 3~5 天 2 小时
纹理回退 / WebGL 健壮性 基本不会做 SOLO 主动加
全流程 约 2~3 个月(且大概率坚持不下来) 连着 3 个周末

但对我来说,真正的提效不在时间上,而在"敢不敢"上——SOLO 把"这事我做不来"变成了"这事我们试试"。这是所有提效比里最难量化、也最值钱的一条

送给同样想陪孩子做点什么的爸妈

  • 让孩子来提需求,你来翻译成 Prompt。不要替他想。
  • 翻车是资产。我们前两次翻车,才让第三次的 Prompt 有了"稳定"这个关键词。让孩子亲历翻车,比一次跑通更重要。
  • 把"这个要发给同学玩"加到 Prompt 里——SOLO 会自动帮你考虑鲁棒性和产品细节。
  • 三个周末是一个舒服的节奏:一周做主干、一周踩坑、一周打磨。别想着一个晚上搞完。

:seedling: 后续计划

  • 加入黑洞 / 奥尔特云 / 柯伊伯带(儿子的下一个执念)
  • 重启三体模式——这次用"三体近似解 + 稳定约束"的路子,让它至少转够 3 分钟
  • 整理一份《陪孩子用 SOLO 做第一个 Web 项目》的极简手册
  • 把这个作品做成可复用的"家庭项目模板",让零基础爸妈能一键 fork

仓库已经开源,欢迎 Star、Fork、提 Issue。被孩子和陌生人一起挑毛病的作品,才会真的长大。


:folded_hands: 致谢

  • TRAE SOLO:谢谢你让一个多年没写代码的爸爸,重新敢对孩子说"好,爸爸陪你做"
  • NASA JPL & Solar System Scope:开放的数据和纹理,是科普的底气
  • 何零壹:最挑剔、最诚实、也最让我骄傲的产品经理
  • 最早在课间嘟囔"图是平的"的那位学弟:没有你那一句话,就没有后面所有这些事
  • 上一篇帖子里来问源码的朋友:是你们让我下决心单独开源

如果这篇帖子让你也想陪孩子做点什么,欢迎点赞、转发到朋友圈,或者直接去 hj1982.cn 逛一逛。

AI 时代陪孩子的意义,也许不是"教他写代码",而是"让他看见:想法真的能变成作品"

如有建议和意见的请随时联系。 我会陪大家一起进步。

建议:

  1. 按CC的 /info 的思路。 你每一次确认版本,其实就可以叫AI把文档做好。 文档很重要。
  2. 做一部分或是没做的时候就可以写规则文档。当然了我也是叫AI帮忙写: 哪些模块不能动、数据流方向、命名约定、严禁哪些反模式。
  3. 新会话的第一轮不要让它改代码,先让他复述架构。它复述错了就纠正,复述对了再让动手。这一步能拦住 80% 的架构破坏。
  4. 用 Git 当保险,我是将Git写进了规则中。他会自己触发。
  5. trae 有时候用的模型不固定,出来的不一样。 可以想办法使用你喜欢的模型。 达到契合。
  6. 测试很重要! 哪怕只有冒烟测试(能启动、能进战斗、能结算),AI 一改就跑一下,坏了立刻回滚。

总之 别跟 AI 的记忆力较劲,把记忆外置到文件里;别信任 AI 的自觉,用 git 和测试做兜底。

1 个赞

已经修正版本

1 个赞

正在重新发表。大家可自取。

1 个赞


已更新到1.1版本。 更精简。 去除了没用的功能和繁琐的地方。 根据屏幕适配

大家有做多少智能体?

[quote=“阿健, post:6, topic:10727”]
已更新到1.1版本。
[/quote]更适配于手机

[quote=“阿健, post:6, topic:10727”]
已更新到1.1版本。
[/quote]更适配于手机

目前更适配手机,请大家试用后多提建议和意见。


我会继续努力。

如有建议跟意见的请随时提出

来了

希望大家多多参与

有感兴趣的可以一起讨论

太有意义了!你真是个好爸爸!

1 个赞

怎么能这么厉害 :star_struck:

大家都很厉害。现在大部分都能做, 只是用时间磨。

谢谢,希望你们更多的提出建议和意见。

谢谢,希望你们更多的提出建议和意见。

有需要的可自取

希望依然有人关注