2026-08-18 16:06:28 +08:00
|
|
|
|
# DreamLife-Translucent_Relief
|
2026-08-18 07:45:10 +00:00
|
|
|
|
|
2026-08-18 16:06:28 +08:00
|
|
|
|
一款纯浏览器端的图片转 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 + 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
|