OFF三维显示通过MATLAB读取off文件生成三视图 提取轮廓线

Posted fpga&matlab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OFF三维显示通过MATLAB读取off文件生成三视图 提取轮廓线相关的知识,希望对你有一定的参考价值。

1.软件版本

MATLAB2021a

2.本算法理论知识

里共提供了100个OFF文件,用来验证不同三维物体的效果.

整个系统分为两个部分:off文件的获取以及不同视角的物体显示和轮廓显示。

其中OFF文件的读取如下所示:

%读取模型中的第一条线条

header = fgetl(fid);

if ~strcmp(upper(header),'OFF'),

    disp('Warning, wrong format, however, we will go on')

end;

%读取维度数值

dimension = str2num(fgetl(fid));

%读取顶点

vertices = -ones(dimension(1),3);

for I=1:dimension(1),

    vertices(I,:) = str2num(fgetl(fid));

end;

%读取面

faces = -ones(dimension(2),3);

for J=1:dimension(2),

    face = str2num(fgetl(fid));

    if length(face(2:end)) > size(faces,2),

        faces = [faces -ones(size(faces,1),length(face)-1-size(faces,2))];

    end

    faces(J,:) = face(2:end)+1;

end;

faces(faces==-1)=NaN;

%读取完毕,关闭文件

fclose(fid);

%将数据保存到cell格式中保存

OFF_3D.dimension = dimension;

OFF_3D.vertices  = vertices;

OFF_3D.faces     = faces;

这里。读取OFF文件的思路就是根据OFF文件的基本格式进行的,OFF文件时三维格式的文件,其中主要包括了点,线,面,因此,在这里,我们分别对几个参数进行读取。

    其中图像的显示代码如下所示:

patch('vertices', OFF_3D.vertices, 'faces',OFF_3D.faces, 'facecolor',[0.5 0.5 0.5]);

view([0 0 1]);

主要使用了MATLAB中的patch函数,这个函数可以将MATLAB中的点线面进行三维显示,然后通过VIEW函数实现不同视角的显示。
————————————————

3.核心代码

clc;
clear;
close all;

%步骤一:调用路径
%步骤一:调用路径
%步骤一:调用路径
offname = 'OFF_data\\m90\\m90.off';


%步骤二:读取OFF文件
%步骤二:读取OFF文件
%步骤二:读取OFF文件
 
fid = fopen(offname);

%读取模型中的第一条线条
header = fgetl(fid);
if ~strcmp(upper(header),'OFF'),
    disp('Warning, wrong format, however, we will go on')
end;

%读取维度数值
dimension = str2num(fgetl(fid));

%读取顶点
vertices = -ones(dimension(1),3);
for I=1:dimension(1),
    vertices(I,:) = str2num(fgetl(fid));
end;

%读取面
faces = -ones(dimension(2),3);

for J=1:dimension(2),
    face = str2num(fgetl(fid));
    if length(face(2:end)) > size(faces,2),
        faces = [faces -ones(size(faces,1),length(face)-1-size(faces,2))];
    end
    faces(J,:) = face(2:end)+1;
end;

faces(faces==-1)=NaN;

%读取完毕,关闭文件
fclose(fid);

%将数据保存到cell格式中保存
OFF_3D.dimension = dimension;
OFF_3D.vertices  = vertices;
OFF_3D.faces     = faces;
    
 
%下面进行显示
%一、生成三维模型主视图;
figure;
subplot(221);
patch('vertices', OFF_3D.vertices, 'faces',OFF_3D.faces, 'facecolor',[0.5 0.5 0.5]);
view([0 0 1]); 
axis square;

% %二、生成三维模型俯视图;
subplot(222);
patch('vertices', OFF_3D.vertices, 'faces',OFF_3D.faces, 'facecolor',[0.5 0.5 0.5]);
view([0 1 0]); 
axis square;


%三、生成三维模型左视图改;
subplot(223);
patch('vertices', OFF_3D.vertices, 'faces',OFF_3D.faces, 'facecolor',[0.5 0.5 0.5]);
view([1 0 0]); 
axis square;


%四、显示三维模型;
subplot(224);
patch('vertices', OFF_3D.vertices, 'faces',OFF_3D.faces, 'facecolor',[0.5 0.5 0.5]);
view([1 1 1]); 
axis square;


% %五、提取主视图轮廓线。
figure;
patch('vertices', OFF_3D.vertices, 'faces',OFF_3D.faces, 'facecolor',[1 1 1]);
view([0 0 1]); 
axis square;

 

4.操作步骤与仿真结论

 

 

5.参考文献

[1]沙晨明, 申作林, 申可心. 三角网格文件OFF的格式分析及OFF到STL的转化[J]. 计算机系统应用, 2016(4):5.

A19-05

6.完整源码获得方式

方式1:微信或者QQ联系博主

方式2:订阅MATLAB/FPGA教程,免费获得教程案例以及任意2份完整源码

以上是关于OFF三维显示通过MATLAB读取off文件生成三视图 提取轮廓线的主要内容,如果未能解决你的问题,请参考以下文章

为应用程序设计器中的所有按钮启用'on'/'off'-Matlab

教你使用MATLAB制作一款 图形验证码 生成器(app designer)

数字图象处理之读取显示——Matlab读取三维mat数据并灰度显示

“在 setroubleshoot 服务中读取信息时出错:没有那个文件或目录” 的解决办法

如何在matlab中读取一组三维dicom图片

静态资源WEB服务