示例#1
0
NODE_IMPLEMENTATION(transpose_mXX, Pointer)
{
    FixedArray*  Aarray = NODE_ARG_OBJECT(0, FixedArray);
    const Class* mtype  = static_cast<const Class*>(Aarray->type());
    FixedArray*  Carray = static_cast<FixedArray*>(ClassInstance::allocate(mtype));

    EigenMatXf A(Aarray->data<float>(), Aarray->size(0), Aarray->size(1));
    EigenMatXf C(Carray->data<float>(), Aarray->size(0), Aarray->size(1));

    C = A.transpose();
    NODE_RETURN(Carray);
}
示例#2
0
NODE_IMPLEMENTATION(inverse_m44, Pointer)
{
    FixedArray*  Aarray = NODE_ARG_OBJECT(0, FixedArray);
    const Class* mtype  = static_cast<const Class*>(Aarray->type());
    FixedArray*  Carray = static_cast<FixedArray*>(ClassInstance::allocate(mtype));

    EigenMat44f A(Aarray->data<float>());
    EigenMat44f C(Carray->data<float>());

    C = A.inverse();
    NODE_RETURN(Carray);
}
示例#3
0
NODE_IMPLEMENTATION(mult_m33_m33, Pointer)
{
    FixedArray*  Aarray = NODE_ARG_OBJECT(0, FixedArray);
    FixedArray*  Barray = NODE_ARG_OBJECT(1, FixedArray);
    const Class* mtype  = static_cast<const Class*>(Aarray->type());
    FixedArray*  Carray = static_cast<FixedArray*>(ClassInstance::allocate(mtype));

    EigenMat33f A(Aarray->data<float>());
    EigenMat33f B(Barray->data<float>());
    EigenMat33f C(Carray->data<float>());

    C = A * B;
    NODE_RETURN(Carray);
}
示例#4
0
NODE_IMPLEMENTATION(mult_m44_v3, Vector3f)
{
    FixedArray*  Aarray = NODE_ARG_OBJECT(0, FixedArray);
    Mu::Vector3f v      = NODE_ARG(1, Mu::Vector3f);
    const Class* mtype  = static_cast<const Class*>(Aarray->type());

    const float* m = Aarray->data<float>();

    float x = m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3];
    float y = m[4] * v[0] + m[5] * v[1] + m[6] * v[2] + m[7];
    float z = m[8] * v[0] + m[9] * v[1] + m[10] * v[2] + m[11];
    float w = m[12] * v[0] + m[13] * v[1] + m[14] * v[2] + m[15];

    NODE_RETURN(newVector(x / w, y / w, z / w));
}
示例#5
0
NODE_IMPLEMENTATION(mult_m44_v4, Vector4f)
{
    FixedArray*  Aarray = NODE_ARG_OBJECT(0, FixedArray);
    Mu::Vector4f v      = NODE_ARG(1, Mu::Vector4f);
    const Class* mtype  = static_cast<const Class*>(Aarray->type());

    const float* m = Aarray->data<float>();

    Vector4f r = 
        newVector( m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3] * v[3],
                   m[4] * v[0] + m[5] * v[1] + m[6] * v[2] + m[7] * v[3],
                   m[8] * v[0] + m[9] * v[1] + m[10] * v[2] + m[11] * v[3],
                   m[12] * v[0] + m[13] * v[1] + m[14] * v[2] + m[15] * v[3] );

    NODE_RETURN(r);
}