我对骨骼动画感到困惑。我已经阅读了一些相关内容,但仍有一件事我不明白。这是我的结论:
我看到了3种用骨骼来给网格添加动画的方式:
1. 我有一个包含顶点、顶点缓冲区、索引缓冲区、纹理着色器和变换矩阵的网格类。我可以为每个骨骼使用一个类,并添加权重,这样很容易对模型进行动画处理。但这意味着使用了太多内存,因为某些存储的东西只需要使用一次。
2. 使用顶点着色器。在输入顶点参数中添加权重和骨骼索引,并使用矩阵数组作为全局变量,所以在着色器中我只需要使用骨骼的矩阵即可。这个解决方案对我来说似乎更有效,但我记得在DirectX 11教程(来自Rastertek)中他说HLSL应该很快,因为它被频繁使用,我认为这会太重了。无论如何,这是我将尝试的解决方案,至少要知道是否有效。
3. 对于每个骨骼使用矩阵和逆矩阵。据我所知,这是正确的方式。但这是我不理解的方式。为什么要在这里使用矩阵逆?矩阵如何与顶点“链接”?我的意思是,如果我移动右手骨骼的矩阵,那么只有右手顶点会被使用?
所以我的问题是:
1. 第二种方法可行吗?对于某些网格和动画,它是否会过于重?
2. 有人能解释一下矩阵如何与顶点相关联,为什么要使用矩阵逆?或者给我提供关于这方面的信息。
希望你能理解我的问题,因为我不确定我解释得清楚。请原谅我的英语,我尽力了。谢谢。
1. 我有一个包含顶点、顶点缓冲区、索引缓冲区、纹理着色器和变换矩阵的网格类。我可以为每个骨骼使用一个类,并添加权重,这样很容易对模型进行动画处理。但这意味着使用了太多内存,因为某些存储的东西只需要使用一次。
2. 使用顶点着色器。在输入顶点参数中添加权重和骨骼索引,并使用矩阵数组作为全局变量,所以在着色器中我只需要使用骨骼的矩阵即可。这个解决方案对我来说似乎更有效,但我记得在DirectX 11教程(来自Rastertek)中他说HLSL应该很快,因为它被频繁使用,我认为这会太重了。无论如何,这是我将尝试的解决方案,至少要知道是否有效。
3. 对于每个骨骼使用矩阵和逆矩阵。据我所知,这是正确的方式。但这是我不理解的方式。为什么要在这里使用矩阵逆?矩阵如何与顶点“链接”?我的意思是,如果我移动右手骨骼的矩阵,那么只有右手顶点会被使用?
所以我的问题是:
1. 第二种方法可行吗?对于某些网格和动画,它是否会过于重?
2. 有人能解释一下矩阵如何与顶点相关联,为什么要使用矩阵逆?或者给我提供关于这方面的信息。
希望你能理解我的问题,因为我不确定我解释得清楚。请原谅我的英语,我尽力了。谢谢。