# 汽车360°全景展示应用

一个移动端 Web 应用，用于汽车的 360 度全景交互展示。

## 功能特性

- **触摸滑动旋转** - 左右滑动查看汽车 360 度全景
- **惯性滑动效果** - 滑动结束后保持惯性继续旋转
- **自动旋转展示** - 空闲时自动缓慢旋转展示
- **全屏沉浸体验** - 全屏显示，沉浸式查看
- **精美加载动画** - 汽车图标描边动画 + 进度条
- **移动端优化** - 专为移动端触摸交互设计

## 文件结构

```
3D-pano/
├── index.html          # 主页面
├── app.js              # 应用逻辑
├── styles.css          # 样式文件
├── server.js           # 本地 HTTP 服务器
├── extract_frames.py   # Python 视频帧提取脚本
├── extract.html        # 浏览器端帧提取工具
├── video.mp4           # 源视频文件
├── images/             # 序列帧图片目录
│   ├── car_001.jpg
│   ├── car_002.jpg
│   └── ...
└── package.json        # 项目配置
```

## 快速开始

### 1. 提取序列帧

**方法一：Python 脚本（推荐）**

```bash
python extract_frames.py
```

需要安装 OpenCV：
```bash
pip install opencv-python
```

**方法二：浏览器工具**

1. 启动本地服务器（见步骤2）
2. 访问 `http://localhost:9000/extract.html`
3. 点击「开始提取」
4. 点击「应用到展示页」

### 2. 启动本地服务器

```bash
node server.js
```

服务器将在 `http://localhost:9000` 启动。

### 3. 访问应用

在浏览器中打开 `http://localhost:9000/index.html`

## 配置说明

在 `app.js` 中可调整以下参数：

```javascript
this.config = {
    totalFrames: 336,          // 总帧数
    autoRotateSpeed: 80,       // 自动旋转速度（ms/帧）
    autoRotateDelay: 3000,     // 停止操作后自动旋转延迟（ms）
    inertiaFriction: 0.95,     // 惯性摩擦系数
    imagePath: './images/',    // 图片路径
    imagePrefix: 'car_',       // 图片前缀
    imageExt: '.jpg'           // 图片扩展名
};
```

## 图片命名规范

序列帧图片命名格式：`car_XXX.jpg`

- 前缀：`car_`
- 编号：三位数字，从 001 开始
- 扩展名：`.jpg`

示例：`car_001.jpg`, `car_002.jpg`, ..., `car_336.jpg`

## 技术栈

- **前端**：原生 HTML5 + CSS3 + JavaScript
- **Canvas**：2D 渲染引擎
- **触摸交互**：Touch Events API
- **视频处理**：Python OpenCV

## 浏览器兼容性

- Chrome for Android ✅
- Safari iOS ✅
- Firefox Mobile ✅
- 微信内置浏览器 ✅

## 性能优化建议

1. 图片压缩：建议每张图片 50-100KB
2. 帧数选择：36-72 帧适合网络传输，180-360 帧适合本地展示
3. 使用 WebP 格式可进一步减小体积

## 开发者

如需修改或扩展功能，请参考源码注释。

---

**注意**：本应用需要通过 HTTP 服务器访问，直接打开 HTML 文件可能因浏览器安全限制导致图片加载失败。
