我正在使用 C 和 OpenGL。我正在尝试加载带有骨骼动画的 3D 模型,但我似乎无法为动画的每一帧计算每个骨骼的绝对矩阵。
我有:对于每个骨骼,我有一个矩阵和一个逆矩阵,对于动画的每一帧,我有一个旋转(欧拉)和平移。
Blender 导入/导出脚本:
http://pastebin.com/xMJ2fG26
http://pastebin.com/9D42RKRf
编辑:如果有人知道如何使用 blender 获取骨骼的绝对矩阵并将其导出,那也很好(我是 blender 的新手)
for each frame f
for each bone i
glLoadIdentity();
glMultMatrixd(bones[i].matrix);
for each parent bone ii(starting from the top)
glTranslated(bones[ii].translation[f].x, bones[ii].translation[f].y, bones[ii].translation[f].z);
glRotated(bones[ii].degrees[f].z, 0.0, 0.0, 1.0);
glRotated(bones[ii].degrees[f].x, 1.0, 0.0, 0.0);
glRotated(bones[ii].degrees[f].y, 0.0, 1.0, 0.0);
glMultMatrixd(bones[i].inversematrix);
glGetDoublev(GL_PROJECTION_MATRIX, bones[i].absmatrix[f]);
这些脚本看起来像是为过时的 2.4*x* 版本的 Blender 编写的。对于 2.5*x*/2.6*x*,您有一个大大改进的 Python API,其中包括 Bone具有“matrix”和“matrix_local”属性的对象。
我建议您尝试使用当前版本的 Blender 做您想做的事。以这种方式将头撞到砖墙上的可能性要小得多。
我是一名优秀的程序员,十分优秀!