You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

glTF三次样条曲线中内外切线的视觉含义及贝塞尔控制点构建方法

glTF三次样条插值与传统贝塞尔曲线的对应关系

glTF中的关键帧动画支持“三次样条”插值,其规范描述如下(已添加重点标记):

定义:
n为关键帧总数,n>0;
tk为第k个关键帧的时间戳,k ∈ [1,n];
vk为第k个关键帧的动画属性值;
tc为当前(请求的)时间戳,满足tk<tc<tk+1;
*td = tk+1 − tk*为插值段的时长
*t = (tc − tk) / td*为归一化后的插值因子。

动画采样器中存储的每个时间戳都对应三个关键帧值:
内切线、属性值和外切线。

设ak、vk、bk分别为第k帧的内切线、属性值和外切线。

时间戳*tc处的插值采样值vt*计算方式如下:

vt = (2t3 − 3t2 + 1) × vk + td(t3−2t2+t) × bk + (−2t3+3t2) × vk+1 + td(t3−t2) × ak+1

传统二维三次贝塞尔曲线中,每个顶点和切线都有二维坐标。
展示控制点和计算曲线的二维三次贝塞尔曲线

但glTF规范将内、外切线与它们之间的顶点关联到同一时间戳。在传统曲线中,这会对应图中的垂直段,显然不合理——因为关键帧图是时间-值关系,垂直线段意味着同一时间对应多个值,存在歧义。

曲线中间顶点与控制点垂直对齐的二维三次贝塞尔曲线,显示曲线的垂直段

我的问题是:这些切线值在传统三次贝塞尔样条中代表什么?或者更明确地说:

给定每个关键帧的切线值,如何构建贝塞尔曲线的控制点,以准确呈现上述公式生成的时间-值曲线?


更新:我制作了Desmos图表来执行上述计算并测试曲线。我发现切线值似乎不代表实际目标值,而是作为关键帧值的偏移量:

  • 曲线从*vk出发,向vk + bk*方向延伸
  • 曲线终止于vk+1,途中向*vk+1 - ak+1*方向延伸

通过实验绘制匹配Desmos曲线的贝塞尔曲线,发现控制点的时间值应始终为t=1/3和t=2/3(与相关问题的回答猜测一致)。

我仍在寻找包含td的公式,但已有进展:当td = 3时,控制点似乎恰好位于*(0.333, vk + bk)和(0.666, vk+1 - ak+1)*,但这可能只是实验中的巧合。

内容的提问来源于stack exchange,提问作者Phrogz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:20:02