Mars3D开发基础学习:glTF小模型

glTF全称是 Graphics Language Transmission Format (图形语言传输格式),是一种针对GL(WebGL,OpenGL ES以及OpenGL)接口的运行时资产传递格式,由澳大利亚的 Khronons 集团进行维护,并于2017年6月5日在GitHub 上公布了glTF 2.0的规范,此文也是针对于2.0版本进行介绍的。

glTF通过提供高效、可扩展、可互操作的格式来传输和加载三维内容,填补了3D建模工具与现代图形应用程序之间的空白,它已成为了 Web 上的3D 对象标准(Web导出的通用标准),可以说glTF是3D 模型的JPEG格式,几乎每个3D Web框架都支持glTF。随着glTF的不断发展,glTF形成了自己庞大的生态系统,同时受到了各行业的大力支持。

glTF小模型只是 Primitive 或Entity的其中一种类型数据,代码加载方式是一致的,这里单独拿出来讲解下他的.gltf数据特性。

glTF官方资料

#1. glTF数据结构

glTF的核心是一个JSON文件,另外还支持外部数据。具体而言,一个glTF模型可包括以下三部分内容:

  • JSON格式的文件(.gltf),其中包含完整的场景描述,并通过场景结点引用网格进行定义 。包括:节点层次结构、材质(定义了3D对象的外观)、相机(定义义了渲染程序的视锥体设置 )、mesh(网格)、动画(定义了3D对象的变换操作,比如选择、平移操作)、蒙皮(定义了3D对象如何进行骨骼变换)等;
  • .bin包含几何和动画数据以及其他基于缓冲区的数据的二进制文件;
  • 图像文件(.jpg,.png)的纹理。

image

#1.1 glTF的JSON结构

场景对象以数组的形式存储在JSON文件中,可以使用数组中各个对象的索引来访问它们:

"meshes" : 
[
    { ... }
    { ... }
    ...
],

这些索引还用于定义对象之间的关系。上面的示例定义了多个网格对象,并且一个节点可以使用网格索引引用上面定义的其中一个网格对象:

"nodes": 
[
    { "mesh": 0, ... },
    { "mesh": 5, ... },
    ...
}

下图概述了glTF的JSON部分的顶级元素:

image

下面我对这些元素进行简要说明:

  • scene: glTF格式的场景结构描述条目。它通过引用node来定义场景图;
  • node: 场景图层次中的一个节点。它可以包含一个变换(比如旋转或平移),并且可以引用其他(子)节点 。此外,它可以引用网格和相机,以及描述网格变换的蒙皮;
  • camera: 定义了用于渲染场景的视锥体配置;
  • mesh: 描述了出现在场景中几何对象实际的几何数据。它是指accessor用于访问实际几何数据material的对象,并且是指在渲染对象时定义其外观的 ;
  • skin: 定义了用于蒙皮的参数,参数的值通过一个accessor对象获得。
  • animation: 描述了一些结点如何随时间进行变换(比如旋转或平移);
  • accessor: 一个访问任意数据的抽象数据源。被mesh、skin和animation元素使用来提供几何数据、蒙皮参数和基于时间的动画值。它通过引用一个bufferView对象,来引用实际的二进制数据;
  • material: 包含了定义3D对象外观的参数。它通常引用了用于3D对象渲染的texture对象;
  • texture: 定义了一个sampler对象和一个image对象。sampler对象定义了image对象在3D对象上的张贴方式。

更多详情,可查阅 glTF 2.0规范 以及 glTF官方教程

#1.2 glTF相关工具推荐

浏览: BabylonJS查看器浏览gltf ThreeJS查看器浏览gltf PlayCanvas查看器浏览gltf

其他: glTF在线验证 gltf内部优化处理

数据处理:单体小模型转为glTF格式

#2. glTF的使用

供了两种方式加载glTF模型,分别是通过 Entity API 和 Primitive API 两个 API 实现的,使用方式差不多,仅类名不同。

核心代码如下:

//entity方式
var graphic = new mars3d.graphic.ModelEntity({
    position: [116.35104, 30.86225, 374.4],
    style: {
        url: 'http://data.mars3d.cn/gltf/mars/fengche.gltf',
        heading: 270,
        scale: 30,
        minimumPixelSize: 100,
    },
})
graphicLayer.addGraphic(graphic)

//primitive方式 
var primitive = new mars3d.graphic.ModelPrimitive({
    position: [116.35104, 30.86225, 374.4],
    style: {
        url: 'http://data.mars3d.cn/gltf/mars/fengche.gltf',
        colorBlendMode: Cesium.ColorBlendMode.MIX,
        heading: 270,
        scale: 30,
        minimumPixelSize: 100,
    },
})
graphicLayer.addGraphic(primitive) 

#2.1. 运行效果

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Piglet是一个用于导入GLTF格式文件的工具。GLTF是一种开放的3D文件格式,被广泛用于虚拟现实(VR)和增强现实(AR)应用中。Piglet的主要功能是将以GLTF格式保存的三维模型导入到应用程序中进行进一步处理和使用。 Piglet具有以下特点和优势。首先,它的导入功能非常强大,能够处理包括几何形状、纹理、动画和材质等多种GLTF文件中的内容。这使得用户可以轻松地将复杂的3D模型导入到他们的项目中。 此外,Piglet还支持多种不同平台上的使用,包括Windows、Mac和Linux等操作系统。这样,用户可以根据自己的需求选择合适的平台进行工作。 Piglet还具有用户友好的界面,使得使用者可以方便地操作该工具。用户可以通过简单的拖放操作将GLTF文件拖入Piglet,并在导入过程中选择需要导入的特定项目。 最后,在导入过程中,Piglet还提供了一些额外的选项,如坐标轴的设置、导入纹理的压缩方式等。这些选项可以帮助用户更好地控制导入结果,以满足他们的需求。 总的来说,Piglet是一个强大、灵活且易于使用的GLTF导入工具。它为用户提供了一种快速和高效地将GLTF文件导入到他们的项目中的方式,从而为他们的虚拟现实和增强现实应用带来更多的可能性。 ### 回答2: Piglet是一个GLTF导入器,用于将GLTF文件格式转换为可用于计算机图形渲染的可视化对象。 GLTF是一种开放的文件格式,用于在不同的图形应用程序之间传输和加载3D图形模型和场景。它是由Khronos Group开发的一种标准格式,可以在各种平台和设备上使用。 Piglet导入器的主要功能是通过解析GLTF文件,将其中的几何形状、材质、动画和其他相关数据提取出来,并转换为可用于在计算机图形渲染中进行渲染和显示的对象。 导入器会首先读取GLTF文件的头部信息,以了解文件的结构和内容。然后,它会逐个解析文件中的节点、场景、材质、纹理和动画数据,并构建相应的对象来表示它们。 对于几何形状,导入器会读取顶点、法线、纹理坐标和顶点索引等数据,并构建相应的网格或曲面对象。对于材质和纹理,导入器会读取颜色、反射、透明度和纹理图像等属性,并创建相关的材质对象。 对于动画,导入器会读取关键帧、骨骼、骨骼动作和动画曲线等数据,并将其转换为适合计算机图形渲染的动画对象。 最后,导入器将这些对象组合起来,构建一个包含完整场景信息的数据结构,并将其返回给应用程序使用。 总之,Piglet是一个实用而强大的GLTF导入器,可以将GLTF文件转换为计算机图形渲染中所需的可视化对象,为用户提供了更灵活的处理和展示3D图形模型和场景的方式。 ### 回答3: Piglet是一个gltf导入器,专门用于在计算机图形学和虚拟现实应用中导入gltf文件格式的模型和场景数据。 gltf(GL Transmission Format)是一种开放的3D文件格式,用于在不同的3D工具之间交换模型和场景数据。与其他传统的3D文件格式相比,如OBJ或FBX,gltf具有许多优点。它是一种基于JSON的文本格式,可以轻松地在不同的平台和设备之间共享和解析。此外,gltf还支持对纹理、材质、动画、骨骼等3D对象的完整描述。 Piglet作为一个gltf导入器,具有以下功能和特点。首先,它能够读取和解析gltf文件,并提取其中的模型和场景数据。它能够识别和导入gltf中的几何体、纹理、材质、灯光、动画等元素。其次,Piglet可以根据gltf中的数据创建对应的渲染资源,并将其导入到计算机图形学引擎中进行渲染和展示。它可以处理复杂的几何体和纹理,并保留其原始的质量和细节。此外,Piglet还支持对导入的模型数据进行进一步的编辑和处理,例如改变模型的大小、位置和旋转等。 Piglet还支持导入gltf中的动画数据,可以实现模型的骨骼动画、形状关键帧动画和顶点动画等效果。用户可以根据自己的需求选择动画播放的方式和参数,实现自定义的动画效果。另外,Piglet还兼容多种计算机图形学引擎和开发平台,使得开发者可以方便地将gltf导入到自己的项目中,进行二次开发和应用。 总之,Piglet是一个强大的gltf导入器,可以帮助用户轻松地导入和使用gltf文件格式的模型和场景数据。它提供了丰富的功能和灵活的接口,使得gltf的导入过程变得简单而高效。无论是用于游戏开发、虚拟现实应用还是计算机图形学研究,Piglet都是一个不可或缺的工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

木遥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值