C++写纹理贴图中OBJ文件和MTL(材质)文件

本文介绍如何使用C++编写OBJ和MTL文件,以供VTK或OpenGL进行纹理贴图。内容包括OBJ文件的顶点坐标、法向量、纹理坐标和材质引用,以及MTL文件的材质定义,如高光色权重、环境光、漫反射光等参数,并强调了贴图照片名称与MTL文件中map_Kd参数的匹配关系。
摘要由CSDN通过智能技术生成

在VTK 或者Opengl纹理贴图中都会用到模型文件,当使用vtkOBJImporter函数读取模型数据时,需要对应的MTL文件才能实现纹理贴图,但是网上大多数的OBJ文件和MTL文件都是由模型软件导出来的,也很少有写MTL文件的,本文记录如何用c++写能够直接被vtkOBJImporter函数读取的模型文件和材质文件。

OBJ文件的组成

  1. v:顶点坐标

  1. vn:顶点法向量

  1. Vt:纹理坐标

  1. usemtl mtl:使用的材质,与mtl文件相呼应;

  1. f:表示由顶点,法向量和纹理坐标所确定的面,如5/2/1表示 v开头的第5个顶点,这个点对应vn开头的第2个法向量,对应vt 贴图的第1个坐标;
    将之前读取的3D点云,法向量,纹理和网格数据导入到向量中,由于写入OBJ文件的数据一定要ASCII或者二进制格式的,因此再定义3D向量点用于存储读取的数据,,按OBJ文件的组成顺序将向量一一写入,完成OBJ文件。

string num = "1";
vector<Point3d> v1(a);
vector<Point3d> vt(a);
vector<Point3d> vn(b);
vector<Point3d> f(b);
vector<Point3d> vec(b);
float s1=0, s2=0, s3=0;
for (int i = 0; i < a; i++)
{
    v1[i].x = orig[i].x;
    v1[i].y = orig[i].y;
    v1[i].z = orig[i].z;
}

for (int i = 0; i < a; i++)
{
    vt[i].x = uv[i].s;
    vt[i].y = uv[i].t;


}

float max=0,min=0;

for (int i = 0; i < b; i++)
{
    vn[i]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值