|
|
本人刚学习骨骼动画,有些问题还没搞清楚.
以下是我的理解,不知道对不对,希望高手指点一下:
1.在.x模型中,一块frame(骨骼)必有一个Mesh(可能为空),对吗?Mesh里的点坐标是相对世界的,还是相对于与它关联的frame的?
2.matrixOffset(骨骼偏移矩阵)的在哪里使用的,好象没看到?它是frame的绝对矩阵的逆矩阵?
3.子骨骼变换矩阵 * 初始网格中坐标 = 在父骨骼坐标系下的坐标对吗?
4.frame的transformationMatrix会改变吗?如果会,那它是由谁改变的?如果不会,那么每个骨骼的combinedTransformationMatrix肯定
也不变化吧!
5. 这是用来算各个frame在世界坐标系的矩阵转换的吗? (parentMatrix传入的是时间坐标系)
void CXFileEntity::UpdateFrameMatrices(const D3DXFRAME *frameBase, const D3DXMATRIX *parentMatrix)
{
D3DXFRAME_EXTENDED *currentFrame = (D3DXFRAME_EXTENDED*)frameBase;
// If parent matrix exists multiply our frame matrix by it
if (parentMatrix != NULL)
D3DXMatrixMultiply(&currentFrame->exCombinedTransformationMatrix, &currentFrame->TransformationMatrix, parentMatrix);
else
currentFrame->exCombinedTransformationMatrix = currentFrame->TransformationMatrix;
// If we have a sibling recurse
if (currentFrame->pFrameSibling != NULL)
UpdateFrameMatrices(currentFrame->pFrameSibling, parentMatrix);
// If we have a child recurse
if (currentFrame->pFrameFirstChild != NULL)
UpdateFrameMatrices(currentFrame->pFrameFirstChild, &currentFrame->exCombinedTransformationMatrix);
}
|
|