MATLAB将数据写⼊obj⽂件
fprintf格式我这⾥只考虑拥有点和⾯信息的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表⽰⾯索引点的值
程序借鉴了浙⼤学的“ ”这篇博⽂,命名为“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\');
faces=faces+1;
faces=faces';
vertices =load('C:\Users\Admin\Documents\');
vertices=vertices';
end
再执⾏
obj_write('myobj.obj',vertices,faces);
可以绘制兔⼦模型
耶,成功
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论