update docs/ARCHITECTURE.md
This commit is contained in:
@@ -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
|
||||||
|
```
|
||||||
|
|
||||||
## 配置接口与步骤说明
|
## 配置接口与步骤说明
|
||||||
|
|
||||||
- 设置协议:
|
- 设置协议:
|
||||||
|
|||||||
Reference in New Issue
Block a user