matlab读入和保存obj文件
Posted 岁月神偷小拳拳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab读入和保存obj文件相关的知识,希望对你有一定的参考价值。
1、使用matlab读取obj文件:
function [vertex,faces,normal] = read_obj(filename)
fid = fopen(filename);
if fid<0
error(['Cannot open ' filename '.']);
end
frewind(fid);
a = fscanf(fid,'%c',1);
if strcmp(a, 'P')
fscanf(fid,'%f',5);
n_points=fscanf(fid,'%i',1);
vertex=fscanf(fid,'%f',[3,n_points]);
normal=fscanf(fid,'%f',[3,n_points]);
n_faces=fscanf(fid,'%i',1);
fscanf(fid,'%i',5+n_faces);
faces=fscanf(fid,'%i',[3,n_faces])'+1;
fclose(fid);
return;
end
frewind(fid);
vertex = [];
faces = [];
while 1
s = fgetl(fid);
if ~ischar(s),
break;
end
if ~isempty(s) && strcmp(s(1), 'f')
% face
faces(:,end+1) = sscanf(s(3:end), '%d %d %d');
end
if ~isempty(s) && strcmp(s(1), 'v')
% vertex
vertex(:,end+1) = sscanf(s(3:end), '%f %f %f');
end
end
fclose(fid);
2、使用matlab保存obj文件:
function obj_write(filename,vertices,faces )
fid=fopen(filename,'w');
[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
以上是关于matlab读入和保存obj文件的主要内容,如果未能解决你的问题,请参考以下文章