mirror of
https://github.com/3b1b/manim.git
synced 2025-08-05 16:49:03 +00:00
Finalize color at the vertex level, rather than the fragment level, for fill
This commit is contained in:
parent
a1b9eae301
commit
acb4b1c6b3
2 changed files with 10 additions and 14 deletions
|
@ -6,16 +6,12 @@ in vec4 color;
|
||||||
in float fill_all;
|
in float fill_all;
|
||||||
in float orientation;
|
in float orientation;
|
||||||
in vec2 uv_coords;
|
in vec2 uv_coords;
|
||||||
in vec3 point;
|
|
||||||
in vec3 unit_normal;
|
|
||||||
|
|
||||||
out vec4 frag_color;
|
out vec4 frag_color;
|
||||||
|
|
||||||
#INSERT finalize_color.glsl
|
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
if (color.a == 0) discard;
|
if (color.a == 0) discard;
|
||||||
frag_color = finalize_color(color, point, unit_normal);
|
frag_color = color;
|
||||||
/*
|
/*
|
||||||
We want negatively oriented triangles to be canceled with positively
|
We want negatively oriented triangles to be canceled with positively
|
||||||
oriented ones. The easiest way to do this is to give them negative alpha,
|
oriented ones. The easiest way to do this is to give them negative alpha,
|
||||||
|
@ -33,9 +29,11 @@ void main() {
|
||||||
cap is to make sure the original fragment color can be recovered even after
|
cap is to make sure the original fragment color can be recovered even after
|
||||||
blending with an (alpha = 1) color.
|
blending with an (alpha = 1) color.
|
||||||
*/
|
*/
|
||||||
float a = 0.95 * frag_color.a;
|
if(winding){
|
||||||
if(winding && orientation < 0) a = -a / (1 - a);
|
float a = 0.95 * frag_color.a;
|
||||||
frag_color.a = a;
|
if(orientation < 0) a = -a / (1 - a);
|
||||||
|
frag_color.a = a;
|
||||||
|
}
|
||||||
|
|
||||||
if (bool(fill_all)) return;
|
if (bool(fill_all)) return;
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,6 @@ in vec3 v_unit_normal[3];
|
||||||
out vec4 color;
|
out vec4 color;
|
||||||
out float fill_all;
|
out float fill_all;
|
||||||
out float orientation;
|
out float orientation;
|
||||||
out vec3 point;
|
|
||||||
out vec3 unit_normal;
|
|
||||||
// uv space is where the curve coincides with y = x^2
|
// uv space is where the curve coincides with y = x^2
|
||||||
out vec2 uv_coords;
|
out vec2 uv_coords;
|
||||||
|
|
||||||
|
@ -28,9 +26,12 @@ const vec2 SIMPLE_QUADRATIC[3] = vec2[3](
|
||||||
|
|
||||||
// Analog of import for manim only
|
// Analog of import for manim only
|
||||||
#INSERT emit_gl_Position.glsl
|
#INSERT emit_gl_Position.glsl
|
||||||
|
#INSERT finalize_color.glsl
|
||||||
|
|
||||||
|
|
||||||
void emit_triangle(vec3 points[3], vec4 v_color[3]){
|
void emit_triangle(vec3 points[3], vec4 v_color[3]){
|
||||||
|
vec3 unit_normal = v_unit_normal[1];
|
||||||
|
|
||||||
orientation = sign(determinant(mat3(
|
orientation = sign(determinant(mat3(
|
||||||
unit_normal,
|
unit_normal,
|
||||||
points[1] - points[0],
|
points[1] - points[0],
|
||||||
|
@ -39,8 +40,7 @@ void emit_triangle(vec3 points[3], vec4 v_color[3]){
|
||||||
|
|
||||||
for(int i = 0; i < 3; i++){
|
for(int i = 0; i < 3; i++){
|
||||||
uv_coords = SIMPLE_QUADRATIC[i];
|
uv_coords = SIMPLE_QUADRATIC[i];
|
||||||
color = v_color[i];
|
color = finalize_color(v_color[i], points[i], unit_normal);
|
||||||
point = points[i];
|
|
||||||
emit_gl_Position(points[i]);
|
emit_gl_Position(points[i]);
|
||||||
EmitVertex();
|
EmitVertex();
|
||||||
}
|
}
|
||||||
|
@ -61,8 +61,6 @@ void main(){
|
||||||
// the first anchor is set equal to that anchor
|
// the first anchor is set equal to that anchor
|
||||||
if (verts[0] == verts[1]) return;
|
if (verts[0] == verts[1]) return;
|
||||||
|
|
||||||
unit_normal = v_unit_normal[1];
|
|
||||||
|
|
||||||
if(winding){
|
if(winding){
|
||||||
// Emit main triangle
|
// Emit main triangle
|
||||||
fill_all = 1.0;
|
fill_all = 1.0;
|
||||||
|
|
Loading…
Add table
Reference in a new issue