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); }
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); }
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); }
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)); }
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); }