# HG changeset patch # User eugeni # Date 1203708709 0 # Node ID 9da3b0c393e6da0244ac4b4a4f155ef9af1a7b92 # Parent 93dcb01491cf5ab463fdda629620d01b10eb12c4 Better handling of behind-the-camera objects. Every point that is behind the camera is moved to the clipping plane by orthographic projection. It is obviously incorrect, but this is a very rare case, and proper clipping of Bezier curves is not that easy. diff -r 93dcb01491cf -r 9da3b0c393e6 libass/ass_render.c --- a/libass/ass_render.c Fri Feb 22 19:31:47 2008 +0000 +++ b/libass/ass_render.c Fri Feb 22 19:31:49 2008 +0000 @@ -1623,6 +1623,7 @@ */ static inline void transform_vector_3d(FT_Vector* v, double *m) { const double camera = 2500 * frame_context.border_scale; // camera distance + const double cutoff_z = 10.; double a[4], b[4]; a[0] = d6_to_double(v->x); a[1] = d6_to_double(v->y); @@ -1641,8 +1642,8 @@ b[0] *= camera; b[1] *= camera; b[3] = 8 * b[2] + camera; - if (b[3] < 0.001 && b[3] > -0.001) - b[3] = b[3] < 0. ? -0.001 : 0.001; + if (b[3] < cutoff_z) + b[3] = cutoff_z; v->x = double_to_d6(b[0] / b[3]); v->y = double_to_d6(b[1] / b[3]); }