Ejemplo n.º 1
0
        Assimp.Quaternion nlerp(Assimp.Quaternion a, Assimp.Quaternion b, float blend)
        {
            //cout << a.w + a.x + a.y + a.z << endl;
            a.Normalize();
            b.Normalize();

            Assimp.Quaternion result;
            float             dot_product     = a.X * b.X + a.Y * b.Y + a.Z * b.Z + a.W * b.W;
            float             one_minus_blend = 1.0f - blend;

            if (dot_product < 0.0f)
            {
                result.X = a.X * one_minus_blend + blend * -b.X;
                result.Y = a.Y * one_minus_blend + blend * -b.Y;
                result.Z = a.Z * one_minus_blend + blend * -b.Z;
                result.W = a.W * one_minus_blend + blend * -b.W;
            }
            else
            {
                result.X = a.X * one_minus_blend + blend * b.X;
                result.Y = a.Y * one_minus_blend + blend * b.Y;
                result.Z = a.Z * one_minus_blend + blend * b.Z;
                result.W = a.W * one_minus_blend + blend * b.W;
            }
            result.Normalize();
            return(result);
        }