当前位置: 首页 > news >正文

obj模型的格式

obj模型的格式

  • 带纹理的obj模型
  • mtl材质文件

带纹理的obj模型

一般带纹理的obj模型需要有以下三个文件,分别是.obj文件,.mtl纹理库文件,还有纹理贴图(这里是.jpg)如图所示:
在这里插入图片描述
用记事本或者其他工具打开查看.obj文件的内部结构如下图所示:
详细讲解下.obj文件结构

  1. #代表文件的注释,用来描述具体的内容注释,当读到#时,可跳过该行。
  2. mtllib xxx.mtl代表obj文件中包含纹理库信息(如右图所示,纹理信息后面详细讲解)
    在这里插入图片描述
v  -8.6007 1.3993 10.0000
  1. 格式:v (vertices) x y z
    意义:每个顶点的坐标
vt 0.0000 1.0000 0.0000
  1. 格式:vt (vertex texture) u v或者vt u v w 通常是0-1
    意义:纹理坐标
vn 0.0000 0.0000 -1.0000
  1. 格式:vn (vertex normal) x y z
    意义:顶点法矢方向
f 1/1/1 2/2/1 3/3/1 
  1. 格式 :f v/vt/vn v/vt/vn v/vt/vn顶点索引 / 纹理坐标索引 / 顶点法向量索引
    意义:构成的面
    注意:其中面的构成可以只由:v、v/vt、v//vn(两斜杠)、v/vt/vn等情况构成,且顶点的个数也不一定要为3个,可以大于等于3如下所示:表示为5边形的面结构
f 1 2 3 4 5
仅包含顶点f v1 v2 v3 ....
包含顶点和纹理f v1/vt1 v2/vt2 v3/vt3 ...
包含顶点纹理和法线f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3 ...
包括顶点和法线f v1//vn1 v2//vn2 v3//vn3 ...
  1. Group声明用于组织模型的单元(element)以及简化数据操作
o:代表object,表示不同的对象名称
对象是由组构成,比如一个城镇是一个对象,它有许多房子,每个房子都被认为是一个组,而每个房子又包含了很多子组,比如窗户,们,墙,屋顶等。

g:代表group,顶点或者三角面片的集合名称
组是由一系列面构成,这些面使用同样的属性,比如同样的材质。

s:代表smooth
s 1
...
s 2
...
smooth shading还可以被关闭
s off
``
`

# 材质引用
一个材质库是一个伴随.obj文件的独立文件,它为每个组定义了材质。.obj文件常常会包含一个材质库文件,有时它还会包含多个材质库文件。

包含mtl文件
```cpp
mtllib xxx.mtl
  ...

使用mtl文件

usemtl xxx
  ...

mtl材质文件

# 
# Wavefront material file
# Converted by the DEEP Exploration  2.1.12.1218
# Right Hemisphere, LTD
# http://www.righthemisphere.com/
# 
//定义材质以newmtl开头
newmtl inside //newmtl之后的都是材质的定义,它的范围是直到另一个新的newmtl出现,或该文件的结束才停止。
Ka 0.4 0.4 0.4//Ka - 环境光
Kd 0.587609 0.587609 0.587609//Kd-漫反射颜色
Ks 0.071744 0.071744 0.071744//Ks-镜面颜色
illum //1illum-光照模型
Ns 32

newmtl outside
Ka 0 0 0
Kd 1 1 1
Ks 0.384296 0.194061 0.174387
illum 2
//每个材质允许使用多照明模型。枚举如下:
//0. 色彩开,阴影色关
//1. 色彩开,阴影色开
//2. 高光开
//3. 反射开,光线追踪开
//4. 透明: 玻璃开 反射:光线追踪开
//5. 反射:菲涅尔衍射开,光线追踪开
//6. 透明:折射开 反射:菲涅尔衍射关,光线追踪开
//7. 透明:折射开 反射:菲涅尔衍射开,光线追踪开
//8. 反射开,光线追踪关
//9. 透明: 玻璃开 反射:光线追踪关
//10. 投射阴影于不可见表面
Ns 64//指定材质的反射指数,定义了反射高光度。64是反射指数值,该值越高则高光越密集,一般取值范围在0~1000。
//map_Ka - 环境光贴图
map_Kd cup.jpg//map-Kd - 漫反射颜色贴图
//map_Ks - 镜面颜色贴图

设置完成后打开obj文件得到的模型如下所示:
在这里插入图片描述

相关文章:

  • 设计模式:适配器模式(C++模式)
  • CGLIB 动态代理使用
  • Revit SDK:CreateFillPattern 创建填充样式
  • 当mybatisPlus与tk.mybatis遇到更新
  • sp.coo_matrix(), sp.eye()
  • linux虚拟机未建分区的情况下对磁盘进行扩容
  • 猿创征文|【数据结构】牛客网刷题
  • 【函数式编程】Java函数式编程学习
  • 基于springboot,vue旅游信息推荐系统
  • SSLError(MaxRetryError(‘HTTPSConnectionPool(host=\‘repo.anaconda.com\‘, port
  • vs生成dll且被java通过jna调用
  • DDD - 六边形架构和CQRS架构
  • 宠物寄养小程序实战教程02
  • 【计算机网络】运输层习题(谢希仁)(1)
  • 微信小程序抓包-夜神模拟器结合BurpSuite抓包(可用于现在最新版本微信)
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • 345-反转字符串中的元音字母
  • Android优雅地处理按钮重复点击
  • co模块的前端实现
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Git 使用集
  • Java比较器对数组,集合排序
  • Java基本数据类型之Number
  • Next.js之基础概念(二)
  • Rancher-k8s加速安装文档
  • vue:响应原理
  • webpack+react项目初体验——记录我的webpack环境配置
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 前端临床手札——文件上传
  • 正则与JS中的正则
  • const的用法,特别是用在函数前面与后面的区别
  • UI设计初学者应该如何入门?
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • !!java web学习笔记(一到五)
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #QT(TCP网络编程-服务端)
  • #微信小程序(布局、渲染层基础知识)
  • #微信小程序:微信小程序常见的配置传值
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (1)(1.13) SiK无线电高级配置(六)
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (2)STL算法之元素计数
  • (pojstep1.1.2)2654(直叙式模拟)
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (算法)N皇后问题
  • (一)基于IDEA的JAVA基础12
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算