152 lines
3.8 KiB
Markdown
152 lines
3.8 KiB
Markdown
|
|
# Cosmo 项目当前状态
|
|||
|
|
|
|||
|
|
## ✅ 已完成
|
|||
|
|
|
|||
|
|
### 后端 (100%)
|
|||
|
|
- ✅ FastAPI 服务器搭建
|
|||
|
|
- ✅ 从 NASA JPL Horizons 获取数据
|
|||
|
|
- ✅ 实现 API 端点
|
|||
|
|
- `/api/celestial/positions` - 获取天体位置
|
|||
|
|
- `/api/celestial/info/{id}` - 获取天体信息
|
|||
|
|
- `/api/celestial/list` - 列出所有天体
|
|||
|
|
- ✅ 数据缓存机制(3天TTL)
|
|||
|
|
- ✅ CORS 配置
|
|||
|
|
- ✅ 支持时间范围查询
|
|||
|
|
|
|||
|
|
**当前运行**: http://localhost:8000
|
|||
|
|
|
|||
|
|
### 前端 (75%)
|
|||
|
|
- ✅ React + TypeScript + Vite 项目
|
|||
|
|
- ✅ Three.js 3D 场景
|
|||
|
|
- ✅ 实时数据获取和显示
|
|||
|
|
- ✅ 基本天体渲染(球体)
|
|||
|
|
- ✅ OrbitControls 相机控制
|
|||
|
|
- ✅ 星空背景
|
|||
|
|
- ✅ Loading 状态
|
|||
|
|
- ✅ 错误处理
|
|||
|
|
- ✅ Tailwind CSS 样式
|
|||
|
|
|
|||
|
|
**当前运行**: http://localhost:5173
|
|||
|
|
|
|||
|
|
## 🚧 下一步 (Stage 3 剩余部分)
|
|||
|
|
|
|||
|
|
### 轨道线绘制
|
|||
|
|
**目标**: 显示探测器的历史轨迹和未来路径
|
|||
|
|
|
|||
|
|
**实现方法**:
|
|||
|
|
1. 修改 API 调用,获取时间序列数据(如过去1年到未来1年)
|
|||
|
|
2. 创建 `OrbitLine.tsx` 组件
|
|||
|
|
3. 使用 Three.js 的 `Line` 或 `TubeGeometry` 绘制轨道
|
|||
|
|
4. 添加到 Scene 组件
|
|||
|
|
|
|||
|
|
**代码位置**: `frontend/src/components/OrbitLine.tsx`
|
|||
|
|
|
|||
|
|
### 时间选择器
|
|||
|
|
**目标**: 允许用户选择起止时间查看不同时期的位置
|
|||
|
|
|
|||
|
|
**实现方法**:
|
|||
|
|
1. 创建 `TimeSelector.tsx` 组件
|
|||
|
|
2. 使用日期选择器(或简单的 input[type="date"])
|
|||
|
|
3. 将选择的时间传递给 useSpaceData hook
|
|||
|
|
4. 重新获取数据并更新场景
|
|||
|
|
|
|||
|
|
**代码位置**: `frontend/src/components/TimeSelector.tsx`
|
|||
|
|
|
|||
|
|
## 🎯 Stage 4: 进阶交互
|
|||
|
|
|
|||
|
|
### 点击聚焦
|
|||
|
|
- 使用 Three.js Raycaster 检测点击
|
|||
|
|
- 相机平滑动画移动到目标
|
|||
|
|
- 使用 @react-three/drei 的 `CameraControls` 或手动实现
|
|||
|
|
|
|||
|
|
### 信息面板
|
|||
|
|
- 显示选中天体的详细信息
|
|||
|
|
- 距离、速度、最近的行星等
|
|||
|
|
- 使用 React Portal 或绝对定位的 div
|
|||
|
|
|
|||
|
|
### 天体列表侧边栏
|
|||
|
|
- 显示所有天体的列表
|
|||
|
|
- 点击可聚焦
|
|||
|
|
- 可筛选(行星/探测器)
|
|||
|
|
|
|||
|
|
## 🎨 Stage 5: 视觉优化
|
|||
|
|
|
|||
|
|
### 需要下载的资源
|
|||
|
|
|
|||
|
|
**行星纹理** (https://www.solarsystemscope.com/textures/):
|
|||
|
|
```
|
|||
|
|
frontend/public/textures/
|
|||
|
|
├── sun_diffuse.jpg
|
|||
|
|
├── earth_diffuse.jpg
|
|||
|
|
├── earth_normal.jpg
|
|||
|
|
├── earth_specular.jpg
|
|||
|
|
├── mars_diffuse.jpg
|
|||
|
|
├── jupiter_diffuse.jpg
|
|||
|
|
├── saturn_diffuse.jpg
|
|||
|
|
└── ...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**探测器 3D 模型** (https://nasa3d.arc.nasa.gov/models):
|
|||
|
|
```
|
|||
|
|
frontend/public/models/
|
|||
|
|
├── voyager.glb
|
|||
|
|
├── new_horizons.glb
|
|||
|
|
├── parker_solar_probe.glb
|
|||
|
|
└── ...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 动态缩放
|
|||
|
|
- 根据相机距离调整物体大小
|
|||
|
|
- 确保远距离时仍能看到物体
|
|||
|
|
- 公式: `scale = Math.max(1, distance * MIN_VISIBLE_SCALE)`
|
|||
|
|
|
|||
|
|
## 📊 进度统计
|
|||
|
|
|
|||
|
|
| 阶段 | 进度 | 状态 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| Stage 1: 后端基础 | 100% | ✅ 完成 |
|
|||
|
|
| Stage 2: 前端基础 | 100% | ✅ 完成 |
|
|||
|
|
| Stage 3: 数据集成 | 70% | 🚧 进行中 |
|
|||
|
|
| Stage 4: 交互功能 | 0% | ⏳ 待开始 |
|
|||
|
|
| Stage 5: 视觉优化 | 0% | ⏳ 待开始 |
|
|||
|
|
|
|||
|
|
**总体进度**: ~54% (2.7/5 阶段)
|
|||
|
|
|
|||
|
|
## 🔧 技术债务 & 改进
|
|||
|
|
|
|||
|
|
1. **类型安全**: 某些地方可以加强 TypeScript 类型定义
|
|||
|
|
2. **错误处理**: 前端可以添加更详细的错误信息
|
|||
|
|
3. **性能优化**: 大量天体时可考虑使用 InstancedMesh
|
|||
|
|
4. **测试**: 尚未添加单元测试和集成测试
|
|||
|
|
5. **文档**: API 文档可以更详细
|
|||
|
|
|
|||
|
|
## 📝 当前可用命令
|
|||
|
|
|
|||
|
|
### 后端
|
|||
|
|
```bash
|
|||
|
|
cd backend
|
|||
|
|
source venv/bin/activate
|
|||
|
|
python -m app.main
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 前端
|
|||
|
|
```bash
|
|||
|
|
cd frontend
|
|||
|
|
yarn dev
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🎉 成果展示
|
|||
|
|
|
|||
|
|
目前可以:
|
|||
|
|
1. 访问 http://localhost:5173
|
|||
|
|
2. 看到太阳系的 3D 可视化
|
|||
|
|
3. 使用鼠标控制视角
|
|||
|
|
4. 看到基于 NASA 真实数据的天体位置
|
|||
|
|
5. 看到漂亮的星空背景
|
|||
|
|
|
|||
|
|
数据实时从 NASA JPL Horizons 获取,包括:
|
|||
|
|
- 7 个探测器(Voyager 1 & 2, New Horizons, Parker Solar Probe, Juno, Cassini, Perseverance)
|
|||
|
|
- 9 个天体(太阳 + 八大行星)
|
|||
|
|
|
|||
|
|
总共 16 个天体的精确位置!
|