B-splines are polynomial curves used for modeling curves and surfaces. They consist of curve segments whose polynomial coefficients depend on a few control points, allowing for local control of the shape. B-splines provide smooth joins between segments and have higher continuity than other curves like Bezier or Hermite curves. The shape of a B-spline is constrained within the convex hull of its control points. Knots divide the curve into segments and affect the smoothness. Uniform and non-uniform B-splines as well as manipulating knots and control points to control the shape are discussed.