格式详解_glTF格式详解(示例:一个简单的蒙皮)

本文翻译自:https://github.com/fangcun010/glTF-Tutorials/blob/master/gltfTutorial/gltfTutorial_019_SimpleSkin.md

由于本人才疏学浅,翻译难免有误,望各位不吝惜指正。


glTF资源格式支持顶点蒙皮,允许几何数据基于骨骼数据进行变形。这使得场景中的3D对象可以变得更加真实。在glTF资源的JSON文件中可以通过定义skin对象来描述蒙皮信息。

下面给出了一个带有简单蒙皮信息的glTF资源的JSON文件。在本章节,我们会对这一JSON文件进行简单地说明,有关顶点蒙皮的更多信息会在下一章节介绍。

{
  "scenes" : [ {
    "nodes" : [ 0 ]
  } ],
  
  "nodes" : [ {
    "skin" : 0,
    "mesh" : 0,
    "children" : [ 1 ]
  }, {
    "children" : [ 2 ],
    "translation" : [ 0.0, 1.0, 0.0 ]
  }, {
    "rotation" : [ 0.0, 0.0, 0.0, 1.0 ]
  } ],
  
  "meshes" : [ {
    "primitives" : [ {
      "attributes" : {
        "POSITION" : 1,
        "JOINTS_0" : 2,
        "WEIGHTS_0" : 3
      },
      "indices" : 0
    } ]
  } ],

  "skins" : [ {
    "inverseBindMatrices" : 4,
    "joints" : [ 1, 2 ]
  } ],
  
  "animations" : [ {
    "channels" : [ {
      "sampler" : 0,
      "target" : {
        "node" : 2,
        "path" : "rotation"
      }
    } ],
    "samplers" : [ {
      "input" : 5,
      "interpolation" : "LINEAR",
      "output" : 6
    } ]
  } ],
  
  "buffers" : [ {
    "uri" : "data:application/gltf-buffer;base64,AA为了排版而省略,可以使用英文原文中的代码",
    "byteLength" : 168
  }, {
    "uri" : "data:application/gltf-buffer;base64,A//=为了排版而省略,可以使用英文原文中的代码",
    "byteLength" : 320
  }, {
    "uri" : "data:application/gltf-buffer;base64,AA=为了排版而省略,可以使用英文原文中的代码",
    "byteLength" : 128
  }, {
    "uri" : "data:application/gltf-buffer;base64,AA//为了排版而省略,可以使用英文原文中的代码",
    "byteLength" : 240
  } ],
  
  "bufferViews" : [ {
    "buffer" : 0,
    "byteOffset" : 0,
    "byteLength" : 48,
    "target" : 34963
  }, {
    "buffer" : 0,
    "byteOffset" : 48,
    "byteLength" : 120,
    "target" : 34962
  }, {
    "buffer" : 1,
    "byteOffset" : 0,
    "byteLength" : 320,
    "byteStride" : 16
  }, {
    "buffer" : 2,
    "byteOffset" : 0,
    "byteLength" : 128
  }, {
    "buffer" : 3,
    "byteOffset" : 0,
    "byteLength" : 240
  } ],

  "accessors" : [ {
    "bufferView" : 0,
    "byteOffset" : 0,
    "componentType" : 5123,
    "count" : 24,
    "type" : "SCALAR",
    "max" : [ 9 ],
    "min" : [ 0 ]
  }, {
    "bufferView" : 1,
    "byteOffset" : 0,
    "componentType" : 5126,
    "count" : 10,
    "type" : "VEC3",
    "max" : [ 1.0, 2.0, 0.0 ],
    "min" : [ 0.0, 0.0, 0.0 ]
  }, {
    "bufferView" : 2,
    "byteOffset" : 0,
    "componentType" : 5123,
    "count" : 10,
    "type" : "VEC4",
    "max" : [ 0, 1, 0, 0 ],
    "min" : [ 0, 1, 0, 0 ]
  }, {
    "bufferView" : 2,
    "byteOffset" : 160,
    "componentType" : 5126,
    "count" : 10,
    "type" : "VEC4",
    "max" : [ 1.0, 1.0, 0.0, 0.0 ],
    "min" : [ 0.0, 0.0, 0.0, 0.0 ]
  }, {
    "bufferView" : 3,
    "byteOffset" : 0,
    "componentType" : 5126,
    "count" : 2,
    "type" : "MAT4",
    "max" : [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, -0.5, -1.0, 0.0, 1.0 ],
    "min" : [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, -0.5, -1.0, 0.0, 1.0 ]
  }, {
    "bufferView" : 4,
    "byteOffset" : 0,
    "componentType" : 5126,
    "count" : 12,
    "type" : "SCALAR",
    "max" : [ 5.5 ],
    "min" : [ 0.0 ]
  }, {
    "bufferView" : 4,
    "byteOffset" : 48,
    "componentType" : 5126,
    "count" : 12,
    "type" : "VEC4",
    "max" : [ 0.0, 0.0, 0.707, 1.0 ],
    "min" : [ 0.0, 0.0, -0.707, 0.707 ]
  } ],
  
  "asset" : {
    "version" : "2.0"
  }
}

上面代码由渲染程序渲染的效果如下:

0593c95ddd77bc011bf90c4eb36f5ee1.gif
图19a:简单的蒙皮效果

简单蒙皮示例中出现的场景元素

示例代码中出现的场景元素汇总如下:

  • scenes数组对象和nodes数组对象已经在之前的章节介绍过。代码中加入了索引为1和索引为2两个新的node对象,用来定义骨骼。可以认为新添加的node对象是骨骼间的关节点,用于变形网格。
  • skins数组对象,我们会在下一章节解释说明。
  • animations数组对象,之前的章节,我们已经做过介绍。animation对象引用了作为骨骼的node对象,用来产生蒙皮动画。
  • meshs数组对象,之前的章节,我们已经做过介绍。在本示例,我们为mesh.primitive对象添加了"JOINTS_0"和"WEIGHT_0"属性,用于顶点蒙皮。
  • buffers数组对象,bufferViews数组对象和accessors数组对象,之前的章节,我们已经做过介绍。在本示例,新添加的这类对象被我们用来描述顶点蒙皮信息。

下一章节,我们会介绍这些元素如何结合起来产生蒙皮动画。


fangcun:glTF格式详解(目录)​zhuanlan.zhihu.com
### 回答1: stk_gltf是一种用于加载和展示三维模型的文件格式。它是基于GLTF(GL Transmission Format)标准开发的,该标准是一种开放的、跨平台的三维模型交换格式。stk_gltf文件主要包含了描述模型的几何形状、材质、动画、节点层次结构等信息。 stk_gltf文件具有以下几个显著的特点:首先,它具有较小的文件大小,能够提供高效的网络传输和加载速度。同时,它支持透明、双面渲染、纹理贴图、光照、阴影等多种视觉效果,并且可以在不同平台和设备上无缝展示三维模型。此外,stk_gltf文件还支持动画效果的导入和播放,使得模型的运动和变化能够逼真地展现。 使用stk_gltf可以为设计师、工程师、游戏开发者等提供便利,因为他们能够通过该文件格式在各种应用中轻松共享和展示三维模型。比如,从设计软件导出的三维模型可以通过stk_gltf文件格式被加载到网页上,让用户能够在浏览器中直接查看和操作模型。此外,stk_gltf还能够与虚拟现实(VR)和增强现实(AR)技术结合使用,为用户提供更加沉浸式的交互体验。 总而言之,stk_gltf是一种以GLTF为基础的文件格式,用于加载、展示和共享三维模型。它具有较小的文件大小、高效的加载速度和广泛的兼容性,为用户提供了丰富的视觉效果和交互体验。在不同领域的应用中,stk_gltf都能发挥出它的优势,让用户能够更加方便地展示和交流三维模型。 ### 回答2: stk_gltf一个用于加载和显示gltf三维模型的库。gltf是一种基于json的开放标准,用于传输和显示三维模型。stk_gltf提供了使用glTF加载和渲染三维模型的功能,使得在Web、VR、AR等平台上展示三维模型变得简单和高效。 stk_gltf具有许多优点。首先,它支持各种文件格式,包括.glb、.gltf和各种二进制和图像文件。这使得开发者可以选择适合自己项目需求的文件格式。 其次,stk_gltf提供了强大的渲染功能。它支持PBR(基于物理的渲染)、法线贴图、光照、阴影和透明度等特性,使得渲染的三维模型能够呈现出逼真的效果。 此外,stk_gltf还具有良好的性能表现。它采用了一些优化策略,如资源缓存、异步加载等,以加快加载和渲染过程,提升应用的性能和用户体验。 stk_gltf还支持动画和用户交互。它可以加载包含动画的glTF模型,并提供了控制动画播放和交互行为的接口,使得开发者可以实现各种动态效果和互动功能。 总而言之,stk_gltf一个功能强大、灵活易用的库,它提供了加载和渲染gltf三维模型的能力,同时兼容各种平台和文件格式。使用stk_gltf,开发者可以轻松展示逼真的三维模型,为用户带来更好的视觉体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值