210 lines
8.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# DreamLife-Translucent_Relief
一款纯浏览器端的图片转 3D 打印透光浮雕折扇模型工具。用户上传图片后,可在线编辑扇面、调整透光浮雕参数,最终导出 STL 或 3MF 文件用于 3D 打印。全部计算在本地完成,图片不上传任何服务器。
<div align="center">
<br>
[**中文**](README.md) [English](README_EN.md)
<br>
</div>
## 功能概览
- **图片转透光浮雕**:将照片亮度映射为扇叶厚度,打印后背光可呈现原图
- **三套扇形骨架**:大型甲(圆弧扇头)、大型乙(折线圆头,默认)、大型丙(花瓣尖头)
- **扇叶配图模式**:整扇共用一张图,或 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 + CSS3Grid 布局、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