目录

1. Concepts

2. scenes, nodes

3. meshes

4. buffers, bufferViews, accessors

4.1 buffers

4.2 bufferViews

4.3 accessors

5. materials

5.1 pbrMetallicRoughness

6. cameras

6.1 perspective cameras

6.2 orthographic cameras

7. textures, images, samplers

7.1 textures

7.2 images

7.3 samplers


gltf采用json格式描述3D模型的结构,主要用来解决3D模型在网络中的高效传输问题。

1. Concepts

gltf 主要包括以下元素。

名称 含义
scenes, nodes 场景基本结构
cameras 相机
meshes 三维几何
buffers, bufferViews, accessors 数据块
materials 材质
textures, images, samplers 纹理,图片,采样器
skins 蒙皮
animations 动画

gltf中元素的关系图如下:

2. scenes, nodes

gltf中可以定义若干个场景(scenes),每个场景引用若干个节点(nodes),节点以树形结构的方式组织。

        

节点(nodes)可以包含坐标转换。该转换可以用平移(translation),旋转(rotation),缩放(scale)分别表示。

"nodes": [{"translation": [ 0,0,0 ],"rotation": [ 0,0,0,1 ],"scale": [ 1,1,1 ]...}
]

也可以通过4*4的矩阵(matrix)表示坐标转换。即:

"nodes": [{"matrix": [1,0,0,0,0,1,0,0,0,0,1,0,5,6,7,1],...}
]

其中,矩阵(matrix)与表示平移(translation),旋转(rotation),缩放(scale)的矩阵之间,存在如下关系:

matrix = translation * rotation *  scale

node还可以包含三维几何(mesh)和相机(camera)的信息。在渲染中,这些信息与上述变换矩阵相乘,就可以确定在场景中的位置。

"nodes": [{"mesh": 4,...},{"camera": 2,...},
]

3. meshes

三维几何(meshes)中可以包含多个片元(primitives)。 片元(primitives)包含了渲染需要信息。片元(primitives)中包含的信息如下:

字段 含义
mode 表示几何类型。如点(POINTS),线(LINES) , 或者三角形(TRIANGLES)
attributes 表示几何顶点信息。如位置(POSITION)和法线(NORMAL)
indices 表示几何顶点索引
material 表示材质信息

三维几何(meshes)的例子如下:

"meshes": [
{"primitives": [{"mode": 4,"indices": 0,"attributes": {"POSITION": 1,"NORMAL": 2},"material": 2}]
}]

4. buffers, bufferViews, accessors

buffers包含了场景的几何数据,bufferViews是对buffers中数据的索引,accessors为bufferViews中的数据添加类型和布局。

4.1 buffers

buffers包含了场景的几何数据,一般是二进制数据的形式。buffers包含的字段如下:

字段 含义
byteLength 表示二进制数据的长度。
uri 指向二进制数据的地址

二进制的几何数据有两种方式存储:一种是通过 base64的压缩后存入gltf文件中,此时字段uri的内容如下:

"buffers" : [{"byteLength" : 827640,"uri" : "data:application/gltf-buffer;base64,AAAB..."}
]

另一种单独存入以.bin为后缀名的文件中,然后以链接文件的方式接入gltf。此时字段uri的内容如下:

 "buffers": [{"byteLength": 827640,"uri": "gltf.bin"}
]

4.2 bufferViews

bufferViews指向buffers中数据的一个片段。 bufferViews包含的字段如下:

字段 含义
buffer 表示一个二进制数据块,该块中存储了场景中的几何信息。
byteOffset 表示相对buffer块起始位置的偏移。
byteLength 表示了二进制数据的长度。
byteStride 表示数据之间的间隔。
target 表示opengl缓冲区的类型,如ARRAY_BUFFER,ELEMENT_ARRAY_BUFFER。

bufferViews的例子如下:

"bufferViews": [
{"buffer": 0,"byteOffset": 4,"byteLength": 28,"byteStride": 12,"target": 34963
}]

4.3 accessors

accessors定义了bufferViews中的数据如何解释。accessors包含的字段如下:

字段 含义
bufferViews 指向一段二进制数据。
byteOffset 表示相对bufferViews起始位置的偏移。
type 表示数据类型,如"SCALAR","VEC2","MAT3"等。
componentType 表示分量的数据类型,如unsigned short,float等。
count 表示分量的个数。
min 表示分量的最小值。数组的长度必须与分量的个数相同。
max 表示分量的最大值。数组的长度必须与分量的个数相同。

accessors的例子如下:

"accessors": [
{"bufferView": 0,"byteOffset": 4,"type": "VEC2","componentType": 5126,"count": 2,"min" : [0.1, 0.2],"max" : [0.9, 0.8]
}]

示例

将上述三者结合起来,就可以准确的获取渲染所需的几何信息。如下图:

其中,bufferViews中的数据可以使用glBindBuffer绑定到openGL的缓冲区,accessor可以指定该缓冲区中定义了顶点的属性数据,并通过glVertexAttribPointer告诉顶点着色器(vertex shader)改如何解释和使用该缓冲区中的数据。

5. materials

材质(materials)描述物体表面的特征,它决定了渲染器该如何渲染该物体。

材质模型 Metallic-Roughness-Model 描述了物体表面材质的金属特征和粗糙程度,是gltf中默认的材质模型。其中,Metallic描述了材质的金属特征,取值在0到1之间。取值越靠近1,表示金属特征越强。Roughness则描述了材质的粗糙程度,取值在0到1之间。取值越靠近1,表示越粗糙。

5.1 pbrMetallicRoughness

材质模型Metallic-Roughness-Model是gltf默认使用的材质模型。在gltf中, 对象pbrMetallicRoughness 定义了该模型。

字段 含义
baseColorTexture 物体表面纹理。
baseColorFactor 颜色RGBA。没有纹理时,该项定义了物体表面颜色。
metallicRoughnessTexture 在颜色的blue分量中,存储了金属程度。在颜色的green分量中,存储了粗糙程度。
metallicFactor 金属程度因子。
roughnessFactor 粗糙程度因子。

pbrMetallicRoughness的例子如下:

"materials": [
{"pbrMetallicRoughness": {"baseColorTexture": {"index": 1,"texCoord": 1},"baseColorFactor": [ 1.0, 0.75, 0.35, 1.0 ],"metallicRoughnessTexture": {"index": 5,"texCoord": 1},"metallicFactor": 1.0,"roughnessFactor": 0.0}
}]

material中通过纹理索引(index)和纹理坐标(texCoord)引用纹理。纹理索引(index)是纹理数组中元素的索引号。纹理坐标(texCoord)定义在图元(primitive)在顶点属性中。

6. cameras

有两种类型的相机:透视投影相机和正交投影相机。

6.1 perspective cameras

透视投影相机(perspective cameras)的定义如下:

字段 含义
aspectRatio 裁剪面的宽高比
yfov 垂直夹角。可视空间顶面和底面的夹角。
zfar 远裁剪面的位置
znear 近裁剪面的位置

透视投影相机(perspective cameras)的示例如下:

"cameras": [
{"type": "perspective","perspective": {"aspectRatio": 1.5,"yfov": 0.65,"zfar": 100,"znear": 0.01}
}]

6.2 orthographic cameras

正交投影相机(orthographic cameras)的定义如下:

字段 含义
xmag 裁剪面宽度的1/2
ymag 裁剪面高度的1/2
zfar 远裁剪面的位置
znear 近裁剪面的位置

正交投影相机(orthographic cameras)的示例如下:

"cameras": [
{"type": "orthographic","orthographic": {"xmag": 1.0,"ymag": 1.0,"zfar": 100,"znear": 0.01}
}]

7. textures, images, samplers

7.1 textures

材质(materials)中可以使用纹理(textures)指定物体表面的颜色和物理特征。纹理(textures)的定义的字段如下:

字段 含义
source 图片(images)数组的索引。
sampler 采样器(samplers)数组的索引。

纹理(textures)的示例如下:

"textures": [
{"source": 4,"sampler": 2
}]

7.2 images

图片(images)的格式为jpg/png等,在纹理(texture)中引用。图片(images)有两种存储方式:

一种是通过base64的压缩成字符串,存入gltf;

"images": [{"uri": "data:image/png;base64,iVBORw0K..."}
]

另一种以链接文件的方式接入gltf。

"images": [{"uri": "image01.png"}
]

7.3 samplers

采样器(samplers)定义了图片放大或缩小时,如何获取颜色信息,类似于opengl中的设置纹理参数的函数glTexParameter。

采样器(samplers)定义的字段如下:

字段 含义
magFilter 纹理放大时,如何获取像素颜色。取值有Nearest或Linear
minFilter 纹理缩小时,如何获取像素颜色。取值有Nearest或Linear
wrapS 如何填充纹理图像左侧或右侧的区域。
wrapT 如何填充纹理图像上方或下方的区域。

采样器(samplers)的示例如下:

"samplers": [{"magFilter": 9729,"minFilter": 9987,"wrapS": 10497,"wrapT": 10497}]

gltf 2.0快速入门相关推荐

  1. Castle Active Record for .NET2.0快速入门示例

    一.创建Web工程 创建一个Web站点或者Web应用程序,添加对Castle.ActiveRecord.dll的引用. 二.创建需要持久化的业务实体 在.NET2.0下,由于引入了泛型,创建业务实体比 ...

  2. 如何:从Spring 4.0快速入门以构建简单的REST-Like API(演练)

    如何:从Spring 4.0快速入门以构建简单的REST-Like API(演练) 关于使用Spring MVC创建Web API的另一篇教程. 不太复杂. 只是一个演练. 生成的应用程序将提供简单的 ...

  3. TensorFlow 2.0 快速入门指南 | iBooker·ApacheCN

    原文:TensorFlow 2.0 Quick Start Guide 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心如何实现目标.--<原则>,生活 ...

  4. 《R语言编程艺术》——第1章 1.0 快速入门

    第1章 1.0 快速入门 如前言所述,R是一种针对统计分析和数据科学的功能全面的开源统计语言.它在商业.工业.政府部门.医药和科研等涉及数据分析的领域都有广泛的应用. 本章将给出R的简单介绍--如何调 ...

  5. 视频教程-沐风老师Scratch3.0快速入门视频课程-其他

    沐风老师Scratch3.0快速入门视频课程 沐风课堂创始人,专栏作家,独立媒体人,资深互联网从业者. 沐风老师 ¥20.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 ...

  6. RHEL8.0快速入门系列笔记--理论知识储备(一)

    RHEL8.0快速入门系列笔记–理论知识储备(一) 红帽公司发布Linux8.0系统已经有一段时间,最近准备学习关于RHEL8.0的相关新特性.根据官方介绍:RHEL8.0在云/容器化工作负载方面做了 ...

  7. java web 2.0 下载地址_《征服Ajax Web2.0快速入门与项目实践(Java)》[PDF]

    征服Ajax Web2.0快速入门与项目实践(Java) 作者:张桂元 贾燕枫 姜波 基本信息 ·出版社:人民邮电出版社 ·页码:300 页 ·出版日期:2006年 ·ISBN:7115148031 ...

  8. SpringBoot整合BeetlSql3.0及BeetlSql3.0快速入门说明

    一 SpringBoot整合BeetlSql3.0 1.1 加入依赖 <dependencies><dependency><groupId>org.springfr ...

  9. RHEL8.0快速入门系列笔记--软件包管理(十一)

    RHEL8.0快速入门系列笔记–软件包管理(十一) 一.软件包管理 1.Linux系统中软件包管理 (一)软件包类型 [1] 二进制包 什么是二进制包?有什么特点? 1.二进制包,指的是已经编译好的软 ...

最新文章

  1. Htaccess文件是什么以及Windows下自由创建.htaccess文件的N种方法
  2. jupyter|魔法函数问题| UsageError: Line magic function `%` not found
  3. 移动应用开发必备工具盘点
  4. 83998 连接服务器出错_服务端 TCP 连接的 TIME_WAIT 问题分析与解决
  5. 干货福利:AI人工智能学习资料教程包.zip
  6. 1284:摘花生《信息学奥赛一本通》
  7. iPhone 12发布前夜:富士康奖励万元招不到人,有工人国庆连轴转
  8. 中心对称数 java_【LeetCode(Java) - 246】中心对称数
  9. 7.java基本数据类型转换包含哪两类?
  10. 加密卡华为怎么模拟_华为手机NFC模拟加密的门禁卡详细教程
  11. 1、怎样学习Java?
  12. c语言打印星号对勾,Intellij常用快捷键记录
  13. 华中农业大学计算机学硕,华中农业大学工学院2017年研究生招生预录取名单(含专业和导师)...
  14. left函数未定义_access中LEFT函数未定义的解决方案\表达式中'left'函数未定义。
  15. python分词考研英语真题词频(附结果)——读取word、nltk、有道智云API
  16. JAVA的下载安装教程(保姆级)
  17. 搜索技术【启发式搜索】 - 简介 A* 算法 IDA*算法
  18. 云画册php,神策指标设计及埋点方案介绍
  19. 可达100K/月,美团招聘各类安全工程师(地点:北京/上海,内含大量岗位)
  20. 为什么89C51单片机里面有TH0=(65536-50000)/256;TL0=(65536-50000)%256;

热门文章

  1. 苹果电脑/macbookpro 拔出电源充电器但还是显示充电的解决办法
  2. 第十七届全国大学生智能汽车竞赛讯飞-家庭服务机器人挑战赛全国选拔赛规则
  3. 想想自己如果不做开发,可能会从事什么职业?
  4. matlab半小提琴图,【ggplot2】不同方法画half -小提琴图
  5. springboot《计算机网络原理》课程试题库管理系统开发 毕业设计-附源码271129
  6. java 中long和Long的区别
  7. 易企秀前端压缩源码分析与还原
  8. 软件工程师的本手、妙手和俗手
  9. Stein引理(Stein's lemma)
  10. 帝国时代2哪个服务器稳定,《帝国时代2决定版》新手该选择哪个国家|新手使用国家推荐...