一个粗制滥造的肝脏变形仿真……
基于质点弹簧模型
加入了一个简陋的质点捕获与拖拽逻辑:
- 遍历质点放入稀疏平面网格中(z / w 值较小的会被覆盖,OpenGL 为右手坐标系)
- 点击鼠标时捕获鼠标所在网格中的质点
- 拖拽时强行改变该质点的坐标
难度与代码量都不大,核心逻辑在 Spring 类与 MouseControl 类中
记得开 o2 优化跑…… 否则很卡,当然这都是我的锅,stl 用的很随意,代码还有很大的优化空间
可优化的点:
- 网格 vector 可以改 array
- translate 矩阵可以降低更新频率
- fill 可以改 memset
- 弹簧常数项可以进一步优化
- 可以收集顶点原始位置放入 unordered_map,减少更新的运算量
- 更多愚蠢的我没有注意到的地方……
(吐槽一下带状疱疹实在是太疼了,几乎难以集中精力思考,这些代码身体好点后我会做优化的,一定?大概吧)