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);
可以绘制兔子模型


耶,成功

  • 9
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 25
    评论
MATLAB中保存为.obj格式的方法如下: 1. 首先,确保你已经导入了obj文件,该文件可以通过使用`importdata`函数或者`readObj`函数来加载。如果没有导入,你可以使用以下命令加载obj文件: ``` objData = importdata('filename.obj'); ``` 2. 接下来,你需要准备保存的文件名和路径。你可以使用`uiputfile`函数来让用户选择文件名和路径,或者使用以下命令手动指定文件名和路径: ``` fileName = 'savedObj.obj'; ``` 3. 创建一个文件并将要保存的内容写入其中。你可以使用`fopen`函数创建并打开一个文件,然后使用`fprintf`函数将数据写入文件。以下是保存.obj文件的示例代码: ```matlab fid = fopen(fileName, 'w'); for i = 1:size(objData.vertices, 1) fprintf(fid, 'v %f %f %f\n', objData.vertices(i, 1), objData.vertices(i, 2), objData.vertices(i, 3)); end for i = 1:size(objData.textureCoords, 1) fprintf(fid, 'vt %f %f\n', objData.textureCoords(i, 1), objData.textureCoords(i, 2)); end for i = 1:size(objData.normals, 1) fprintf(fid, 'vn %f %f %f\n', objData.normals(i, 1), objData.normals(i, 2), objData.normals(i, 3)); end for i = 1:size(objData.faces, 1) face = objData.faces(i, :); fprintf(fid, 'f %d/%d/%d %d/%d/%d %d/%d/%d\n', face(1), face(4), face(7), face(2), face(5), face(8), face(3), face(6), face(9)); end fclose(fid); ``` 4. 最后,关闭文件。 ```matlab fclose(fid); ``` 注意事项: - 以上代码中的`objData`是你加载的obj文件的变量名,你需要根据导入的文件来修改代码。 - 如果你的obj文件还包含其他类型的数据,比如顶点颜色等,你需要相应地调整保存代码。 - 在保存.obj文件时,你可以使用不同的格式来表示顶点、纹理坐标、法向量和面,这些格式可以根据你的需要进行调整。 希望上述解答对您有所帮助!如有任何疑问,请随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拉风小宇

请我喝个咖啡呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值