1 前言
OBJ文件是Alias|Wavefront公司为它的一套基于工作站的3D建模和动画软件"Advanced Visualizer"开发的一种标准3D模型文件格式,目前市面上大多数主流的软件平台都是支持OBJ格式,OBJ模型于是也就成为了一种常用的数据交换格式。 OBJ文件是一种文本文件,由于模型是明码标记,这就方便我们对其进行查看、编辑。
博主通过参考OBJ规范文档,将规范文档加上自己的一定理解写成本文,旨在帮助大家了解obj模型结构,在日常工作中更好使用它!
2 概述
2.1 Obj模型特点
OBJ3.0文件格式支持直线(Line)、多边形(Polygon)、表面(Surface)和自由形态曲线(Free-form Curve)。直线和多边形通过它们的点来描述,曲线和表面则根据它们的控制点和依附于曲线类型的额外信息来定义,这些信息支持规则和不规则的曲线,包括那些基于贝塞尔曲线(Bezier)、B样条(B-spline)、基数(Cardinal/Catmull-Rom)和泰勒方程(Taylor equations)的曲线。其他特点如下:
(1)OBJ文件是一种3D模型文件。不包含动画、材质特性、贴图路径、动力学、粒子等信息。
(2)OBJ文件主要支持多边形(Polygons)模型。虽然也支持曲线(Curves)、表面(Surfaces)、点组材质(Point Group Materials),但Maya导出的OBJ文件并不包括这些信息。
(3)OBJ文件支持三个点以上的面,这一点很有用。很多其它的模型文件格式只支持三个点的面,所以导入Maya的模型经常被三角化了,这对于我们对模型进行再加工甚为不利。
(4)OBJ文件支持法线和贴图坐标。在其它软件中调整好贴图后,贴图坐标信息可以存入OBJ文件中,这样文件导入Maya后只需指定一下贴图文件路径就行了,不需要再调整贴图坐标。
2.2 Obj模型结构
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)
OBJ里的面的索引可正可负,为正数时是指顶点的绝对索引,为负时(比如:f -a -b -c),表示从该面位置开始,倒数的第a,b,c个顶点,vn,vt索引也一样。
OBJ文件不包含面的颜色定义信息,不过可以引用材质库,材质库信息储存在一个后缀是".mtl"的独立文件中。关键字"mtllib"即材质库的意思。
材质库中包含材质的漫射(diffuse),环境(ambient),光泽(specular)的RGB(红绿蓝)的定义值,以及反射(specularity),折射(refraction),透明度(transparency)等其它特征。
"usemtl"指定了材质之后,以后的面都是使用这一材质,直到遇到下一个"usemtl"来指定新的材质。
注意:这里面最常用的几个参数是v,vt,vn,f,s,g,o,usemtl,mtllib 其他的参数很少用到。
3 OBJ数据解析
3.1 模型材质库的定义(mtllib)
#开头的表示注释内容,软件解析文件的时候会自动忽略。
3.2模型顶点(v)
3.3顶点法线(vn)
顶点法线使用vn进行标识,表示格式为:“vn x y z” 其中xyz分别表示xyz方向上向量值。
3.4 顶点贴图坐标(vt)
具有贴图的模型,模型几何与贴图是如何对应起来的?其实很简单,通过uv坐标就可以将模型与对应贴图,标识符为vt,表达格式为:“vt u v”
3.5模型面(f)
3.6 对象材质(usemtl)
对于上面编写的模型结构,需要为这个对象指定一个材质,需要用usemtl 进行标识,格式为usemtl [material name]
3.7 其他参数
g 标识模型组
4 Mtl数据解析
Newmtl 标识材质名称
Ks 标识镜面反射颜色,颜色为rgb参考,取值0-1
Ns标识镜面反射中加权反射指数
Ka标识环境颜色,颜色为rgb参考,取值0-1
Kd标识漫反射颜色,颜色为rgb参考,取值0-1
d 和Tr 标识材质的透明度,Tr=1-d
map_ka和map_kd分别表示贴图路径
模型的材质可能会要不同的效果,为了达到这种区分,用关键字illum进行标识
Illum 0表示颜色和环境参数关闭
Illum 1表示颜色和环境参数开启
Illum 2表示材质高亮显示
Illum 3表示开启反射和光线跟踪
Illum 4表示玻璃透明度开启,管线追踪开启
到此这篇3dtiles转换obj(3dtiles转换osgb)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/78885.html