Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- vec3 TRIANGLE(vec3 color, vec3 background, vec2 vertices[3], vec2 uv);
- vec2 rotate_point(vec2 point, vec2 pivot_point, float angle);
- void mainImage( out vec4 fragColor, in vec2 fragCoord )
- {
- vec2 uv = fragCoord/iResolution.xy;
- vec3 color = vec3(0.0);
- float len = .5f;
- vec2 middle = vec2(iResolution.z/2.0, iResolution.z/2.0);
- vec2 a = vec2(iResolution.z/2.0, iResolution.z/2.0 - len);
- vec2 b = vec2(iResolution.z/2.0 - len, iResolution.z/2.0);
- float angle = 105.0f - atan(iMouse.y - middle.y, iMouse.x - middle.x);
- vec2 VERTS[3] = vec2[]
- (
- middle,
- rotate_point(a, middle, angle),
- rotate_point(b, middle, -angle)
- );
- color = TRIANGLE(vec3(1.0), color, VERTS, uv);
- fragColor = vec4(color,1.0);
- }
- float TRIANGLE_sign(vec2 p1, vec2 p2, vec2 p3)
- {
- return (p1.x - p3.x) * (p2.y - p3.y) - (p2.x - p3.x) * (p1.y - p3.y);
- }
- vec3 TRIANGLE(vec3 color, vec3 background, vec2 vertices[3], vec2 uv)
- {
- bool b1 = TRIANGLE_sign(uv, vertices[0], vertices[1]) < 0.0f;
- bool b2 = TRIANGLE_sign(uv, vertices[1], vertices[2]) < 0.0f;
- bool b3 = TRIANGLE_sign(uv, vertices[2], vertices[0]) < 0.0f;
- if((b1 == b2) && (b2 == b3))return color;
- return background;
- }
- vec2 rotate_point(vec2 point, vec2 pivot_point, float angle)
- {
- vec2 new_p;
- new_p.x = - cos(angle) * (point.x - pivot_point.x) + sin(angle) * (point.y - pivot_point.y) + pivot_point.x;
- new_p.y = - sin(angle) * (point.x - pivot_point.x) + cos(angle) * (point.y - pivot_point.y) + pivot_point.y;
- return new_p;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement