private RigidBodyModel readRigidBody(JsonValue bodyElem) {
    RigidBodyModel rbModel = new RigidBodyModel();
    rbModel.name = bodyElem.getString("name");
    rbModel.imagePath = bodyElem.getString("imagePath");

    JsonValue originElem = bodyElem.get("origin");
    rbModel.ORIGIN.x = originElem.getFloat("x");
    rbModel.ORIGIN.y = originElem.getFloat("y");

    // polygons
    JsonValue polygonsElem = bodyElem.getChild("polygons");
    for (; polygonsElem != null; polygonsElem = polygonsElem.next()) {
      PolygonModel polygon = new PolygonModel();
      rbModel.POLYGONS.add(polygon);

      JsonValue vertexElem = polygonsElem.child();
      for (; vertexElem != null; vertexElem = vertexElem.next()) {
        float x = vertexElem.getFloat("x");
        float y = vertexElem.getFloat("y");
        polygon.VERTICES.add(new Vector2(x, y));
      }

      polygon.buffer = new Vector2[polygon.VERTICES.size()];
    }

    // circles
    JsonValue circleElem = bodyElem.getChild("circles");

    for (; circleElem != null; circleElem = circleElem.next()) {
      CircleModel circle = new CircleModel();
      rbModel.CIRCLES.add(circle);

      circle.CENTER.x = circleElem.getFloat("cx");
      circle.CENTER.y = circleElem.getFloat("cy");
      circle.radius = circleElem.getFloat("r");
    }

    return rbModel;
  }