MATLAB将数据写入obj文件
2017-03-18 21:43
1336 查看
我这里只考虑拥有点和面信息的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);可以绘制兔子模型
耶,成功
简单的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向文件写入数据的方法
- 使用C++将OpenCV中Mat的数据写入二进制文件,用Matlab读出
- matlab各种数据类型的文件的读取与写入方法
- MATLAB文件I/O操作——新建TXT并写入数据
- matlab环境中 将cell数据 写入到text文件
- MATLAB: 如何读取txt中的文件 如何将数据批量写入数据 文件名递增
- [初学笔记] matlab中怎么把数据循环写入txt文件
- 使用C++将OpenCV中Mat的数据写入二进制文件,用Matlab读出
- matlab数据自动循环写入excel文件
- 使用C++将OpenCV中Mat的数据写入二进制文件,用Matlab读出
- 在Matlab中读取、写入二进制数据文件
- matlab向表单文件(xls文件)写入数据
- matlab写入和读取文件数据
- 在Java中如何读取用MATLAB的fwrite()函数写入文件的数据
- 使用C++将OpenCV中Mat的数据写入二进制文件,用Matlab读出
- Matlab 往文件中以需加的方式写入数据
- 在Matlab中读取、写入二进制数据文件
- 用MATLAB将矩阵数据写入txt文件中,打开乱码原因
- Matlab中如何读取TXT数据文件[转载]