三.编程
1.代码
用的是中国科大傅孝明老师的框架:框架下载及配置运行
(1)在哪儿添加代码
梳理框架的结构后,在MeshViewerWidget.中添加求解曲率的函数,并在MainViewerWidget和surfcemeshprocessing中把这个函数连接起来并做个按钮
(可以追寻某一个按钮的调用过程)
(2)面积
求蓝色区域的面积
没有钝角的情况:
有钝角时,
T
=
0.5
∗
a
∗
b
∗
s
i
n
θ
T=0.5*a*b*sin\theta
T=0.5∗a∗b∗sinθ
(3)高斯曲率
(4)平均曲率
平均曲率:
H
i
=
0.5
∗
∣
∣
K
(
x
i
)
∣
∣
Hi=0.5*||K(xi)||
Hi=0.5∗∣∣K(xi)∣∣
2.可视化
参考:三角网格表面高斯曲率的计算与可视化
从这里了解了需要对高斯曲率归一化,归一化方法:数据归一化及三种方法,我用的是第一种,比较简单(后来看libigl库里的方法,也是用第一种方法对数据归一化)
然后给顶点加上了color属性,用libigl里的方法用高斯曲率给顶点赋颜色值
这里遇到了两个小问题:(1)修改不了顶点颜色
解决方法:后来发现关掉光照就可以了
不清楚是什么原因
(2)三角形网格内部颜色没有插值,每个三角形面片显示都是最后一个顶点的颜色值
解决方法:添加glShadeModel(GL_SMOOTH);
展示一下效果图:
3.libigl求解验证
libigl是一个简单的C ++几何处理库。libigl具有广泛的功能,包括构造稀疏的离散微分几何算子和有限元矩阵,例如切线拉普拉斯和对角质量矩阵,简单的基于面和边的拓扑数据结构,用于OpenGL和GLSL的网格查看实用程序以及许多核心功能矩阵处理函数,使Eigen感觉更像MATLAB。
libigl教程的202是一个求高斯曲率的例子,教程的203应该是求平均曲率的例子,运行这两个例子,比较数据和效果图即可。教程链接:libigl教程
网上关于运行libigl教程例子的博客基本都是用cmake编译,我开始也是照着网上的方式用cmake编译,试了不同的方法,但总是失败
于是,新建了一个项目,把教程例子的代码复制过来,然后根据报错配置这个项目,主要有:
(1)配置Eigen库:下载Eigen库,把Eigen文件夹include进来
参考:Eigen在VS2017下的安装与使用
(2)GLFW和GLAD:参考一步一步教你在VS 2017中配置OpenGL,这里又有用到cmake
对GLFW和GLAD的理解:想要使用opengl,有三种配置环境的方法:opengl的五个文件(最经典),GLFW+GLAD,GLFW+GLEW
环境配置成功后,再解决一些小问题(解决方法基本都可以搜得到),就可以跑通高斯曲率和平均曲率例子的代码了
结果图: