百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

glTF入门——动画(gltf fbx)

zhezhongyun 2025-07-21 19:03 24 浏览


下面的文件是在最小gltf文件基础上增加了动画,表示的是上图所示的一个旋转的三角形,针对动画部分添加了注释

{
  "scene": 0,
  "scenes" : [
    {
      "nodes" : [ 0 ]
    }
  ],
  
  "nodes" : [
    {
      "mesh" : 0,
      // rotation属性是使用4元数表示的旋转,[0,0,0,1]表示旋转角度为0°,即没有任何旋转,这里不对四元数做相关说明,后续文章再单独介绍
      "rotation" : [ 0.0, 0.0, 0.0, 1.0 ]
    }
  ],
  
  "meshes" : [
    {
      "primitives" : [ {
        "attributes" : {
          "POSITION" : 1
        },
        "indices" : 0
      } ]
    }
  ],
  //该属性定义动画内容
  "animations": [
    {
      //表示动画数据来源
      "samplers" : [
        {
          //input对应accessors,2表示第2个序列数据,这个数据对应5个时间节点
          "input" : 2,
          //动画数据只是关键帧,interpolation定义了中间过渡动画插值方法,LINEAR表示采用线性插值
          "interpolation" : "LINEAR",
          //input对应accessors,3表示第3个序列数据,这个数据对应5个四元数表示的旋转
          "output" : 3
        }
      ],
      //通道,动画可以包含多个通道,每个通道一般都是简单的动画,多个通道组合可以产生复杂的动画效果
      "channels" : [ {
        //对应samplers[0]
        "sampler" : 0,
        //指定动画的目标对应
        "target" : {
          //对应nodes[0]
          "node" : 0,
          //这里表示nodes[0]中的rotation属性应该被执行
          "path" : "rotation"
        }
      } ]
    }
  ],

  "buffers" : [
    {
      "uri" : "data:application/octet-stream;base64,AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAA=",
      "byteLength" : 44
    },
    //buffers[1]表示的旋转相关的数据,响应的解码后的十六进制见后面截图,共100个字节
    {
      "uri" : "data:application/octet-stream;base64,AAAAAAAAgD4AAAA/AABAPwAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAD0/TQ/9P00PwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAPT9ND/0/TS/AAAAAAAAAAAAAAAAAACAPw==",
      "byteLength" : 100
    }
  ],
  "bufferViews" : [
    {
      "buffer" : 0,
      "byteOffset" : 0,
      "byteLength" : 6,
      "target" : 34963
    },
    {
      "buffer" : 0,
      "byteOffset" : 8,
      "byteLength" : 36,
      "target" : 34962
    },
    // 对应buffers[1],字节长度为100
    {
      "buffer" : 1,
      "byteOffset" : 0,
      "byteLength" : 100
    }
  ],
  "accessors" : [
    {
      "bufferView" : 0,
      "byteOffset" : 0,
      "componentType" : 5123,
      "count" : 3,
      "type" : "SCALAR",
      "max" : [ 2 ],
      "min" : [ 0 ]
    },
    {
      "bufferView" : 1,
      "byteOffset" : 0,
      "componentType" : 5126,
      "count" : 3,
      "type" : "VEC3",
      "max" : [ 1.0, 1.0, 0.0 ],
      "min" : [ 0.0, 0.0, 0.0 ]
    },    
    {
	  //对应bufferViews[2]
      "bufferView" : 2,
      //起始偏移量为0
      "byteOffset" : 0,
      //5126表示数据类型为FLOAT,占用4个字节
      "componentType" : 5126,
      //有5组数据,共占用5x4=20字节,每个数据表示一个时间点
      "count" : 5,
      //数据为标量
      "type" : "SCALAR",
      "max" : [ 1.0 ],
      "min" : [ 0.0 ]
    },    
    {
      //对应bufferViews[2]
      "bufferView" : 2,
      //起始偏移量为20
      "byteOffset" : 20,
      //5126表示数据类型为FLOAT,占用4个字节
      "componentType" : 5126,
      //有5组数据,共占用5x(4x4)=80字节,每个数据对应一个四元数,表示对应时间点旋转的角度
      "count" : 5,
      //数据为VEC4向量,使用4元数来表示旋转
      "type" : "VEC4",
      "max" : [ 0.0, 0.0, 1.0, 1.0 ],
      "min" : [ 0.0, 0.0, 0.0, -0.707 ]
    }
  ],
  
  "asset" : {
    "version" : "2.0"
  }
  
}

buffers[1][uri]base64解码后的十六进制表示,其中每四个字节表示一个浮点数,通过使用在线工具可以将它们转换为浮点数,由此得到一组旋转动画关键帧数据

时间

四元数

说明

0.0

(0.0, 0.0, 0.0, 1.0 )

在0.0秒,三角形旋转0°

0.25

(0.0, 0.0, 0.707, 0.707)

在0.25秒,三角形沿z轴旋转90°

0.5

(0.0, 0.0, 1.0, 0.0)

在0.5秒,三角形沿z轴旋转180°

0.75

(0.0, 0.0, 0.707, -0.707)

在0.75秒,三角形沿z轴旋转270°

1.0

(0.0, 0.0, 0.0, 1.0)

在1.0秒,三角形沿z轴旋转360°

相关推荐

Opinion丨Struggle Against U.S. Mind colonization in the Global South

Editor'snote:Thismonth,XinhuaNewsAgency'sThinkTankreleasedareporttitled"Colonizationof...

爱可可AI论文推介(2020.11.4)_爱可可女装旗舰店

LG-机器学习CV-计算机视觉CL-计算与语言AS-音频与语音RO-机器人(*表示值得重点关注)1、[LG]*CombiningLabelPropagationan...

何新:罗马伪史考英文版序言_罗马史学

2019-10-2514:48:27何新:罗马伪史考序言(英文译本)HeXin:PreambleofResearchonPseudo-historyofRome1Afewyear...

XPeng Stock Rises Over 4% after Q2 Revenue and EV Margin Set Records

TMTPOST--TheAmericandepositaryreceipts(ADRs)ofXPengInc.rosearound4.2%onTuesdayaftert...

英汉世界语部首(八)_英文部首字典

本节讲八个部首,分别是:弓gōng【ECWLrad】bow廾gǒng【ECWLrad】twen广guǎng【ECWLrad】vast己jǐ【ECWLrad】self已yǐ...

一课译词:划水_划水是什么地方的方言

[Photo/SIPA]懒惰是人类的天性,因此才总有人会在工作时“划水”。“划水【huáshuǐ】”,本意是指“用胳膊划的动作(makestrokeswithone’sarms)”,延伸为“...

首测!GPT-4o做Code Review可行吗?

编辑|言征出品|51CTO技术栈(微信号:blog51cto)近日,OpenAI一记重拳,推出了GPT-4o(“o”表示“omni”),将语音识别和对话方面的优势展示的淋漓尽致。几乎可以肯定,...

C++|漫谈STL细节及内部原理_c++ stl详解

1988年,AlexanderStepanov开始进入惠普的PaloAlto实验室工作,在随后的4年中,他从事的是有关磁盘驱动器方面的工作。直到1992年,由于参加并主持了实验室主任BillWo...

C++ inline关键字深度解析:不止于优化的头文件定义许可

在C++开发中,几乎每个程序员都用过inline关键字,但多数人只停留在“内联优化”的表层理解。事实上,inline的真正威力在于它打破了C++的单一定义规则(ODR)限制,成为头文件中安全定义函数的...

实用 | 10分钟教你搭建一个嵌入式web服务器

之前分享的文章中提到了几种可以在嵌入式中使用的web服务器。嵌入式web服务器就是把web服务器移植到嵌入式系统的服务器。它仍然是基于http文本协议进行通信的,具有标准的接口形式,对客户端...

中间语言格式_中间格式文本是什么

在通常情况下,编译器会将目标语言转换成某种中间语言格式,而不是直接将源代码转换成二进制机器指令,不少c语言编译器,都会将代码编译成汇编语言,然后再通过汇编语言编译器将汇编代码转换成目标机器可执行的二进...

一线开发大牛带你深度解析探讨模板解释器,解释器的生成

解释器生成解释器的机器代码片段都是在TemplateInterpreterGenerator::generate_all()中生成的,下面将分小节详细展示该函数的具体细节,以及解释器某个组件的机器代码...

干货,Web开发和前端开发逆天工具大全

微信ID:WEB_wysj(点击关注)◎◎◎◎◎◎◎◎◎一┳═┻︻▄(点击页底“阅读原文”前往下载)●●●逆天工具CDN资源库国内Bootstrap中文网开源项目免费CDN服务36...

移动端rem+vw适配_移动端web页面适配方案

rem:rem是相对单位,设置根元素html的font-size,比如给html设置字体大小为100px,1rem=100px;rem缺点:1.和根元素font-size值强耦合,系统字...

从零搭建 React 开发 H5 模板_react html5

项目创建创建项目文件夹mkdir react-democd react-demonpm init -y依赖安装yarn add rea...