function rotateVertical(camera, angle) {
  const position = camera.position;
  if (
    defined(camera.constrainedAxis) &&
    !Cartesian3.equalsEpsilon(
      camera.position,
      Cartesian3.ZERO,
      CesiumMath.EPSILON2,
    )
  ) {
    const p = Cartesian3.normalize(position, rotateVertScratchP);
    const northParallel = Cartesian3.equalsEpsilon(
      p,
      camera.constrainedAxis,
      CesiumMath.EPSILON2,
    );
    const southParallel = Cartesian3.equalsEpsilon(
      p,
      Cartesian3.negate(camera.constrainedAxis, rotateVertScratchNegate),
      CesiumMath.EPSILON2,
    );
    if (!northParallel && !southParallel) {
      const constrainedAxis = Cartesian3.normalize(
        camera.constrainedAxis,
        rotateVertScratchA,
      );

      let dot = Cartesian3.dot(p, constrainedAxis);
      let angleToAxis = CesiumMath.acosClamped(dot);
      if (angle > 0 && angle > angleToAxis) {
        angle = angleToAxis - CesiumMath.EPSILON4;
      }

      dot = Cartesian3.dot(
        p,
        Cartesian3.negate(constrainedAxis, rotateVertScratchNegate),
      );
      angleToAxis = CesiumMath.acosClamped(dot);
      if (angle < 0 && -angle > angleToAxis) {
        angle = -angleToAxis + CesiumMath.EPSILON4;
      }

      const tangent = Cartesian3.cross(
        constrainedAxis,
        p,
        rotateVertScratchTan,
      );
      camera.rotate(tangent, angle);
    } else if ((northParallel && angle < 0) || (southParallel && angle > 0)) {
      camera.rotate(camera.right, angle);
    }
  } else {
    camera.rotate(camera.right, angle);
  }
}
Rotates the camera around the center of the camera's reference frame by angle upwards.

@param {number} [angle] The angle, in radians, to rotate by. Defaults to <code>defaultRotateAmount</code>.

@see Camera#rotateDown
@see Camera#rotate