# DreamLife-Translucent_Relief
一款纯浏览器端的图片转 3D 打印透光浮雕折扇模型工具。用户上传图片后,可在线编辑扇面、调整透光浮雕参数,最终导出 STL 或 3MF 文件用于 3D 打印。全部计算在本地完成,图片不上传任何服务器。
[**中文**](README.md) | [English](README_EN.md)
## 功能概览
- **图片转透光浮雕**:将照片亮度映射为扇叶厚度,打印后背光可呈现原图
- **三套扇形骨架**:大型甲(圆弧扇头)、大型乙(折线圆头,默认)、大型丙(花瓣尖头)
- **扇叶配图模式**:整扇共用一张图,或 11 片扇叶逐片独立配图
- **2D 扇面编辑器**:画笔、橡皮、文字(14 款中文字体、弧形排布)、9 种矢量图形工具
- **实时 3D 预览**:自研 WebGL 渲染管线,按厚度映射颜色,支持拖动旋转和滚轮缩放
- **多格式导出**:STL(二进制)和 3MF(含 ZIP 压缩),5 档网格精度,3 种 3MF 拆分方式
## 项目结构
```
Translucent_Relief/
├── index.html HTML 主文件(三栏布局 + 外部引用)
├── README.md 本文档
├── CSS/
│ ├── variables.css 设计令牌(颜色、圆角、阴影)
│ ├── base.css 全局重置、body、滚动条、输入元素
│ ├── layout.css 顶栏、三栏网格布局、品牌头部(含 Pacifico @font-face)
│ ├── components.css 扇形选择、扇叶面板、拖拽区、文件标签
│ ├── editor.css 2D 画布、画笔光标、浮动工具栏
│ ├── controls.css 滑块、开关、字体选择器、颜色选择器
│ ├── export.css 导出按钮、转轴下载、状态栏
│ ├── stage.css 3D 预览舞台、加载动画
│ └── responsive.css 媒体查询(1200px / 900px / 640px)
├── JavaScript/
│ ├── config.js 状态对象、常量、扇形定义、Base64 STL 骨架数据
│ ├── geometry.js STL 解析、网格焊接、三角化、点在多边形测试
│ ├── image.js 图片加载、亮度采样、示例图生成
│ ├── canvas_editor.js 2D 画布编辑器全部逻辑(画笔/文字/图形/选择/撤销)
│ ├── export.js STL/3MF 导出、ZIP 压缩、CRC32、网格构建
│ ├── webgl.js WebGL 初始化、着色器、渲染循环
│ ├── ui.js 事件绑定、UI 更新、交互控制
│ └── initialize.js 初始化函数及启动调用
└── pacifico/
└── Pacifico.ttf 品牌标题字体
```
### JS 加载顺序
文件之间存在全局作用域依赖,必须按以下顺序加载:
```
config.js → geometry.js → image.js → canvas_editor.js → export.js → webgl.js → ui.js → initialize.js
```
`config.js` 定义全局的 `state`、`ui`、`FAN`、`DETAIL` 等变量,后续文件引用这些变量。`initialize.js` 末尾调用 `initialize()` 启动应用。
## 三栏布局
| 区域 | 宽度 | 内容 |
|------|------|------|
| 左栏 - 工具与编辑 | 300px | 扇形选择、图片上传、2D 扇面编辑器、构图控制 |
| 中栏 - 3D 预览 | 自适应 | WebGL 实时预览画布、视图控制、模型信息 |
| 右栏 - 参数与导出 | 300px | 透光浮雕参数、打印输出设置、STL/3MF 导出 |
顶栏(44px)左侧显示 Pacifico 字体的 DreamLife 品牌名,右侧显示"浏览器本地处理"状态标识。
## 扇形骨架
三种扇形各有独立的轮廓几何和 STL 骨架模板(以 Base64 内嵌在 `config.js` 中):
| 名称 | 标识 | 扇头形状 | 包围尺寸(mm) |
|------|------|----------|---------------|
| 大型甲 | 甲 | 圆弧扇头 | 242 × 410 |
| 大型乙 | 乙 | 折线圆头 | 232 × 387 |
| 大型丙 | 丙 | 花瓣尖头 | 235 × 383 |
默认使用大型乙,11 片扇叶,展开角度 140 度。扇叶间距固定 14 度。
## 编辑器工具
### 基础工具
| 工具 | 说明 |
|------|------|
| 移动 | 拖动图片位置,滚轮缩放(默认激活) |
| 选择 | 选中并移动文字或几何图形对象 |
| 画笔 | 自由手绘,笔粗 2-60px |
| 橡皮 | 擦除手绘笔迹和文字 |
| 文字 | 放置文字,支持弧形排布 |
### 矢量图形
直线、圆形、方形、三角形、多边形(3-10 边)、星形、菱形、箭头、样条曲线(平滑度 0-100%)。
几何图形支持"正图形(等比例)"和"自由比例"两种模式。
### 文字字体
14 款中文艺术字体:黑体、雅宋、楷书、行楷(默认)、隶书、圆体、舒体、琥珀、新魏、彩云、姚体、中宋、仿宋、细黑。字体来自本机系统,缺失时自动回退。
支持实心填充和空心描边两种字形样式,字号 12-360px,弧度 -100% 至 100%。
## 透光浮雕参数
| 参数 | 范围 | 默认值 | 说明 |
|------|------|--------|------|
| 最薄处 | 0.35-1.20mm | 0.60mm | 最薄处透光厚度 |
| 最厚处 | 1.10-3.20mm | 2.20mm | 最厚处暗部厚度 |
| 边缘留量 | 0.00-1.80mm | 0.00mm | 浮雕与骨架边缘的距离 |
| 图像对比 | 60-190% | 135% | 图像对比度调整 |
| 暗部层次 | 0.55-2.20 | 0.95 | Gamma 校正,影响暗部细节 |
| 柔化噪点 | 0-4px | 0.5px | 高斯模糊柔化噪点 |
| 反相 | 开/关 | 关 | 适合底片或线稿 |
## 导出
### 格式
| 格式 | 说明 |
|------|------|
| STL | 二进制格式,80 字节文件头,50 字节/三角形 |
| 3MF | 标准规范,含 ZIP stored 压缩、CRC32 校验、顶点去重 |
### 网格精度
| 精度 | 采样网格 | 说明 |
|------|----------|------|
| 快速预览 | 72 × 14 | 草稿级 |
| 标准打印 | 144 × 28 | 常规打印 |
| 高精度打印 | 240 × 48 | 高质量 |
| 极致精度 | 320 × 64 | 推荐 |
| 参考作品级 | 512 × 96 | 约 219 万面 |
### 3MF 拆分方式
- **整扇单一对象**:焊接为 1 个完整网格,适合直接切片(默认)
- **总成内可拆零件**:1 个总成对象包含 N 个组件引用
- **独立对象**:每个网格作为独立的构建对象
转轴不包含在导出文件中,需单独从 MakerWorld 下载配套零件。
## 设计系统
### 配色
浅色系,以微软 Fluent 设计为参考:
| 用途 | 颜色 |
|------|------|
| 页面背景 | #f3f4f6 |
| 面板背景 | #ffffff |
| 主文字 | #1a1d23 |
| 次文字 | #5a5f6a |
| 强调蓝 | #0078d4 |
| 警告红 | #d13438 |
| 成功绿 | #107c10 |
### 字体
| 用途 | 字体 |
|------|------|
| 正文 | Segoe UI, Microsoft YaHei UI, system-ui |
| 品牌标题 | Pacifico |
| 等宽(数据/标签) | Cascadia Code, Consolas |
| 印章/扇形名 | STKaiti, KaiTi |
## 3D 渲染
使用 WebGL 1.0,无外部 3D 库依赖。自研顶点和片段着色器:
- 两方向光照(主光 72% + 补光 18%)+ 边缘光
- 环境光基线 0.42
- 骨架网格渲染为深青色(#234A4F)
- 浮雕网格按厚度映射颜色:薄处浅绿、厚处深绿
- 透视投影 36 度 FOV,近裁 1 / 远裁 1600
- 深度测试 + 背面剔除
- 支持高 DPI 屏幕(DPR 上限 2)
## 图片隐私
所有图片处理在浏览器本地完成,图片数据不离开设备。页面可完全离线运行(首次加载后无需网络)。
## 技术栈
- HTML5 + CSS3(Grid 布局、CSS 变量、backdrop-filter)
- 原生 JavaScript(无框架、无构建工具、无外部依赖)
- WebGL 1.0(自写着色器)
- Canvas 2D API(扇面编辑器)
- File API / Blob API(文件读取和导出)
- 响应式设计(1200px / 900px / 640px 断点)
## 使用方式
直接在浏览器中打开 `index.html` 即可使用。推荐使用 Chrome 或 Edge 浏览器以获得最佳 WebGL 性能。
操作流程:
1. 选择扇形(甲/乙/丙)
2. 选择图片模式(整扇一张图 / 单片独立图)
3. 上传图片或使用内置示例
4. 调整图片构图(缩放、移动、旋转)
5. 使用编辑器添加画笔、文字或图形(可选)
6. 调整透光浮雕参数(厚度、对比度、层次等)
7. 在 3D 预览中确认效果
8. 选择精度并导出 STL 或 3MF