update docs/ARCHITECTURE.md

This commit is contained in:
2026-01-21 09:48:36 +08:00
parent 523d8379b1
commit db0580ead1

View File

@@ -272,6 +272,79 @@ flowchart LR
GL -->|uMinV/uMaxV/uColorLow/Mid/High| SH[dots.frag] GL -->|uMinV/uMaxV/uColorLow/Mid/High| SH[dots.frag]
``` ```
## 点阵凹陷渲染Heightmap / Dented Surface
### 目标
-`rows x cols` 点阵扩展到“长/宽各 100 倍”的显示分辨率(例如 12x7 -> 1200x700
- 数值越大,顶面越向内凹陷,且边缘与侧面跟随变形,保持整体感。
- 可在 OpenGL 视图内切换“普通点阵”和“凹陷热力图”两种渲染模式。
### 数据处理
1) 传感器帧数据进入 `GLWidget::submitValues()`
2) `GLWidget::updateHeatmapData_()``values` 组装为 `CV_32F` 矩阵rows x cols
3) 通过 `GlobalHelper::transToMultiMatrix(...)`
- 低阈值清零 -> 归一化 -> 轻度模糊 -> resize 到 `cols*100 x rows*100` -> 再模糊。
- 仅输出“数据矩阵”,不再用于生成图像。
4) 将结果写入 `m_heightValues`,上传 `GL_R32F` 纹理。
### 凹陷算法
- 顶面位移vertex shader
- `t = clamp((v - min) / (max - min), 0..1)`
- `h = t * dentMax`
- `z = baseZ + h`(向内凹陷)
- 法线估算fragment shader
- 对 heightmap 相邻 texel 采样,计算梯度,再归一化为法线。
- 侧边联动:
- `initSkirtGeometry_()` 建立边界环。
- `updateSkirtVertices_()` 采样边界高度,更新侧边顶点,使边缘与顶面同步下沉。
### 模式切换
- `GLWidget` 内部维护 `m_useHeatmap`
- 使用 `QPainter` 在 OpenGL 视图左上角绘制按钮Dots / Heatmap
- 点击按钮切换渲染路径:
- `Dots`:原点阵实例化圆点渲染。
- `Heatmap`:底面 + 侧边 + 顶面凹陷渲染。
### UML (Mermaid)
```mermaid
classDiagram
class GLWidget {
+submitValues(values)
+setRange(min,max)
+setColorLow/Mid/High()
-updateHeatmapData_()
-uploadHeightTexture_()
-renderHeatmap_()
-renderSkirt_()
-renderBase_()
}
class GlobalHelper {
+transToMultiMatrix(raw,min,range,display,out)
}
class HeightTexture {
+GL_R32F
+width/height
}
class HeatmapMesh {
+VAO/VBO/IBO
+u,v grid
}
class SkirtMesh {
+border uv
+dynamic VBO
}
class Shaders {
+heatmap.vert/frag
+base.vert/frag
}
GLWidget --> GlobalHelper
GLWidget --> HeightTexture
GLWidget --> HeatmapMesh
GLWidget --> SkirtMesh
GLWidget --> Shaders
```
## 配置接口与步骤说明 ## 配置接口与步骤说明
- 设置协议: - 设置协议: