Exemplo n.º 1
0
void Joint::updateJointMatrix(const kmMat4& bindShape, kmVec4* matrixPalette)
{
    // Note: If more than one MeshSkin influences this Joint, we need to skip
    // the _jointMatrixDirty optimization since updateJointMatrix() may be
    // called multiple times a frame with different bindShape matrices (and
    // different matrixPallete pointers).
    if (_skin.next || _jointMatrixDirty)
    {
        _jointMatrixDirty = false;

        static kmMat4 t = mat4Identity;
		
        //Matrix::multiply(Node::getWorldMatrix(), getInverseBindPose(), &t);
        //Matrix::multiply(t, bindShape, &t);
		kmMat4Multiply(&t, &Node::getWorldMatrix(), &getInverseBindPose());
		kmMat4Multiply(&t, &t, &bindShape);

        GP_ASSERT(matrixPalette);
        //matrixPalette[0].set(t.m[0], t.m[4], t.m[8], t.m[12]);	
        //matrixPalette[1].set(t.m[1], t.m[5], t.m[9], t.m[13]);
        //matrixPalette[2].set(t.m[2], t.m[6], t.m[10], t.m[14]);
		kmVec4Fill(&matrixPalette[0], t.mat[0], t.mat[4], t.mat[8], t.mat[12]);
		kmVec4Fill(&matrixPalette[1], t.mat[1], t.mat[5], t.mat[9], t.mat[13]);
		kmVec4Fill(&matrixPalette[2], t.mat[2], t.mat[6], t.mat[10], t.mat[14]);
    }
}
Exemplo n.º 2
0
void Bone3D::updateJointMatrix(Vec4* matrixPalette)
{
    {
        static Mat4 t;
        Mat4::multiply(_world, getInverseBindPose(), &t);

        matrixPalette[0].set(t.m[0], t.m[4], t.m[8], t.m[12]);
        matrixPalette[1].set(t.m[1], t.m[5], t.m[9], t.m[13]);
        matrixPalette[2].set(t.m[2], t.m[6], t.m[10], t.m[14]);
    }
}
Exemplo n.º 3
0
void Joint::updateJointMatrix(const Matrix& bindShape, Vector4* matrixPalette)
{
    // Note: If more than one MeshSkin influences this Joint, we need to skip
    // the _jointMatrixDirty optimization since updateJointMatrix() may be
    // called multiple times a frame with different bindShape matrices (and
    // different matrixPallete pointers).
    if (_skinCount > 1 || _jointMatrixDirty)
    {
        _jointMatrixDirty = false;

        static Matrix t;
        Matrix::multiply(Node::getWorldMatrix(), getInverseBindPose(), &t);
        Matrix::multiply(t, bindShape, &t);

        GP_ASSERT(matrixPalette);
        matrixPalette[0].set(t.m[0], t.m[4], t.m[8], t.m[12]);
        matrixPalette[1].set(t.m[1], t.m[5], t.m[9], t.m[13]);
        matrixPalette[2].set(t.m[2], t.m[6], t.m[10], t.m[14]);
    }
}