










一个 .NET 8 + Three.js 的 vibe coding 实验:从"卡片式首页"到"程序员坐在宇宙里敲代码"。
MetaMe 从一开始就不是一份简历,也不是作品集,而是一个关于"我"本身的可展览作品。项目文档里把它定义为:
Meta = 元 / 关于自身,Me = 我。中文名"元我",英文 MetaMe。
它是职业身份、生活身份、思想身份三层切面的集合。
既然网站本身是一个"自画像",那么首页就不该只是文字、图片和按钮的堆砌。它应该像走进一个人的客厅一样——你看见他的样子、他的工作台、他关心的话题,以及通往不同房间的入口。
这个直觉推动了 3D 首页的诞生。
设计目标非常具体:
Data/singletons/home.json 读取,并通过 /admin 单例编辑器维护。
最初的指令是:"在页面中构建一个虚拟的程序员人物形象,在他周边以气泡状显示各种自画像属性。"
于是我们有了:
THREE.Sprite 漂浮着 10 个气泡,分两类:
role:大、内圈、高不透明,代表核心身份。tag:小、外圈、低透明,代表技术领域。这一阶段完成了"空间感"。
首页变成全屏,header 不再是顶部一条白底导航,而是浮在 3D 空间上方的透明层。滚动到下方纸面内容后,header 再变成暗色毛玻璃。
这一步让网站从"页面"变成了"空间"。
最新的需求把空间信息做了更明确的分层:

这一步把"信息层级"和"可探索性"做扎实了。内容不是一眼看完的,而是可以逛的。
项目里 wwwroot/js/lib/three.module.min.js 是自托管的 Three.js r160,通过 importmap 引入。这样不依赖外部 CDN,符合"数据主权"和"无厂商依赖"的设计原则。
身份卡、气泡、传送门文字都不是图片,而是用 HTML Canvas 动态绘制成纹理:
这样做的好处是:内容改了,纹理自动重绘,不需要重新出图。
Pages/Index.cshtml 把 home.json 里的 space 节点序列化后注入为页面上的 <script id="hero3d-config">:
{
"idCards": [
{ "title": "元我 · 虚拟身份卡", "description": "..." },
{ "title": "我能做什么", "description": "..." },
{ "title": "我的信条", "description": "..." }
],
"bubbles": [
{ "label": "客户问题解决者", "kind": "role", "description": "..." },
{ "label": "技术顾问", "kind": "role", "description": "..." },
...
],
"portals": [
{ "key": "看", "description": "..." },
...
]
}
home-3d.js 读取 CONF 动态生成场景。内容变更只需要改 JSON,不需要碰 JS。
用 THREE.Raycaster 在 pointermove 时检测:
Tooltip 是普通的 DOM <div class="hero3d-tip">,根据鼠标位置定位,并做视口边界裁剪。
prefers-reduced-motion。多次 dotnet run 后,残留 Kestrel 进程占住端口(5199、5200、5210、5220、5230……),导致新实例起不来。解决方式:每次开发完用 taskkill 清理,或者换用新端口。
dotnet build 时 MetaMe.exe 经常被运行中的 Kestrel 进程锁住。必须先杀进程再编译。这是 Windows 开发 .NET 应用的常见痛。
清理项目时,本机的 rm 和 PowerShell Remove-Item 都被一个 safe-delete 包装器拦截,统一走回收站。而回收站 API 对部分文件/目录报"这个系统不支持该功能",导致删除失败。
绕过方法:find <path> -delete(直接 unlink,不经过回收站)。
Windows 下 File.Move(overwrite:true) 覆盖 data/indexes/posts.json 会报 AccessDenied。修复方式:先 File.Delete 再 Move,失败时回退为直接 File.WriteAllText;同时 RebuildIndexes() 用 try/catch 包裹,避免启动崩溃。
打开首页,你会看到:
3D 空间的骨架已经搭好,接下来是内容:
profile.json。/data。这个首页的终极检验标准来自需求文档里的一句话:
让一个陌生人在 10 秒内产生"这人有点意思"的判断。
3D 空间不是炫技,而是为了让"有点意思"这个判断,在第一眼就发生。
2026-08-27 · MetaMe 3D 首页开发记录
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。