Simplifications

This commit is contained in:
Grant Sanderson 2023-01-17 17:20:30 -08:00
parent 870e88f8c9
commit c563ec2036

View file

@ -41,8 +41,7 @@ vec2 xs_on_clean_parabola(vec3 b0, vec3 b1, vec3 b2){
float u0 = dot(b1 - b0, dd); float u0 = dot(b1 - b0, dd);
float u2 = dot(b2 - b1, dd); float u2 = dot(b2 - b1, dd);
vec3 cp = cross(b2 - b0, dd); vec3 cp = cross(b2 - b0, dd);
float sgn = sign(cp.z); float denom = length(cp);
float denom = sgn * length(cp);
return vec2(u0 / denom, u2 / denom); return vec2(u0 / denom, u2 / denom);
} }
@ -82,16 +81,16 @@ mat4 map_triangles(vec3 src0, vec3 src1, vec3 src2, vec3 dst0, vec3 dst1, vec3 d
onto the triangle (dst0, dst1, dst2) onto the triangle (dst0, dst1, dst2)
*/ */
mat4 src_mat = mat4( mat4 src_mat = mat4(
src0.x, src0.y, src0.z, 1.0, src0, 1.0,
src1.x, src1.y, src1.z, 1.0, src1, 1.0,
src2.x, src2.y, src2.z, 1.0, src2, 1.0,
1.0, 1.0, 1.0, 1.0 vec4(1.0)
); );
mat4 dst_mat = mat4( mat4 dst_mat = mat4(
dst0.x, dst0.y, dst0.z, 1.0, dst0, 1.0,
dst1.x, dst1.y, dst1.z, 1.0, dst1, 1.0,
dst2.x, dst2.y, dst2.z, 1.0, dst2, 1.0,
1.0, 1.0, 1.0, 1.0 vec4(1.0)
); );
return dst_mat * inverse(src_mat); return dst_mat * inverse(src_mat);
} }
@ -162,7 +161,6 @@ mat4 get_xyz_to_uv(vec3 b0, vec3 b1, vec3 b2, float temp_is_linear, out float is
vec3 dest0; vec3 dest0;
vec3 dest1; vec3 dest1;
vec3 dest2; vec3 dest2;
vec3 src1;
is_linear = temp_is_linear; is_linear = temp_is_linear;
// Portions of the parabola y = x^2 where abs(x) exceeds // Portions of the parabola y = x^2 where abs(x) exceeds
// this value are treated as straight lines. // this value are treated as straight lines.
@ -177,20 +175,17 @@ mat4 get_xyz_to_uv(vec3 b0, vec3 b1, vec3 b2, float temp_is_linear, out float is
dest0 = vec3(x0, x0 * x0, 0.0); dest0 = vec3(x0, x0 * x0, 0.0);
dest1 = vec3(0.5 * (x0 + x2), x0 * x2, 0.0); dest1 = vec3(0.5 * (x0 + x2), x0 * x2, 0.0);
dest2 = vec3(x2, x2 * x2, 0.0); dest2 = vec3(x2, x2 * x2, 0.0);
src1 = b1;
} }
} }
// Check if is_linear status changed above // Check if is_linear status changed above
if (bool(is_linear)){ if (bool(is_linear)){
dest0 = vec3(0.0, 0.0, 0.0); dest0 = vec3(0.0, 0.0, 0.0);
dest1 = vec3(0.0, 1.0, 0.0);
dest2 = vec3(1.0, 0.0, 0.0); dest2 = vec3(1.0, 0.0, 0.0);
vec3 v = b2 - b0; return map_point_pairs(b0, b2, dest0, dest2);
src1 = b0 + length(v) * normalize(cross(v, vec3(0, 0, 1)));
} }
// return map_point_pairs(b0, b2, dest0, dest1); // return map_point_pairs(b0, b2, dest0, dest1);
return map_triangles(b0, src1, b2, dest0, dest1, dest2); return map_triangles(b0, b1, b2, dest0, dest1, dest2);
} }