问题标签 [skeletal-animation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
81 浏览

kinect - 肩关节之间的距离是否会随着骨骼流中身体的运动而变化

我想使用 KINECT-2.0 测量身体的肩长,但我不知道它通过哪个比率显示输出。如果它在流中显然发生了变化,那么我该如何测量它?

0 投票
0 回答
683 浏览

java - android中的骨骼动画与opengl

我正在尝试在 android 中使用 opengl es2 实现骨骼动画。我创建了一个 Joint 类,它存储 Bind 姿势的旋转、位置、局部矩阵、世界矩阵和反向绑定姿势矩阵,以及一个 JointState 类,它具有每个关键帧的数据,包括旋转、位置、局部矩阵、世界矩阵和偏移量矩阵。一切看起来都很好,但我的渲染给出了意想不到的结果。我附上了代码。请帮忙

联合班

联合状态类

在此处输入图像描述在此处输入图像描述 在第20 帧 绑定对象对象的姿势状态

我得到的结果

在此处输入图像描述

我正确的默认形状

在此处输入图像描述

变形的框架 20 形状,我想修复。

着色器代码如下

顶点着色器

片段着色器

0 投票
1 回答
1175 浏览

c++ - Assimp Skinning 全局变换

我目前正在使用 ASSIMP 库在我的 3D OpenGL 游戏引擎中实现骨骼动画,不幸的是它并没有那么好。我目前面临的问题是连接的骨骼变换(骨骼之间的父子关系)只有在只有一个父级被变换时才能正确运行。

发生的情况是大腿的骨骼变换是在全局轴而不是骨盆的局部轴上进行的。

这是我的骨架类:

这是我用来计算每个骨骼的世界变换的函数:

在我的 Mesh 类中,我有这个函数 UpdateSkeleton():

谢谢!

0 投票
0 回答
506 浏览

animation - 逆运动学:如何参数化球窝接头?

我正在学习逆运动学,并正在尝试编写人体骨骼模拟。我无法决定如何参数化球窝接头的旋转。

我能想到的两种方法:

  1. 熟悉的轴角(或欧拉角)方式。可以通过改变旋转顺序来改变关节的特性。也可以只使用旋转矩阵。 在此处输入图像描述
  2. 使用两个四元数旋转,一个沿着骨骼的轴,一个确定方向。我认为这在模拟关节方面更直观在此处输入图像描述

那么我应该使用哪一个?据我所知:

  • 轴角法容易出现云台锁,我可以想象
  • 对于另一种方法,在计算雅可比项时应该使用哪些轴是模棱两可的——v这个方程中的向量 在此处输入图像描述

(来源:https ://www.math.ucsd.edu/~sbuss/ResearchWeb/ikmethods/iksurvey.pdf ,第 5 页)

我倾向于使用第二种方法,因为我可以通过使用 CCD 而不是雅可比伪逆来解决这个问题。但我只想知道这些方法中的哪一种被用作标准(轴角或四元数),如果是这样,如果我要采用它,我需要考虑哪些具体细节。

任何建议都会有所帮助,但最好是专业的,并且使用非深奥的语言,如果您愿意节省一些代码:-]

0 投票
1 回答
1771 浏览

javascript - 将 Three.js 骨骼动画更新到基于混合器的新系统

混音器系统是在 r73 中引入的,从那时起我一直在尝试将我的游戏更新到这个新系统。

我几乎在那里,除了一件事。具有某些几何形状的某些动画的交叉淡入淡出有轻微的延迟,这在 r72 中不存在。我破解了 r72 的 BlendCharacter 和 Animation 函数以允许回调,并且效果很好。在 73 中,如果它通过事件触发器内置了此功能,则没有必要这样做。

在下面的小提琴中,一切都按预期工作(r72)。

http://jsfiddle.net/titansoftime/a93w5hw0/

这个(r78)几乎可以正常工作,除了一个动画(魔法攻击)在返回空闲动画之前有一个小但明显的延迟。在其他模型上是近战动画,在某些模型上根本没有问题。超级困惑,因为它们都在 72 中正常工作。

http://jsfiddle.net/titansoftime/2sh95etj/

为什么会这样?

更新:我注意到这个问题不仅限于动画之间的混合。我刚刚循环播放的动画之一现在有延迟!

72:http: //jsfiddle.net/titansoftime/8v0pasp5/

78:http: //jsfiddle.net/titansoftime/n6apnj3z/

到底是怎么回事!?72 中是否有某种自动更正行为或类似的东西已被删除?

0 投票
1 回答
409 浏览

c++ - Assimp 访问 aiNode 名称时出错

我正在尝试使用 assimp 加载动画网格(骨架),但我遇到了一些问题。

当我尝试访问 (root Node)aiNode*的名称时,程序崩溃了。在 Visual Studio 的输出中,它说它无法读取字符串字符。

(我正在关注本教程。)

0 投票
0 回答
2174 浏览

c++ - 使用 Assimp 和 OpenGL 的骨骼动画

最近,我一直在使用 Assimp 库在 OpenGL 中加载和播放骨骼动画,遵循一些不同的教程/资源,例如OglDevEphenation OpenGL。我仍然不是 100% 确定我知道它是如何工作的,所以澄清一下:

  • 关键帧从aiNodeAnim's 的mChannels成员中加载aiAnimation
  • 这些关键帧用于生成每个骨骼矩阵,表示骨骼从其父骨骼的转换
  • 每个骨骼的矩阵乘以它的父矩阵
  • 然后将该矩阵乘以相应骨骼的偏移矩阵,从aiMesh->mBones[BONE]->mOffsetMatrix。这样,从关键帧生成的骨骼矩阵可以替换该骨骼的绑定姿势的默认变换
  • 绘制时在顶点着色器中使用这个最终矩阵(每个骨骼一个)

我的问题的第一部分:这是正确的吗?据我所知,假设我的理解是正确的,它应该在逻辑上起作用。我还没有看到任何反对这一点的来源/帖子/问题。

我已经编写了一个实现(在 C++ 中),但它并没有像我预期的那样工作。部分网格看起来像他们应该的样子,甚至处于预期的姿势,但大部分网格看起来都皱巴巴的。大部分是可区分的,我可以识别大部分网格,但似乎大多数骨骼矩阵都不正确。当我在搅拌机中打开我的模型时,所有关键帧都是正确的,并且模型动画完美。我会发布我的应用程序的屏幕截图,但我没有地方可以这样做(我没有 imageshack 帐户或任何东西。)

有什么理由为什么只有一些骨头会起作用而其他骨头不起作用?

以下是我的代码中最有问题的部分。我的jawSkeleton课程基于ModelLearnOpenGL.com 的课程。(忽略jaw前缀,这是我做的私人事情。)

类原型,在jawSkeleton.h

加载关键帧数据,在jawSkeleton.cpp

准备各个矩阵,在jawSkeletal.cpp

我做了一些其他未显示的事情,例如递归地将每个骨骼的矩阵乘以其父矩阵,然后将它们乘以它们的偏移矩阵。当我使用单位矩阵代替单个骨骼矩阵时,网格是以其正常绑定姿势绘制的,所以我几乎可以肯定这不是网格导入问题。正如我所说,部分网格看起来是正确的,所以我猜这也不是蒙皮问题。我已经研究这个问题大约一个星期了。有什么线索吗?任何帮助表示赞赏。

0 投票
0 回答
658 浏览

javascript - 三.js 骨骼方向错误

我正在加载一个three.js 蒙皮和装配模型,以及一个bvh mocap 动画文件。

当我尝试将 bvh 动画应用于模型时,某些骨骼的方向错误:

错误的骨骼方向

如您所见,手臂的方向是错误的。

这就是我加载模型和 bvh 文件的方式:

bvh 文件和模型文件具有完全相同的骨架。你知道它是从哪里来的吗?

谢谢

0 投票
1 回答
1441 浏览

assimp - 骨骼动画:如何手动导出 Assimp 骨骼偏移矩阵

我正在从http://ogldev.atspace.co.uk/www/tutorial38/tutorial38.html完成本教程 不幸的是,它没有解释 Assimp 如何获得它的骨骼数据。我知道全局逆变换是一个默认的矩阵值混合器,用于将 y 值设置为 z 值,将 z 值设置为 -y。(或者至少这是我的测试 md5 模型使用的)

我试图了解 Assimp 如何从 MD5 文件中导出偏移矩阵或反向绑定姿势。例如BobLampClean.md5mesh有 32 个关节和 32 个偏移矩阵

根据我在网上看到的其他样本,他们计算偏移矩阵,它是这样的......

我已经输出了这些偏移矩阵中的每一个以与 Assimp 的骨骼矩阵进行比较,但无济于事。我不太确定我做错了什么......

编辑更新:好的,所以我的操作不正确,我正在调试一个不使用 Assimp 的工作代码示例,它可以复制与 Assimp 数据相同的值。我将更新如何正确计算数据。

0 投票
2 回答
348 浏览

android - OpenGL ES2 骨骼动画

“我尝试学习骨骼动画,所以我有很多误解” 我有一个从 Blender 导出的非常简单的 JSON 格式文件,其中一个立方体和一个骨骼仅旋转 4 帧,所以我加载了具有 4 个属性的 VBO,位置 vec4,正常 vec4、权重 vec2 和骨骼索引 vec2 正确渲染,骨骼有 pos、rotq 和 scale 所以我使用以下函数创建骨骼的变换矩阵

所以我计算骨骼最终矩阵,将绑定乘以它的逆“据我所知”对于每一帧我将此矩阵乘以关键帧矩阵,该矩阵也是我通过前一种方法从 pos、rotq 和 scl 生成的,最后我上传这些矩阵通过 mat4[] 统一到 GPU,这是顶点着色器

当渲染结果出乎意料时,一些面会消失并且随机顶点移动。 渲染动画 在此处输入图像描述