# Cosmo 实施计划 ## Stage 1: 后端基础框架和数据获取 **Goal**: 搭建 FastAPI 后端,实现从 NASA JPL Horizons 获取数据 **Success Criteria**: - FastAPI 服务器成功启动 - 能够查询并返回探测器和行星的坐标数据 - API 端点返回正确的 JSON 格式数据 **Tests**: - 手动测试 API 端点 `/api/celestial/positions` - 验证返回的坐标数据格式正确 - 测试时间范围查询功能 **Status**: Complete **Tasks**: - [x] 创建后端项目结构 - [x] 配置 FastAPI 和依赖 - [x] 实现 Horizons 数据查询服务 - [x] 实现 API 路由 - [x] 测试数据获取功能 --- ## Stage 2: 前端基础框架和简单 3D 场景 **Goal**: 搭建 React + Three.js 前端,显示基础 3D 场景 **Success Criteria**: - Vite + React + TypeScript 项目成功运行 - Three.js 场景正确渲染 - 显示太阳(中心)和几个彩色球体代表行星 **Tests**: - 前端开发服务器启动无错误 - 浏览器中能看到 3D 场景 - 鼠标可以旋转和缩放视角 **Status**: Complete **Tasks**: - [x] 创建 React + Vite 项目 - [x] 配置 TypeScript 和 Tailwind - [x] 安装 Three.js 相关依赖 - [x] 实现基础 3D 场景组件 - [x] 添加 OrbitControls --- ## Stage 3: 集成真实数据和轨道线 **Goal**: 前后端集成,使用真实 NASA 数据更新 3D 场景 **Success Criteria**: - 前端成功调用后端 API - 行星和探测器显示在正确的位置(基于真实数据) - 显示探测器的轨道线 **Tests**: - 验证行星位置与 NASA 数据一致 - 轨道线平滑连续 - 时间选择器改变时数据正确更新 **Status**: Complete **Tasks**: - [x] 实现前端 API 调用 - [x] 创建数据 hooks - [x] 根据真实坐标渲染天体 - [ ] 实现轨道线绘制 - [ ] 添加时间选择器组件 --- ## Stage 4: 进阶交互和信息面板 **Goal**: 实现点击聚焦和信息展示功能 **Success Criteria**: - 点击天体后相机平滑飞向目标 - 显示天体详细信息面板 - 计算并显示探测器与最近行星的距离 **Tests**: - 点击不同天体,相机正确聚焦 - 信息面板显示正确数据 - 距离计算准确 **Status**: Not Started **Tasks**: - [ ] 实现 3D 物体点击检测(Raycaster) - [ ] 实现相机平滑动画 - [ ] 创建信息面板组件 - [ ] 实现距离计算逻辑 - [ ] 添加天体列表侧边栏 --- ## Stage 5: 视觉优化和模型加载 **Goal**: 加载真实纹理和 3D 模型,优化视觉效果 **Success Criteria**: - 行星显示真实纹理贴图 - 探测器使用 NASA 3D 模型 - 动态缩放功能正常工作 - 添加星空背景 **Tests**: - 纹理正确加载并渲染 - 3D 模型显示正常 - 远近缩放时物体大小合理 - 整体视觉效果良好 **Status**: Not Started **Tasks**: - [ ] 下载并配置行星纹理 - [ ] 下载并配置探测器 3D 模型 - [ ] 实现 GLTFLoader 加载模型 - [ ] 实现动态缩放逻辑 - [ ] 添加星空背景(Skybox) - [ ] 性能优化 --- ## 进度跟踪 - **当前阶段**: Stage 3 (基本完成) - **已完成**: 2/5 阶段 (Stage 1 & 2 完全完成,Stage 3 大部分完成) - **预计完成时间**: 待定 **下一步**: - 实现轨道线绘制 - 添加时间选择器组件 - 进阶交互功能 (Stage 4) - 视觉优化 (Stage 5) ## 注意事项 1. 每个阶段完成后必须确保代码能编译和运行 2. 遵循增量开发,不要跳跃阶段 3. 遇到问题最多尝试3次,然后调整方案 4. 所有提交必须通过基本测试