/* ============================== ============================== */ 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); }
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 ); }