Пример #1
0
    /*
    ==============================
    ==============================
    */
    void IKAModule::RenderLimb(View* view, mat4x3 transforms[3], float lengths[3], const vec4& color)
    {
        mat4x3 rotation = mat4x3(rotate(mat4(1.0f), 90.0f, vec3(0.0f, 1.0f, 0.0f)));

        mat4x3 translation0 = mat4x3(translate(mat4(1.0f), vec3(0.0f, 0.0f, lengths[0]*0.5f))); 
        mat4x3 translation1 = mat4x3(translate(mat4(1.0f), vec3(0.0f, 0.0f, lengths[1]*0.5f))); 
        mat4x3 translation2 = mat4x3(translate(mat4(1.0f), vec3(0.0f, 0.0f, lengths[2]*0.5f))); 

        view->GetShape()->DrawPyramid(transforms[0]*rotation*translation0, vec3(0.1f, 0.1f, lengths[0]), color);
        view->GetShape()->DrawPyramid(transforms[1]*rotation*translation1, vec3(0.1f, 0.1f, lengths[1]), color);
        view->GetShape()->DrawPyramid(transforms[2]*rotation*translation2, vec3(0.1f, 0.1f, lengths[2]), color);
    }
Пример #2
0
    mat4x3 mult(const mat4x3& lhs, const mat4x3& rhs) {
        vec3 lrx(lhs[0].x, lhs[1].x, lhs[2].x);
        vec3 lry(lhs[0].y, lhs[1].y, lhs[2].y);
        vec3 lrz(lhs[0].z, lhs[1].z, lhs[2].z);
        return mat4x3(
            dot(lrx, rhs[0]),
            dot(lry, rhs[0]),
            dot(lrz, rhs[0]),

            dot(lrx, rhs[1]),
            dot(lry, rhs[1]),
            dot(lrz, rhs[1]),

            dot(lrx, rhs[2]),
            dot(lry, rhs[2]),
            dot(lrz, rhs[2]),

            dot(lrx, rhs[3]) + lhs[3].x,
            dot(lry, rhs[3]) + lhs[3].y,
            dot(lrz, rhs[3]) + lhs[3].z
       );
    }