| 1 | uniform vec3 inv_matrix_m0;
|
|---|
| 2 | uniform vec3 inv_matrix_m1;
|
|---|
| 3 | uniform vec3 inv_matrix_m2;
|
|---|
| 4 |
|
|---|
| 5 | uniform vec2 ellipse_offset;
|
|---|
| 6 |
|
|---|
| 7 | float ellipse()
|
|---|
| 8 | {
|
|---|
| 9 | vec2 st = gl_TexCoord[0].st;
|
|---|
| 10 |
|
|---|
| 11 | if (dot(st, st) > 1)
|
|---|
| 12 | discard;
|
|---|
| 13 |
|
|---|
| 14 | return 1.0;
|
|---|
| 15 | }
|
|---|
| 16 |
|
|---|
| 17 | // ellipse equation
|
|---|
| 18 |
|
|---|
| 19 | // s^2/a^2 + t^2/b^2 = 1
|
|---|
| 20 | //
|
|---|
| 21 | // implicit equation:
|
|---|
| 22 | // g(s,t) = 1 - s^2/r_s^2 - t^2/r_t^2
|
|---|
| 23 |
|
|---|
| 24 | // distance from ellipse:
|
|---|
| 25 | // grad = [dg/dx dg/dy]
|
|---|
| 26 | // d(s, t) ~= g(s, t) / |grad|
|
|---|
| 27 |
|
|---|
| 28 | // dg/dx = dg/ds * ds/dx + dg/dt * dt/dx
|
|---|
| 29 | // dg/dy = dg/ds * ds/dy + dg/dt * dt/dy
|
|---|
| 30 |
|
|---|
| 31 | float ellipse_aa()
|
|---|
| 32 | {
|
|---|
| 33 | mat3 mat;
|
|---|
| 34 |
|
|---|
| 35 | mat[0] = inv_matrix_m0;
|
|---|
| 36 | mat[1] = inv_matrix_m1;
|
|---|
| 37 | mat[2] = inv_matrix_m2;
|
|---|
|
|---|