#细分曲面#初始网格#多边形网格
常见的三维模型文件格式有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就是所求的边矩阵