我正在使用C和OpenGL。我正在尝试加载一个带有骨骼动画的3D模型,但我似乎无法计算动画每一帧的每一块骨骼的绝对矩阵。
我有:对于每个骨骼,我有一个矩阵和一个逆矩阵,对于动画的每一帧,我有每个骨骼的旋转(Euler)和平移。
混合器导入/导出脚本:
编辑:如果有人知道如何用blender获得骨骼的绝对矩阵并导出它,那也没问题(我是Blender的新手)
for each frame f
for each bone i
glLoadIdentity();
glMultMatrixd(bones[i].matrix);
for each
我尝试用下面的代码加载骨骼动画:
let file = Bundle.main.url(forResource: name, withExtension: "dae")
let source = SCNSceneSource(url: file!, options: nil)
let node = SCNNode()
for n in try! (source?.scene(options: nil).rootNode.childNodes)! as [SCNNode] {
node.addChildNode(n)
}
let animationIDs = sourc
首先,我使用的是OpenGL ES 1.1,而不是2.0,主要是因为我花了相当多的时间学习1.0/1.1,并且对它非常熟悉。
我花了一些时间来学习如何使用矩阵调色板来制作动画,在切换了项目的档次之后,我遇到了一个问题。
最初,我使用2和3骨骼动画,因为我需要某些顶点组的权重。现在..。在我正在工作的新项目中,我将制作更多机械的动画,所以不需要超过1块骨骼或重量。我仍然希望使用矩阵调色板,其中顶点对单个骨骼的权重为100%。但我想知道这是否会影响性能。相反,我可以将网格分成更小的部分,并在元素绘制调用之间进行简单的平移和旋转。当然,我关心的是性能。
我正在尝试在我的程序中添加动画。
我已经在Blender中创建了带有骨骼动画的人体模型,我可以跳过关键帧来查看模型的行走。
现在,我已经将模型导出为XML (Ogre3D)格式,在这个XML文件中,我可以看到在特定时间分配给每个骨骼的旋转、平移和缩放(t=0.00000、t=0.00040 ...等)
我所做的就是找出为每个骨骼指定了哪些顶点。现在我假设我需要做的就是将为骨骼定义的变换应用到这些顶点中的每一个。这是正确的方法吗?
在我的OpenGL draw()函数(粗略的伪代码)中:
for (Bone b : bones){
gl.glLoadIdentity();
Li