3D模型--obj文件小知识

  • 小小总结
    • 简单介绍
    • obj文件的概念和特点介绍
    • obj文件的基本结构
      • 文件格式
      • 数据类型和关键字
        • 顶点数据(Vertex data):
        • 自由形态曲线(Free-form curve)/表面属性(surface attributes):
        • 元素(Elements):
        • 自由形态曲线(Free-form curve)/表面主体陈述(surface body statements):
        • 自由形态表面之间的连接(Connectivity between free-form surfaces):
        • 显示(Display)/渲染属性(render attributes):
    • obj文件的实例解释
      • 解释说明
    • 结束语
    • 参考文章

小小总结

为了研究三维模型的轻量化技术,首先来学习一下obj文件,参考了不少资料后,写下来方便自己查阅,同时也可以帮助到有需要的朋友。

简单介绍

obj文件是一种非常标准的3D模型文件格式,在各种3D模型软件中的互通互导性都非常强,同时也支持一些游戏引擎的读写。下面来详细介绍一下obj文件格式的一些具体知识吧。

obj文件的概念和特点介绍

  1. obj文件是一间名为Wavefront公司为其一个3D建模动画软件开发的文件格式,现已公开,得到广泛应用。
  2. obj文件是一种基于几何定义的文本文件,obj文件格式是一种简单的单独表示3D几何图元的文件格式——也就是,顶点的坐标,每个顶点纹理的UV坐标,顶点法向量,以及组成多边形的面的顶点坐标、以及纹理UV坐标序列。可以直接通过写字板或者记事本打开进行编辑操作
  3. obj文件目前的格式支持多边形(Polygon)直线(Lines)表面(Surfaces),和自由形态曲线(Free-form Curves)。其中直线和多边形直接用点来描述,表面和曲线则根据于它们的控制点和依附于曲线类型的额外信息来定义,这些额外信息包括像贝塞尔(Bezier)曲线,B样条(B-spline),基数(Cardinal/Catmull-Rom样条),和泰勒方程(Taylor equations)等。
  4. obj文件是存储3D模型数据的文本文件,不包含面的颜色信息,也无法包含动画、材质特性、贴图路径、动力学、粒子等信息。

obj文件的基本结构

文件格式

obj文件不需要任何一种文件头(File Header),文件开头通常是注释掉的几行文本说明信息,注释符号是哈希字符‘#’

空格和空行可以随意加到文件中以增加文件的可读性。有字的表明此行的数据类型。多行可以逻辑地连接在一起表示一行,方法是在每一行最后添加一个连接符 ‘\’(斜杠)

一个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文件的实例解释

这是一个从3D Builder导出的名为ACAR.obj的文件(楼主做过一些改动,重新导入可能会出现错误,这里只是为了方便作为解释)。

 #Exported from 3D Buildero Object.1v 36.451351 4.999999 13.781589 188 188 188v 128.451355 68.897858 13.781589 188 188 188v 0.000000 4.999999 13.781589 188 188 188#............o Object.2v 22.295732 9.999998 27.563177 188 188 188v 20.855162 9.999998 27.487680 188 188 188v 18.036983 9.999998 26.888657 188 188 188v 22.295732 9.999998 27.563177 188 188 188#............f 590 517 605f 593 637 638f 639 640 607#...........g defaultv -0.500000 -0.500000 0.500000v 0.500000 -0.500000 0.500000vt 1.000000 4.000000vt 2.000000 0.000000vt 2.000000 1.000000vt -1.000000 0.000000vt -1.000000 1.000000vn 0.000000 0.000000 1.000000vn 0.000000 0.000000 1.000000vn 0.000000 0.000000 1.000000vn 0.000000 0.000000 1.000000vn 0.000000 1.000000 0.000000vn 0.000000 1.000000 0.000000s offg pACAR1usemtl initialShadingGroupf 1/1/1 2/2/2 4/4/3 3/3/4f 3/3/5 4/4/6 6/6/7 5/5/8f 5/5/9 6/6/10 8/8/11 7/7/12f 7/7/13 8/8/14 2/10/15 1/9/16f 2/2/17 8/11/18 6/12/19 4/4/20f 7/13/21 1/1/22 3/3/23 5/14/24

解释说明

按顺序来解释一下我这个obj文件吧。

“o (Object)”声明用于标识在一个文件中的不同object单元;

“v 36.451351 4.999999 13.781589 188 188 188”,v表示顶点坐标,前三个数分别表示xyz轴的坐标,后三个数为可选项,表示点的颜色;

“g default",所有的group声明都是基于状态的。一旦声明了group,将应用于所有之后的内容,直到下一个group 声明。

“vt 1.000000 4.000000”,代表点的贴图坐标;

“vn 0.000000 0.000000 1.000000”,代表点的法线;

“s off”,表示关闭光滑组;

“usemtl initialShadingGroup”,表示使用的材质;

“f 7/13/21”,顶点法线索引,索引号分别用左斜线(/)隔开,格式:“f v/vt/vn”;

结束语

这次的学习比较简单,有问题的话也非常欢迎读者朋友指出批评。通常处理obj文件的时候,会抛弃顶点法线数据,而通过顶点信息来进行计算。有了以上的顶点坐标、法线、纹理坐标等信息,就可以导入3D软件进行3D模型文件的渲染了。

参考文章

这里非常感谢两位前辈所著,让我节省了不少时间,同时受益匪浅!

https://www.cnblogs.com/slysky/p/4081307.html

https://blog.csdn.net/m0_38068229/article/details/103424196

3D模型--obj文件小知识相关推荐

  1. opengl加载显示3D模型obj类型文件

    opengl加载显示3D模型obj类型文件 前置条件 注意事项 项目展示 项目完整C++源代码 前置条件 opengl三方库freeglut,显示obj格式的三维模型文件 注意事项 源代码 model ...

  2. 梦幻西游唯美版.gim(3D模型)文件格式结构记录

    梦幻西游唯美版.gim(3D模型)文件格式结构记录 版本 v0.2 by 小宝 梦幻在唯美版中加入了真正的3D资源,这会不会促使小宝去学习3D图形呢? 吾尝终日而思矣,不如须夷之所学也. 我们提取资源 ...

  3. 【3ds Max 给PCB外壳建模1】嘉立创的3D图形obj文件导入3d max、导出、另存为

    文章目录 3ds Max 给PCB外壳建模所有文章 一.嘉立创的3D图形obj文件导入3d max 二.文件导出 3ds Max 给PCB外壳建模所有文章 1.[3ds Max 给PCB外壳建模1]嘉 ...

  4. opengl关于obj文件相关知识

    首先看一下obj文件格式: obj文件中可以有v(顶点位置).vt(顶点纹理坐标).vn(顶点法向量).f(面)开头的四种类型数据. 所有的obj文件中都有v型数据.格式如下: v 0.437500 ...

  5. 3D中obj文件操作

    3D中的OBJ文件格式详解:https://blog.csdn.net/shenshen211/article/details/51740988 三维模型obj文件的格式解析与读取 :https:// ...

  6. [re入门]PE文件小知识

    从PE入手的信息收集,让恶意样本无处可逃 一. PE文件格式的基础知识 1.1 认识PE文件 1.2 整体结构 1.3 基地址 1.4 相对虚拟地址 1.5 文件偏移地址 1.6 结构 1.6.1 D ...

  7. 网页导入3D模型-obj/mtl文件

    具体代码如下 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF ...

  8. 利用JPCT-AE在安卓设备上进行*.obj文件的加载和显示

    最近做一个项目,需要加载带纹理的3d模型obj文件并显示出来,仅限于安卓平台,因此需要一个轻量级的3d内核. 找了很多内核,要不就是太久没更新不能用了,要不就是功能太复杂,后来找到了JPCT-AE,网 ...

  9. 3d展示网页开发_超实用:一篇文章带你了解市面上主流通用的3D模型格式

    说到格式,相信大家都不陌生. 随着互联网的普及,我们几乎每天都会和不同的格式打交道,文本的TXT.图片的JPG.视频的MP4,就连压缩包也有不同的格式. 通俗来说,你可以把"格式" ...

  10. Android增强现实(三)-3D模型展示器

    1.Android增强现实(一)-AR的三种方式(展示篇) 2.Android增强现实(二)-支持拖拽控制进度和伸缩的VrGifView 3.Android增强现实(三)-3D模型展示器 前言 前段时 ...

最新文章

  1. 用Flutter + Dart快速构建一款绝美移动App
  2. gulp-rev:项目部署缓存解决方案----gulp系列(六)
  3. python学习手册中文版免费下载-Python学习手册
  4. python第三方插件登录网易音乐_python3-使用requests模拟登录网易云音乐
  5. Kotlin实战指南十七:JvmField、JvmStatic使用
  6. the java home_the java_home environment variable is not defined correctly
  7. hbuild 编译 php,Hbuilder的PHP环境搭建
  8. CSS基础——CSS 列表和表单【学习笔记】
  9. java 并发原子性与易变性 来自thinking in java4 21.3.3
  10. WPF学习之页间导航与页间数据传递
  11. php 检测是否有jmail,asp空间判断jmail组件是否安装或支持的代码
  12. c语言int函数使用方法,int函数的使用方法_Excel中int函数的操作用法
  13. 【thinkphp 基础 3】配合phpstudy进行验证码拓展安装
  14. 电脑如何备份重要文件?教你两种简单方法
  15. Linux自学笔记——OpenSSL命令行工具
  16. macOS开启高性能模式
  17. hdoj 4544 贪心
  18. .NET6用起来-Autofac
  19. 风靡全球的英雄联盟手游,竟然没有国服,只能教你玩国际服了...
  20. Django中的跨域解决办法 基于后端的跨域解决方案

热门文章

  1. 进击的海姆达尔Heimdallr,2021年链游最后一趟财富专列
  2. 浙工大计算机学院2013学年二等奖学金,关于2012—2013学年学院奖学金评定文件.doc...
  3. iOS之UITableViewController的使用
  4. Unity 3D光源-Directional平行光/逆光效果,光晕详解、教程
  5. 微信公众号怎么申请注册?看这一篇就够了
  6. Windows徽标键快捷键
  7. FRI.Django 中的装饰器及 Auth 模块
  8. Excel读写工具类
  9. 5种方案实现订单30分钟未支付,则自动取消
  10. win10系统qq截图时屏幕局部自动放大怎么办 解决方法