It doesn't work perfectly for spherical curvature, but reasaonably enough
with values that are likely to be of practical use.
sin_ksv = monitor->keystone_vertical/sqrt(1.0f+monitor->keystone_vertical*monitor->keystone_vertical);
cos_ksv = sqrt(1.0f-sin_ksv*sin_ksv);
distance = monitor->perspective+sin_ksv*((sin_ksv>0)-monitor->vertical_center)/aspect;
+ if(monitor->curvature_depth<0)
+ distance += -monitor->curvature_depth;
eye[0] = 0.0f;
eye[1] = (monitor->vertical_center-0.5f)/aspect+sin_ksv*distance;