diff --git a/manimlib/shaders/surface/vert.glsl b/manimlib/shaders/surface/vert.glsl index 96b85bf4..8937282a 100644 --- a/manimlib/shaders/surface/vert.glsl +++ b/manimlib/shaders/surface/vert.glsl @@ -11,8 +11,14 @@ out vec4 v_color; #INSERT get_unit_normal.glsl #INSERT finalize_color.glsl +const float EPSILON = 1e-10; + void main(){ emit_gl_Position(point); - vec3 normal = cross(normalize(du_point - point), normalize(dv_point - point)); - v_color = finalize_color(rgba, point, normalize(normal)); + vec3 du = (du_point - point); + vec3 dv = (dv_point - point); + vec3 normal = cross(du, dv); + float mag = length(normal); + vec3 unit_normal = (mag < EPSILON) ? vec3(0, 0, sign(point.z)) : normal / mag; + v_color = finalize_color(rgba, point, unit_normal); } \ No newline at end of file