通过matlab实现obj三维文件的读取和保存

目录

1.obj格式文件简介

2.核心程序

3.仿真结果


1.obj格式文件简介

        obj文件是3D模型文件格式。由Alias|Wavefront公司为3D建模和动画软件"Advanced Visualizer"开发的一种标准,适合用于3D软件模型之间的互导,也可以通过matlab读写。

其他特点如下:

(1)OBJ文件是一种3D模型文件。不包含动画、材质特性、贴图路径、动力学、粒子等信息。

(2)OBJ文件主要支持多边形(Polygons)模型。虽然也支持曲线(Curves)、表面(Surfaces)、点组材质(Point Group Materials),但Maya导出的OBJ文件并不包括这些信息。

(3)OBJ文件支持三个点以上的面,这一点很有用。很多其它的模型文件格式只支持三个点的面,所以导入Maya的模型经常被三角化了,这对模型进行再加工甚为不利。

(4)OBJ文件支持法线和贴图坐标。在其它软件中调整好贴图后,贴图坐标信息可以存入OBJ文件中,这样文件导入Maya后只需指定一下贴图文件路径就行了,不需要再调整贴图坐标。

OBJ文件不需要任何种文件头(File Header),尽管经常使用几行文件信息的注释作为文件的开头。OBJ文件由一行行文本组成,注释行以符号“#”为开头,空格和空行可以随意加到文件中以增加文件的可读性。有字的行都由一两个标记字母也就是关键字(Keyword)开头,关键字可以说明这一行是什么样的数据。多行可以逻辑地连接在一起表示一行,方法是在每一行最后添加一个连接符(\)。注意连接符(\)后面不能出现空格或Tab格,否则将导致文件出错。

下列关键字可以在OBJ文件使用。在这个列表中, 关键字根据数据类型排列,每个关键字有一段简短描述。

顶点数据(Vertex data):

v 几何体顶点(Geometric vertices)

vt 贴图坐标点(Texture vertices)

vn 顶点法线(Vertex normals)

vp 参数空格顶点 (Parameter space vertices)

自由形态曲线(Free-form curve)/表面属性(surface attributes):

deg 度(Degree)

bmat 基础矩阵(Basis matrix)

step 步尺寸(Step size)

cstype 曲线或表面类型 (Curve or surface type)

元素(Elements):

p 点(Point)

l 线(Line)

f 面(Face)

curv 曲线(Curve)

curv2 2D曲线(2D curve)

surf 表面(Surface)

自由形态曲线(Free-form curve)/表面主体陈述(surface body statements):

parm 参数值(Parameter values )

trim 外部修剪循环(Outer trimming loop)

hole 内部整修循环(Inner trimming loop)

scrv 特殊曲线(Special curve)

sp 特殊的点(Special point)

end 结束陈述(End statement)

自由形态表面之间的连接(Connectivity between free-form surfaces):

con 连接 (Connect)

成组(Grouping):

g 组名称(Group name)

s 光滑组(Smoothing group)

mg 合并组(Merging group)

o 对象名称(Object name)

显示(Display)/渲染属性(render attributes):

bevel 导角插值(Bevel interpolation)

c_interp 颜色插值(Color interpolation)

d_interp 溶解插值(Dissolve interpolation)

lod 细节层次(Level of detail)

usemtl 材质名称(Material name)

mtllib 材质库(Material library)

shadow_obj 投射阴影(Shadow casting)

trace_obj 光线跟踪(Ray tracing)

ctech 曲线近似技术(Curve approximation technique)

stech 表面近似技术 (Surface approximation technique)

2.核心程序

clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
rng('default')

[vertices, faces ]= obj__read( '111.obj' );
trimesh(faces', vertices(1,:), vertices(2,:), vertices(3,:),'LineWidth',1,'EdgeColor','k');
obj_write('111.obj',vertices,faces);
up3018

3.仿真结果

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值