libigl学习--项目104_可视化标量场

配置

参考之前的博客项目102。
在这里插入图片描述

代码分析

首先,加载并绘制网格

 igl::readOFF(TUTORIAL_SHARED_PATH "/screwdriver.off", V, F);
 igl::opengl::glfw::Viewer viewer;
  viewer.data().set_mesh(V, F);

然后,设置颜色

第一种方法

viewer.data().set_data(D);

D是一个V * 1的向量,每个顶点对应一个值。
set_data将三角形进行线性插值着色(在fragment shader片段着色器中),并使用这个插值数据在colormap颜色容器(存储为纹理)中查找颜色。colormap默认为igl::COLOR_MAP_TYPE_VIRIDIS,具有21个离散间隔。可以使用set_colormap设置自定义的颜色映射。

Eigen::MatrixXd V;
Eigen::MatrixXi F;
Eigen::VectorXd D;

定义一个一维数组D,

D=V.col(0);

可以让矩阵V的第1列作为插值数,如果设置第二列就是col(1),因为D的行数要和V的行数保持一直(其实就是顶点的个数)

 viewer.launch();

最后启动视图查看。

第二种方法

网格顶点的颜色C是根据它们的笛卡尔坐标设置的。
这里的坐标是规范化之后的。

C = 
    (V.rowwise()            - V.colwise().minCoeff()).array().rowwise()/
    (V.colwise().maxCoeff() - V.colwise().minCoeff()).array();

.minCoeff()返回引用表达式的每列(行)的最小系数的行(或列)向量表达式。

代码中使用以下set_colors功能将颜色与面或顶点相关联 :

viewer.data().set_colors(C);

C是一个#C×3的矩阵,每行有一种RGB颜色。C的行数必须与网格的面数或顶点数相同。根据C的大小,查看器将颜色应用于面或顶点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值