50. GLTF格式简介 (Web3D领域JPG)

gltf格式的重要性

GLTF格式是新2015发布的三维模型格式,随着物联网、WebGL、5G的进一步发展,会有越来越多的互联网项目Web端引入3D元素,你可以把GLTF格式的三维模型理解为.jpg、.png格式的图片一样,现在的网站,图片基本是标配,对于以后的网站来说如果需要展示一个场景,使用3D来替换图片表达也是很正常的事情。图片有很多格式,对于三维模型自然也是如此,Web开发的时候图片会有常用格式,对于Web3D开发也一样,肯定会根据需要选择一个常见的大家都熟悉的格式,随时时间的发展,GLTF必然称为一个极为重要的标准格式。

不仅three.js,其它的WebGL三维引擎cesium、babylonjs都对gltf格式有良好的的支持。

GLTF 2.0

Khronos Group组织2015发布了GLTF 1.0版本,在2017年又发布了GLTF2.0的版本。

关于glTF的更多介绍和信息,可以查看github:https://github.com/KhronosGroup/glTF(opens new window)

gltf包含内容

相比较obj、stl等格式而言,.gltf格式可以包含更多的模型信息。

.gltf格式文件几乎可以包含所有的三维模型相关信息的数据,比如模型层级关系、PBR材质、纹理贴图、骨骼动画、变形动画...

GLTF格式信息

如果你有一定的前端基础,那么你对JSON一定不陌生,GLTF文件就是通过JSON的键值对方式来表示模型信息,比如meshes表示网格模型信息,materials表示材质信息...

{
  "asset": {
    "version": "2.0",
  },
...
// 模型材质信息
  "materials": [
    {
      "pbrMetallicRoughness": {//PBR材质
        "baseColorFactor": [1,1,0,1],
        "metallicFactor": 0.5,//金属度
        "roughnessFactor": 1//粗糙度
      }
    }
  ],
  // 网格模型数据
  "meshes": ...
  // 纹理贴图
  "images": [
        {
            // uri指向外部图像文件
            "uri": "贴图名称.png"//图像数据也可以直接存储在.gltf文件中
        }
   ],
     "buffers": [
    // 一个buffer对应一个二进制数据块,可能是顶点位置 、顶点索引等数据
    {
      "byteLength": 840,
     //这里面的顶点数据,也快成单独以.bin文件的形式存在   
      "uri": "data:application/octet-stream;base64,AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAC/.......
    }
  ],
}

.bin文件

有些glTF文件会关联一个或多个.bin文件,.bin文件以二进制形式存储了模型的顶点数据等信息。 .bin文件中的信息其实就是对应gltf文件中的buffers属性,buffers.bin中的模型数据,可以存储在.gltf文件中,也可以单独一个二进制.bin文件。

"buffers": [
    {
        "byteLength": 102040,
        "uri": "文件名.bin"
    }
]

二进制.glb

gltf格式文件不一定就是以扩展名.gltf结尾,.glb就是gltf格式的二进制文件。比如你可以把.gltf模型和贴图信息全部合成得到一个.glb文件中,.glb文件相对.gltf文件体积更小,网络传输自然更快。

导出gltf

blender:最新版本可以直接导出gltf。

3damx gltf相关插件:https://github.com/BabylonJS/Exporters/releases

Blender导入导出gltf模型文件

你可以用Blender软件导出绘制好的三维模型,也可以打开和预览gltf格式文件模型。

Qt Quick 3D 是一个用于创建三维视觉体验的框架,它允许开发者在使用Qt Quick的应用程序中轻松集成3D内容。要在Qt Quick 3D中加载 `.gltf` 格式(GL Transmission Format)的模型和动画,你可以使用 `Qt 3D` 模块提供的类和组件来实现。 首先,确保你的项目中包含了 `Qt3DCore`, `Qt3DExtras`, `QtQuick3D`, `QtQuick3DAssetImport` 等模块。然后你可以使用 `Qt3DExtras` 中的 `Qt3DExtras::Qt3DWindow` 作为容器,在其中加载你的 `.gltf` 文件。 下面是一个基本的示例步骤,展示如何在Qt Quick 3D中加载 `.gltf` 格式并展示动画: 1. 在你的Qt Quick文件(如 `.qml` 文件)中,创建一个 `Qt3DExtras::Qt3DWindow` 实例。 2. 创建一个 `Qt3DCore::QEntity` 对象作为根实体。 3. 使用 `Qt3DExtras::Qt3DSceneLoader` 组件加载 `.gltf` 文件。你可以通过设置其 `source` 属性为 `.gltf` 文件的路径来实现。 4. 将 `Qt3DSceneLoader` 对象添加到根实体中。 5. (可选)为了控制动画,你可以使用 `Qt3DExtras::QAnimationAspect`,并且如果你需要更精细的控制,可能还需要 `Qt3DExtras::QAbstractArithmeticController`。 6. 将根实体添加到 `Qt3DWindow` 中。 这是一个简单的代码示例: ```qml import QtQuick 2.15 import QtQuick.Window 2.15 import Qt3D.Core 2.15 import Qt3D.Extras 2.15 import Qt3D.Render 2.15 import Qt3D.Input 2.15 Window { visible: true width: 800 height: 600 Qt3DExtras Qt3DWindow { id: view3D anchors.fill: parent scene: Qt3DExtras Qt3DSceneLoader { id: sceneLoader source: "path/to/your/model.gltf" onCompleted: { // 可以在这里访问场景中的节点,如动画控制器等 } } } } ``` 请根据你的具体需求调整 `source` 属性中的路径,并确保 `.gltf` 文件被正确放置在项目的资源文件中或者指定正确的文件路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值