如何将三维模型文件转化为网格形式,并提取三维网格图中顶点数据,边数据,面数据。

 

#细分曲面#初始网格#多边形网格

常见的三维模型文件格式有glb,obj,stl,fbx,3ds,dae,ply,AMRT等。

以ply格式和obj格式为例。如:想从三维模型得到其三角形初始网格。并提取其顶点数据,面数据,边数据。

1.首先在makerworld中等三维模型下载库中搜索"低多边形"。然后下载想要的三维模型。一般都是三角形网格。

2.在meshlab软件(其他3d建模软件均可)中打开下载的模型,并在wireframe,face显示下检验是否为三角形网格或四边形网格。

3.输出为ply格式。

4.MATLAB文件(见主页)提取该模型顶点数据,边数据,面数据代码文件运行即可。

%提取数据返回到SurfaceMesh
mesh=readSurfaceMesh("喷火龙.ply")
vm3=mesh.Vertices;%提取顶点数据和面数据
fm3=mesh.Faces;
% 求边矩阵
% 获取面矩阵的行数(面的数量)
numFaces = size(fm3, 1);

% 初始化边矩阵,假设每个面都是三角形(3条边),所以预分配 numFaces * 3 行
edgeMatrix = zeros(numFaces * 3, 2);

% 遍历每个面
for i = 1:numFaces
    % 获取当前面的顶点索引
    faceVertices =fm3(i, :);
    
    % 生成面的边,例如面  生成边 , , 
    edges = [faceVertices(1) faceVertices(2);...
             faceVertices(2) faceVertices(3);...
             faceVertices(3) faceVertices(1)];
    
    % 将边添加到边矩阵中
    edgeMatrix((i-1)*3+1:i*3, :) = edges;
end 
% 去除重复的边
[edge3] = unique(sort(edgeMatrix, 2), 'rows');
% 现在 edge3就是所求的边矩阵

 四边形初始网格:

1.首先在blender等三维模型下载库中搜索下载想要的三维模型。

2.在blender软件中打开三维模型,并用其中QuadRemesher插件将三维模型转换为四边形网格形式。

3.在meshlab软件(其他3d建模软件均可)中打开下载的模型,并在wireframe,face显示下检验是否为四边形网格。

4.输出为obj格式。

5.MATLAB文件(见主页)提取该模型顶点数据,边数据,面数据代码文件运行即可。

%直接实现--引用obj__read函数
[vertices, faces]= obj__read( '星.obj' );
%trimesh(faces', vertices(1,:), vertices(2,:), vertices(3,:),'LineWidth',1,'EdgeColor','k');
%obj_write('myobj.obj',vertices,faces);
vm3=vertices';
fm3=faces'   %不知道为啥引用函数生成的矩阵是倒过来的

% 求边矩阵
% 获取面矩阵的行数(面的数量)
numFaces = size(fm3, 1);

% 初始化边矩阵,假设每个面都是3角形(3条边),所以预分配 numFaces * 3 行
edgeMatrix = zeros(numFaces * 4, 2);%四边形初始网格

% 遍历每个面
for i = 1:numFaces
    % 获取当前面的顶点索引
    faceVertices =fm3(i, :);
    
    % 生成面的边,例如面  生成边 , , 
    edges = [faceVertices(1) faceVertices(2);...
             faceVertices(2) faceVertices(3);...
             faceVertices(3) faceVertices(4);...
             faceVertices(4) faceVertices(1)];
    
    % 将边添加到边矩阵中
    edgeMatrix((i-1)*4+1:i*4, :) = edges;%四边形*4,三角形*3
end 
% 去除重复的边
[edge3] = unique(sort(edgeMatrix, 2), 'rows');
% 现在 edge3就是所求的边矩阵

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值