MATLAB将数据写入obj文件

Posted 拉风小宇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB将数据写入obj文件相关的知识,希望对你有一定的参考价值。

我这里只考虑拥有点和面信息的obj文件,在我关于obj文件格式详解的文章中提到了obj文件的组成形式,我只用到了最简单的一部分

简单的OBJ格式写法。

# Simple Wavefront file  
v 0.0 0.0 0.0  
v 0.0 1.0 0.0  
v 1.0 0.0 0.0  
f 1 2 3  
其中v表示三点坐标,f表示面索引点的值
程序借鉴了浙大学姐的“ matlab 将矩阵写入文件”这篇博文,命名为“obj_write.m”

function obj_write(filename,vertices,faces )
%TEST Summary of this function goes here  
%  write matrix to file  

vertices=vertices';
faces=faces';
fid=fopen(filename,'a');  
  
[x,y]=size(vertices);  
  
 for i=1:x
    fprintf(fid,'v ');
    for j=1:y-1  
        fprintf(fid,'%f ',vertices(i,j));  
    end  
    fprintf(fid,'%f\\r\\n',vertices(i,y));%每一行回车\\n  
    %fprintf(fid,'\\n');%每一行回车\\n  
 end 

fprintf(fid,'\\n');%每一行回车\\n  

[x,y]=size(faces);  
  
 for i=1:x
    fprintf(fid,'f ');
    for j=1:y-1  
        fprintf(fid,'%d ',faces(i,j));  
    end  
    fprintf(fid,'%d\\r\\n',faces(i,y));%每一行回车\\n  
    %fprintf(fid,'\\n');%每一行回车\\n  
end 
  
fclose(fid);  
  
  
end
其中faces是3*n的整数数组

vertices是3*m的浮点数组

这里值得注意的有两点,

第一,一定要输入空格“ ”而不是制表符“\\t”

第二,换行要输入“\\r\\n”而不是“\\n”,不然无法换行

下面举个例子

% Example: Box  
vertices = [10 10 10; -10 10 10; 10 -10 10; -10 -10 10; 10 10 -10; -10 10 -10; 10 -10 -10; -10 -10 -10]';  
faces = [1 2 3; 4 3 2; 1 3 5; 7 5 3; 1 5 2; 6 2 5; 8 6 7; 5 7 6; 8 7 4; 3 4 7; 8 4 6; 2 6 4]';  
再执行

obj_write('myobj.obj',vertices,faces);
生成my.obj文件,显示为


如果要绘制更加复杂一点的图形,比如斯坦福兔子,数据在 我的下载
执行代码变为

[ vertices, faces ]=origin();
其中origin.m为

function [ vertices, faces ] = origin()
%ORIGIN 此处显示有关此函数的摘要
%   此处显示详细说明
faces =load('C:\\Users\\Admin\\Documents\\MATLAB\\face.txt');
faces=faces+1;
faces=faces';
vertices =load('C:\\Users\\Admin\\Documents\\MATLAB\\ver.txt');
vertices=vertices';

end
再执行

obj_write('myobj.obj',vertices,faces);
可以绘制兔子模型


耶,成功

以上是关于MATLAB将数据写入obj文件的主要内容,如果未能解决你的问题,请参考以下文章

Matlab:使用动态字段名编写 dicom 元数据

matlab中怎样将数据导入导出?

如何将MATLAB运行结果写入txt文件

通过MATLAB将矩阵数据写入HDF5文件中的每个数据类型成员

在 Matlab 中读取和写入二进制文件

怎样将matlab中所有数据导出