数字几何处理作业1:编程实现三角网格上高斯曲率和平均曲率的计算编程部分

三.编程
1.代码

用的是中国科大傅孝明老师的框架:框架下载及配置运行

(1)在哪儿添加代码

梳理框架的结构后,在MeshViewerWidget.中添加求解曲率的函数,并在MainViewerWidget和surfcemeshprocessing中把这个函数连接起来并做个按钮
(可以追寻某一个按钮的调用过程)

(2)面积

在这里插入图片描述
求蓝色区域的面积
在这里插入图片描述没有钝角的情况:
在这里插入图片描述在这里插入图片描述有钝角时, T = 0.5 ∗ a ∗ b ∗ s i n θ T=0.5*a*b*sin\theta T=0.5absinθ
在这里插入图片描述在这里插入图片描述

(3)高斯曲率

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

(4)平均曲率

在这里插入图片描述平均曲率: H i = 0.5 ∗ ∣ ∣ K ( x i ) ∣ ∣ Hi=0.5*||K(xi)|| Hi=0.5K(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
环境配置成功后,再解决一些小问题(解决方法基本都可以搜得到),就可以跑通高斯曲率和平均曲率例子的代码了
结果图:
在这里插入图片描述
在这里插入图片描述

  • 16
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值