pub fn nurbs_evaluate_surface(
    u_order: i32,
    u_knot: &[Float],
    ucp: i32,
    u: Float,
    v_order: i32,
    v_knot: &[Float],
    vcp: i32,
    v: Float,
    cp: &[Homogeneous3],
    dpdu_opt: Option<&mut Vector3f>,
    dpdv_opt: Option<&mut Vector3f>
) -> Point3f